🌀

HoudiniEngine を UnrealEngine の Importer/Exporter として活用する

2024/07/08に公開

環境

Houdini Indie 20.0.688
Unreal Plugin 20.0.688
Unreal Engine 5.3.2

概要

本文で話したい内容はおおむね以下について。

  • UEの配置情報やメッシュをHoudiniで取得(もちろんHoudini経由でMaya等でも使える)
  • UEへのImport設定をHoudiniからアートチーム準拠で設定できる
  • インスタンスやfoliage、ライト、ブループリントなどの配置情報のimportが可能
  • UE用のコードなどは書かない
  • HoudiniEngineでセットアップされたデータはプラグインへの依存性も無い

HoudiniEngineはパイプラインである

HoudiniEngineはDCCツールであるHoudiniを提供しているSideFX社が提供しているHoudiniの仕組みをHoudini外で動作させることの仕組み。
最近、この製品のワークフローを改善するための仕組みの部分に個人的に非常に可能性を感じている。

5年前くらいでは主にプロシージャルモデリングを実現することを推していたこのツールははたして2024年6月今現在の公式サイトを見ると「パイプラインツール」という名称で製品の概要が説明されている。
https://www.sidefx.com/ja/products/houdini-engine/

このパイプラインツールとしての用途が非常に有益そうな印象であり本文はその内容となる。

HoudiniEngineをExporterとして活用する

UE上の配置データなどを出力していく。

UE上で利用するためのhdaを準備

HoudiniEngineをExporterとして利用するために以下のようなhdaを作成する。
hdaの作成1
hdaの作成2

UEからHoudiniEngineでキャッシュを保存

Unrealのシーン上でhdaを配置し、HoudiniInputsの項目を選択するとGeometryInput、WorldInput、CurveInputが項目として表示される。
この中でGeometryInputを選択するとコンテンツブラウザから選択、WorldInputを選択するとレベル内の配置オブジェクトから選択してhdaの入力として割り当てることができる。
UEからキャッシュ保存1

今回はWorldInputを選択し、Addから出力対象にしたいメッシュを選択する。
選択が終わったらhdaの外に出したSavetoDiskボタンを実行。
試しにParagonSampleでシーン内のすべてを対象に選択してみる
UEからキャッシュ保存2

生成された2.8GBのキャッシュを確認するとメッシュの配置情報が保たれたまま出力できたことが確認できる。
UEからキャッシュ保存3

メッシュではなく配置情報を出力

また、UE側の設定でExport Input as Reference を有効にするとUEのアサイン情報とトランスフォーム情報を持つポイントとして出力できる。
UEからキャッシュ保存4
UEからキャッシュ保存5

後述の入力と組み合わせればUE外で置き換えや一の調整に利用も可能。
非常にシンプルなhdaを作成するだけでUE上の配置情報をDCCツールに送るためのExporterとして利用することができた。

HoudiniEngineをImporterとして活用する

Houdini側で設定したパラメータでメッシュインスタンスやライトなどを配置していく。
Importerとして活用する場合はHoudini側で設定したアトリビュートに応じてデータを配置、生成できる。

インスタンスとして配置

pointアトリビュートに UE上でスタティックメッシュのリファレンスをコピーから取得できる文字列を unreal_instance として設定し、hdaから出力するとhdaをクックした際にインスタンスとして作成できる。
transformのコントロールがしたい場合はポイントにscale、rotなどを設定する。
UEにImport1
UEにImport2
UEにImport3

Instanced Static Meshを分離

特に設定しない場合に勝手にInstanced Static Meshにしてくれるので、StaticMeshとして配置した状態で作成した場合は unreal_split_attr でグループわけの条件を設定する。
UEにImport4

foliageとして配置

unreal_instanceとしてリファレンスを設定しつつ、 unreal_foliage=1 を指定するとfoliageとしてシーンに作成できる。
UEにImport5
UEにImport6

DCCツール側のアトリビュート指定のみでインスタンス作成を行うことができた。

ライトやブループリントを配置

unreal_instanceの値をPointLightやブループリントのリファレンスにするとそれらのインスタンスも作成できる
UEにImport7
UEにImport8

HoudiniEngineの依存性とライセンスについて

ここまでHoudiniEngineの有用性について上げさせていただきましたが、実際に導入を検討するという場合には、懸念事項が無いかを確認することになると思います。
経験上、その中で「依存性」「ライセンス」の2つは比較的トピックは挙がるのではないでしょうか。この2点について軽く触れておきたいと思います。

プラグインの依存性について

HoudiniEngineで生成されたメッシュ類は通常のUnrealのオブジェクトであり、プラグインが無い状態で利用できます。
レベル内だと生成時点ではプラグインに紐づいたオブジェクトでパラメータの変更などで出力結果が変わるのですが、Bakeボタンを押すとレベル内にStaticMeshなどのオブジェクトとして生成されます。

ベイク

この状態ならHoudiniEngineプラグインが無い環境でもレベルを読み込めるので、運用次第ではアートチームが配置するときのみHoudiniEngineを利用するようなフローも可能。

ライセンス

HoudiniEngineを動作させるにあたりライセンスは必要になります。
ただし、前述のとおりHoudiniEngineで生成されたオブジェクトにはEngineとの依存性は無く、新しく生成しない限りライセンスを動作に求められることはありません。

ImporterやExporterとしてアートチームが利用するだけならばアートチームの利用するHoudiniFX/HoudiniCoreのライセンスのみで足りる。

細かなライセンスの占有タイミングなどはヘルプデスクに記載されているので必要に応じて参照されたし。
https://www.sidefx.com/ja/faq/?product=&category=&version=&os=&q=engine&page=1

考えられる利点など

アートがエンジンを触る必要性をかなり減らせそう

ImporterとしてDCCツール側の制御で配置情報、Blueprint、ライトなども設定可能なのでちゃんと考えればアートチームにEngineを触ってもらう必要性をかなり減らせそう。
マテリアルを作ったりモーション周りの設定などはまだ弱いのでこの先の更新に期待。

Unity/UnrealEngine両方を出力先として選べるような仕組みが作れる

実は最もHoudiniEngineの独自性なのではないかと思っている部分。HoudiniEngineはforUnity、forUEの両種を用意しているので検証すればいける気がする。
Switch用にUnity、PC用にUnrealEngineを使うみたいな滅茶苦茶な座組の実現もできるかもしれない。そんな無茶しなくてもリスク対策やテストへの有用なメリットになる。
※現実にはForUnityとForUEで機能によって開発の速度が異なるらしいので今すぐ全く同じことができるかは検証しないとわからないが・・・

USDのワークフローへの組み込み、統合できる

現在3Dコンテンツ全体のデータ形式をUSDに標準化する取り組みが進められている。(はず…現実的なUnity/UEゲーム開発フローへの導入がいつ頃になるかは判らないが)
https://aousd.org/

HoudiniはDCCツールの中で非常にUSDとの親和性が高いツールなのでHoudiniEngineでHDAを利用する際にUSDを処理の中に組み込むことも可能であり、パイプラインの特定の部分をUSDに置き換えるような必要性が出た場合にも柔軟に組み込みがもっとも現実的なツール。
ある日突然ワークフローの中にUSDではないと持つことのできないデータ形式が必要になった場合でもHoudiniEngineで部分的にでも組み込みが行えている環境ならばデータの扱いへのコストを最小限にできそう。

Discussion