#はじめに
この記事はUnreal Engine 4 (UE4) その2 Advent Calendar 2020の9日目の記事になります。
UE4は4.24からAlembic Groomのインポートに対応し、毛の一本一本を正確にシミュレート&レンダリングすることによりフォトリアルなHair&Far表現が可能になりました。
最近ではWeta Digitalのショートムービーが話題になりましたね。
現在最新の4.26ではProduction Redyとなり、製品での使用も可能になりました!弊社Epic GamesはWeta Digita社と協力して、この短編アニメーションを Unreal Engine 4 で制作しました。この動画では UE4.26 にて全てのユーザに提供される新しいHairとFur機能を使用しています。また、Control Rig や SequencerのAnimation機能、そしてMovie Render Queueが活用されています。 #UE4 pic.twitter.com/RTSju5ODSp
— アンリアルエンジン (@UnrealEngineJP) November 12, 2020
#概要
UE4へのAlembic Groomインポート、運用に関しては公式ドキュメントに詳しく書いてあります。
髪のレンダリングとシミュレーション
UE4向けのGroomアセットの作成、インポートフローについてもドキュメントにまとまっていますが、Mayaベースの解説となってます。
XGen による毛髪や、体毛、毛皮のレンダリングに関するガイドライン
なので今回はHoudiniからUE4へのインポート手順やアトリビュートの受け渡しなどについてまとめてみようと思います。
#準備
UE4プロジェクトでHair Groomを有効にするには以下の設定を行っていただく必要があります。
###Project Settingsを開き、Rendering > OptimizationsでSupport Compute Skin Cacheを有効にする。
###プライグインブラウザを開き、Alembic Groom ImporterとGroomプラグインを有効にする。
再起動を要求されるので再起動します。これでUE4側の準備は完了です。
#HoudiniからUE4へのAlembic Groom受け渡し
###HoudiniでHairを作成する
まずはいつものブタさんに簡単に毛を生やしてみましょう。
そのまま作るとUE4とスケールが合わないので、事前に100倍スケールしておくといいです。
今回はUE4へのインポートがメインですので、この辺りは省略します。
気持ち悪いですね!
###Alembicでエクスポートする
作成したFar(Hair)はジオメトリノードHairgen内でRop Alembicノードを使用してエクスポートします。
微調整のためにいろいろ繋がってますが、HAIRSピン以下につながっていれば大丈夫です。
特に設定は変更せず、エクスポートしたいパスを入力してエクスポート。
###UE4にインポートする
エクスポートしたAlembicはそのままインポートすればGroomとしてインポートされます。
以下のようなウィンドウが出ますが、Houdiniで作成したAlembicをインポートする場合、RotationにX-90、Z180を入れておくと回転が合います。
別途スキンメッシュもインポートし、同じ座標に置けばピッタリ合うはずです。
これでHoudiniからUE4へのAlembic Groomのインポートが完了しました。
#補足情報
###MeshのUVを受け渡す
せっかくなのでもう少し補足情報を。
UE4のマテリアルノードHair Attributesノードでは、Groomに含まれている各種Attributeを取得できます。
このなかのRoot UVは主に元となるメッシュのUVを格納し、Hairにテクスチャをマッピングする用途で使います。
こちらも公式ドキュメントで解説されていますが、やはりMayaベースのものとなってますのでHoudiniでの受け渡し方法も書いておきます。
受け渡すAttributeには命名規則があり、Root UVは"groom_root_uv"という名前でアトリビュートを作成します。
デフォルトでPrimitive AttributeとしてUV情報が転送されているはずなので、ジオメトリノードのhairgen内でAttribute RenameやWrangleを使ってUV情報を持った"groom_root_uv"を作成します。
Rop AlembicノードのGeometryタブ、Additional UV Attributesにgroom_root_uvを入力します。
これでgroom_root_uvがRoot UVから取得できるようになります。
試しにRoot UVをBase Colorに直接接続してみると、ちゃんとUVが来ているかどうか確認できます。
(コンソールコマンド"r.HairStrands.StrandsMode 3"でも確認可能です。)
これで好きなテクスチャをマッピングできますね。
ちなみにgroom_root_uvが作成されていない場合は、spherical mappingを使用して自動的にUVが生成されます。
以上です。
皆さんもHoudiniとUE4でたくさんモフモフを作って遊んでみましょう!
明日は福助8.5号さんです!