HOME

Maneki Pipeline

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

プロシージャルニット作成③ ゲーム用ベイクとマテリアル検討①

ニットの表現をゲームで動作させる想定でParallaxやUEのストランドによるファーをテスト。 残念ながらこの記事内で良い結果まではたどり着くことができていません

ニットモデルをゲームで表現するための判断材料としていくつかのUE上での出力工程を確認しました。

環境

HoudiniFX 20.5.613
UnrealEngine 5.5.4

前回の内容

UV座標へのメッシュ投影を利用したプロシージャルニット作成②
https://www.procedural.jp/articles/nb7_fvxru/
少し間が空きました。

テクスチャのベイク

モデルへのベイクとUEでテストを行った際のディテールマップを作製するための工程

モデルテクスチャ

プロシージャルにニット形状を作成したモデルの元メッシュからPolyReduceなどでローポリメッシュを作成し、

PolyReduceなどでローメッシュを作成

LabsMapBakerを使ってBaseColorとNormalを作成
(MapBakerが簡易なケージモデルを法線方向からのサイズ指定で作成してくれるのでオススメです)

LabsMapBakerでテクスチャをベイク
COP Preview MaterialでHoudini上でベイクしたBaseColorとNormalをプレビューできる

ディテール用ハイトマップ

ニットモデルの周りに生やしていたファーもハイトマップとしてベイクする。
(ただ結論から言うとこの工程で作成したテクスチャを割り当てた結果は微妙でした。)

Gridを新しく作成し、hairgenとGuideProcessを作成して似たようなファーになるようなガイドを作成する。

Gridからヘアを作成

GuideProcessはDetailAttributeの「gl_shadeopencurves」で表示を変えているカーブなのでPolyWireなどを使ってポリゴン化する。polyWireはScaleの設定をAttributeにするとWidthとして持っている毛の太さを参照したポリゴンが作成できる。

PolyWireの太さをPointAttribute準拠で作成

ベイクされるテクスチャをループテクスチャにするためにY軸に180度回転したメッシュをマージ

transformで180度回転したメッシュをマージしてループテクスチャにする(毛の流れる方向がある場合は出来ない、力技です)

モデル同様にMapsBakerを使ってHeightをベイク。Rangeをエクスプレッションで第2入力の上下幅になるようにする。

MapsBakerでディテール用のループテクスチャとしてベイク

マテリアルでのアプローチ

いくつかのマテリアルをテスト

ファーを含めたベイク

テクスチャベイク時にポリゴン化したファーを含めてベイクした場合。
解像度にもよると思うが現実的な解像度ではまともに表示できない。

ノイズが乗ってしまっただけな印象

ベーシックなマテリアル + ディテールマップとベーシックなマテリアル + Parallax Occlusionディテール

ディテールマップを追加して表示できるようなマテリアル(上)
とファーなどに使われる場合もあるParallaxマップ(下)。

ディテールとパララックス。毛束感がある表現でなければあまりやる意味はなさそう

あまりディテールディテール用のテクスチャで本当に細かな質感を出そうと思うのはちょっと難しそう。
もちろん、見た目を詰めていけばよくなるとは思うものの、散った毛の本質は周りに飛んでいる毛だと思うので良い結果は遠そうな印象。

ストランドでのアプローチ

ストランドも一応試す。
やりたいことは一致すると思うが今回はスタティックメッシュに対して飛んだ毛を作成したいので負荷的にはあまり適切ではないと思う(負荷の検証まではしていません)

HoudiniLabsはHoudiniで作成したヘアスプラインをUnrealEngine上に出力可能なノードを用意してくれている。
LabsUnrealGroomExpoortを作成し、第1入力にヘアカーブ、第3入力にスキンメッシュを接続する。
SaveToDiskを実行するとAlembic形式でカーブが出力される

LabsUnrealGroomExpoortにヘアとスキンを接続

UnrealEngineでGroom用のプラグインを有効にし、

GroomとGroom用Alembicのプラグインを有効化

AlembicをUnrealEngineにImportする。
座標系を合わせるために回転は-90, 0, 180。(今回のテスト環境はUE5.5.3でした。UE5.6だと不要かも)

出力されたAlembicヘアをimport

スタティックメッシュと同じ位置に移動すれば出力時と同一に配置できる。

ヘアを配置。バインドはしていない

ストランドはスケルタルメッシュであればバインドすることでカラーの転送なども可能なようですが今回はスタティックメッシュで試していたので色もすべてのストランドで共通になってしまっています。

見た目は行けそう…ですが処理負荷は試していないものの、定説で考えればシーン内の大量のスタティックメッシュに生やすのはちょっと難しいと思います。


残念ながらこれなら行けるだろうという感覚が得られるところまでたどり着きませんでした。

今回の目標だった「ニットモデルの飛び散った毛」はゲームモデルではあまり描画されるものではないのでデータの出力からのアプローチは全体的に少なくとも簡単に良い結果が出るものでは無いですね…。

恐らくベイクや既存機能は不適切なので、追い追い時間を見つけて専用のポリゴンを作成する方法を構築したり専用のマテリアルを作成した表現など模索してみます。

また、テクスチャべいくについては今回COPは使いませんでした。Houdini21でアップデートが来るのでHoudini21になったタイミングで試すと思います。
Houdini21SneakPeakではCOPでのベイクが映っていたのでHoudini21になったら形式化されたモデルのテクスチャベイクもやってみようかなと感じます。

fish_ball

プロシージャル魚類