⬆️

[TouchDesigner]パーティクルが移動するベクトルを活用する

2024/09/25に公開

はじめに

https://www.youtube.com/watch?v=niYOBKuuQ74
この動画のようにTouchDesignerで移動のベクトルをとって回転させたい!みたいなことがたまにあると思います
ミサイル/鳥の群れ/魚群/車の渋滞 などなど
自発的に動くものはたいてい前と後ろが決まっているものです
そんなものを動かしたい自発的TouchDesignerユーザーのお役に立てれば幸いです

まずは以下からサンプルファイルをダウンロードしてください
Particle LifeTime .toe

ベクトル計算のしくみ

さっそくサンプルの中身をみてみましょう

開くとこんな感じで3つ並んでいます
今回は真ん中の「Rotate_to_Vector」というコンテナをみていきます



コンテナの中(/project1/Rotate_to_Vector)に入るとこうなっています


過去フレームを使えるようにする

「ポジション」と書かれたボックスでとりあえず適当なポジションアニメーションを作っています
そこからつながっている右上の「過去フレームをキャッシュする」と書かれたボックスをみていきましょう



cacheTOPの"Cache Size"に"8"を入力し、次に"chacheselectTOP"で"cacheTOP"を指定して"Cache Index"を"-8"とします

これで8フレーム前の画像を使うことができるようになりました
8フレームということに特に意味はありませんが、過去と現在の差分を取って移動の方向を導き出すのである程度過去と見比べる必要があります
動きが速ければ変化量が大きいのでもっと近過去でもいいかもしれません

ベクトルの計算

「ベクトルの計算」と書かれたボックスを見てみます
こんな感じになっています

ベクトルは高校の数Bで習うらしいので、受験生に戻ったつもりで復習しましょう
まずはベクトルの成分を計算します
5分でわかる!ベクトルの成分
ベクトルの成分はベクトルの始点を原点に合わせたときに決まる終点の座標です
現在のポジション-過去のポジション
で計算できます
subtractTOPを使って計算します


次に現在と過去の距離を計算します
5分でわかる!成分によるベクトルの演算
TouchDesignerではmathTOPに2点間の大きさ(長さ・距離)を計算してくれる項目があるのでそれを使います

中身はこんな感じ
"Combine Channel"を"Length"にして
"Combbine Channel Output"を"R"だけ残して他をグレーアウトにします
また、CommonタブのPixel Formatは"32-bit float(mono)"にしてください
長さは1次元なのでRのみのmonoで出力したいためです


次にベクトルを正規化します
ベクトルの正規化とは、ベクトルの正規化はベクトルの向きを変えずに大きさ(長さ)を1にすることです
これを聞くとなんとなくピンとくるかもしれませんが、
ベクトルの成分÷長さ
で計算できます
割り算なのでcompositeTOPの"Operation"を"Divide"にします

これで準備完了です!

ベクトルを使ってインスタンスする

GeometryCOMPには"Rotate to Vector"という項目が用意されています
あとはそこに入力するだけです
まずgeometryCOMPの"Instance2"タブの一番上の"Rotate to OP"にさっきの計算結果を入れ、
それぞれrgbを指定します
正面をどうするかなどの設定もします

完成!

おつかれさまでした!
その他の細かい設定はサンプルファイルをご覧ください

Discussion