メッシュ上でパーティクルを這わせるサンプルは数あれど
そのほとんどがDistanceFieldを用いてメッシュ上を這わせる物で、StaticMesh向けの物です。(Distance Field Traversalなど)
スケルタルメッシュメッシュでも同等の表現ができます!
特に自前で何か用意する事無く標準の機能だけで実現する事が出来ます。
しかもノーコードです。
今回使う機能
TraverseSkeletalMesh
意外と認知度低いモジュールの名前はその名もTraverseSkeletalMeshです。
今回はその使い方を紹介します。
おなじみのテンプレートFountainを改造して実装してみる。
それではおなじみFountainをカスタマイズして実装していきましょう
新規NiagaraSystemの作成
まずは新規データの作成からです。
ここでテンプレートを用いて作られたシステムに対して改変を加えていきます。
出来上がった物を開くと噴水のようにパーティクルが噴き出ています。
事前のパラメータ準備
GPUで動くようにする
不要なモジュール削除
ユーザーパラメーターの追加
ユーザーパラメーターとしてSkeletalMeshを追加し、適当なメッシュをアサインします。
スケルタルメッシュの表面位置から出す
SkeletalMeshLocationを追加して、作成したユーザーパラメーターをアサインします。
サンプリングはトライアングル単位にします。
必須な機能はポリゴン上の位置と、TriCoordなので、この2つが出力できれば自前のモジュールスクリプトでも構いません。
ステージ追加
ここまでが下準備です。
TraverseSkeletalMeshのセットアップ
いよいよTraverseSkeletalMeshの設定をしていきます。
InitializeTraverseSkeletalMeshを追加
TriCoodinateにSkeletalMeshLocationの出力したTriCoordを指定してください。
Updateの一番下にPrepareTraverseSkeletalMeshを追加
Prepareの下に TraverseSkeletalMesh本体を追加
スケルタルメッシュパラメータにユーザーパラメータをアサインしてください。
追加されたシミュレーションステージにApplyTraverseSkeletalMeshを追加追加
一旦完成
スケルタルメッシュの表面上に沿ってパーティクルが動くようになりました。
ブラッシュアップ
埋まってしまうことに対する対応
パーティクルの中心がメッシュ表面上を動くので、単純実装しただけだと刺さった見た目になってしまいます。
カメラオフセット
TraverseSkeletalMeshの後にカメラオフセットモジュールを追加し、5cmほどカメラ方向に押し出します。
今度こそ完成
まとめ
強力で、標準の機能にもかかわらず、資料が少ない機能であるTraverseSkeletalMeshについて紹介しました。
実戦投入するにはTSRやブラー対応を工夫する必要があるかもしれません。
今回は基本的な使い方でしたが、マテリアルやモジュールの組み合わせで大きく可能性が広がるので是非色々試してみてください。
参考