HOME

Maneki Pipeline

ゲーム開発のためのプロシージャルワークフロー

魚群VATの作成③:単一のマテリアルインスタンスで複数種類の魚を表示する

生成AIで沢山魚をたくさん作ったので魚群VATを作成するパイプラインを作成したい

環境

HoudiniFX 20.5.613
UnrealEngine 5.5.3

作成結果

以前、「Vertex Animation Textures for Crowds」のチュートリアルを参考に頂点カラーでVATの表示を切り替えた手法と概ね同様。

VATによる群衆表現③:頂点カラーによるキャラクターバリエーションの切り替え
(以前の記事。ブループリントで制御する目的のVATを頂点カラーで切り替えた)

頂点カラーとパーティクルカラーを利用して表示するメッシュをパーティクルごとに切り替えている。

単一のマテリアルインスタンスで複数の魚を表示している
シェーダー複雑度

複数の魚をひとつのvatに含める

複数の魚を一つのVATメッシュにまとめていく

メッシュ、テクスチャを結合
今回は4つの魚をまとめる。
fileノードで4種類の魚のスタティックメッシュを開き

4種類の魚をシーンに追加。 すべてのuvを1マップに収めている

ひとつのマテリアルインスタンスで表示する関係上、uvをまとめてbasecolor、normalなどのチャンネルを各々ひとつのテクスチャで表示する。

今回はcopでまとめたが、現実にパイプラインを組もうとした場合、このあたりは仕様と相談でベイクを含む自動化や部分的な手動化等の設計が必要になると思う

今回はCOPでテクスチャをまとめた

頂点カラーの出力
マテリアルインスタンス内で表示を切り替えるためのマスクとして、それぞれに異なる頂点カラーを設定する。
0は表示しない色調にしたいので0.1〜1.0で割り当て。

魚ごとに0.1刻みでR色を設定

LabsVeretexAnimationTexturesのSettings/ExportStaticMesh を有効にする。

ROPの頂点カラーを出力するための設定を有効化

頂点カラーで表示切り替えを行うマテリアルを作成

メッシュの準備が出来たのでUnrealEngineでパーティクルのポイントカラーに合わせて表示を切り替えるためのマテリアルを作成する。

マテリアル設定
マテリアルの Blend Modeを Masked に変更し、

Blend モードを Masked に変更

頂点カラーとパーティクルカラーが一致した場合に透明度が1になるようなノード構成を作成

頂点カラーによる表示切り替えのための構成

Niagaraでパーティクルの生成時に色を設定できるようにする

Niagaraで頂点カラーを設定するとメッシュが切り替わる

結果

以上で、パーティクルカラーに合わせて魚の種類が切り替わるようなNiagaraメッシュパーティクルの作成ができた。

余談:出力メッシュが破綻する場合がある

原因が不明だが出力メッシュの頂点数が変えるとVATの結果が破綻してしまうような場合が見受けられた。

ノード構成が同じでも出力メッシュの頂点数を変更した場合にエラーデータが出力されてしまう場合があった

原因までわからなかったのが非常に残念なのだが、出力メッシュの頂点数を減らすことで回避できる場合もあった。(ただし減らせば解決するというものでも無いようで、キャッシュかUV精度か、原因は不明)

出力ポリゴン数を大きく減らすとうまくいきがち(ただし純粋にポリゴン数で失敗しているわけでもなさそうだった)

ひとまず、頂点数を削減すれば発生しづらいようだった。VATをリッチに扱うことも無いと思うのでひとまず困ったら頂点数削減して直ればそれを利用しようと思う。


余談で書いたポリゴン数増減時の破綻はもし原因わかったら記事を記載させていただきます。内容には記載していませんが、以前出力がうまくいった「LODを含む構成」でもLOD1以外が破綻する状態に見舞われ今回かなりハマりました。(よくある事例らしい)

VAT周りは厳密に必要な数字を出力するための設定事項を把握できていないとハマりがちな印象です。
上述のハマった2例に関してはLabsのVAT ROPの中身を見ていけば原因判るかもと思うのでもしわかればまた記載させていただきます。

fish_ball

プロシージャル魚類