こんにちは、篠島です。今までベクトルから運動方程式やら説明してきたので、今回はPOP VOPでカスタムフォースを作り、渦を巻くようなパーティクルを作りたいと思います。
今回のサンプルファイルです。
spin.zip
まずGridとScatterでポイントを配置します。
このポイントの位置をノーマルにすると下のようになります。位置は原点からのベクトルを表すものなので、これを法線に入れると、放射状に広がる様な法線になるのが分かります。
次に、Upベクトルを自分で勝手に定義します。これは{0, 1, 0} の上を向いているベクトルです。
CG数学 ベクトル3 外積で説明したように、この放射状に広がるベクトルとUpベクトルの外積を求めると、お互いのベクトルに対する垂直なベクトルが求められ、下の様になります。
これらの図はビジュアライゼーションのために、ベクトルを法線として表しています。自分でカスタムなベクトルを作った時は法線に繋ぐと簡単に表示して確認できるので便利です。この法線を元にパーティクルを動かすには・・・もうお分かりですね。法線情報をそのままForceやVelocityにしてやればいいのです。
もしForceに繋ぐと、放射状に広がっていってしまいます。これは何故かと言うと、DOP基礎 10 運動方程式で説明したように、フォースは加速度となり、既存のVelocityに追加されていくもので、毎フレーム速度が加速していってしまう為に起こります。これを防ぐにはPOP Dragなどで速度を落としてやると綺麗に渦を巻いてくれます。
POP Dragを追加して速度を落とすと綺麗に渦を巻いてくれますが、速度を落とした分全体の動きが遅くなっています。
一番ラクなのが、外積で求めたベクトルを直でVelocityに繋ぐ事です。いい感じの速度で渦を巻いているのが分かります。
しかし、POP VOPでVelocityを直接操作するという事は、もしPOPストリームのどこかでフォース系のノードを使っていた場合、フォースによるVelocityの計算がPOP VOPの所で上書きされてしまい、フォースの影響は1フーレム分の加速度の影響しかVelocityに与えられません。難しく聞こえますが、要はVelocityを直接操作することは他のフォースの影響を思ったように受けなくなるという事です。