突然ですが、最近(ここ数日レベル)はHoudiniに入門しています。
きっかけはVFX Graphでエフェクトを制作していた際、自分の思っているものにするにはVectorFieldというものが必要で、それを作成するためにはHoudiniが必要・・やるか・・という感じです。
で、まあ、せっかくGWもあることだし腰を据えて勉強してみよう、という。
そこで、今回はHoudiniで作ったプロシージャルモデルをUnityへもっていく方法を試しました。
今回はその記録記事を書いていきたいと思います。
本記事の利用環境
- windows 10
- Houdini Indie 18.5
- Unity 2020.2.3f1 (URP)
※ 本記事ではHoudini Engineを利用しているため、Houdini Apprenticeでは実行不可能です。詳細は公式のライセンス比較ページを参照ください
HDA(Houdini Digital Asset)の作成
プロシージャルモデルをUnityで利用するためには、Houdiniを使ってHDAを作る必要があります。
(手順1) HDAにしたいノード群をサブネットにする
サブネットにしたい対象のノードを選択し、画像の赤枠で囲った部分を押下するとサブネット化可能です。
図にはMaterialノードがありますが、これはSOPではなくサブネット外部の別のネットワークタイプのノード(VOP)を参照しているため、HDAにすることができません。
もしマテリアルにVOPのノードを指定した状態でMaterialノードを含めてHDA化しようとすると、以下のような警告が表示されます。
(手順2) 使用したいパラメータをアウトプットする
プロシージャルモデルを利用するんですから、当然パラメータによってその形状等を変化させたいわけです。
しかし、全てのパラメータがUnity上で変更できるようになるわけではなく、アウトプットしたパラメータだけが変更可能になります。
まず、Edit Parameter Interfaceから設定画面を開きます。
そして、サブネットの中に入ってアウトプットしたいパラメータをD&Dでもってくると設定可能です。
(手順3) HDAをエクスポートする
サブネットの上で右クリック > Create Digital Asset でHDA作成します。 色々細かい設定が出てきますが、よくわからないのでそのままにしました。とりあえず問題なさそうです。
Unityへ取り込む
(手順1) Houdini Engine for Unityを導入
公式の導入記事を参考に、カスタムパッケージをUnityプロジェクトに取り込みます。
(手順2) HDAをインポート
Houdini Engine > Load File > HDA
からインポートできます。先ほどエクスポートしたものを選択してください。
これで、パラメータを変えることでモデルの形状が変化するようになりました!
あとは良きパラメータを指定し、ベイクすることでそのモデルをゲームシーンに利用可能になります。
「ベイクすることで」とあるように、パラメータをゲーム中動的に変更することはできないのでご注意を。
UnityのMaterialを参照する
今回の手順では、Materialをエクスポートできませんでした。
白いままでは味気ないので、Unityで作成したマテリアルを利用できるようにしていきます。
Houdini Engineをインストールしていると、SOPに「Unity Material」というノードが用意されています。通常のMaterialの代わりに、こちらを利用することでUnityで作成したマテリアルを参照できます。
パラメータのStringにマテリアル(.mat)の Assets以下の相対パスを記述します。
そして、同手順でHDAを生成するのですが生成したHDAファイルは Assets以下の任意の場所 に置いてください。 「相対パスを記述する」「Assets以下にHDAファイルを置く」この二点がハマりポイントになります。
これで、Sphereに色をつけることができました!
おわりに。
Unityにプロシージャルモデルを取り込む事ができました。広大なマップにオブジェクトを配置したり、単一のモデルから様々なバリエーションのモデルを作成したりと、応用範囲は広そうです。
ただ、個人開発レベルのプロジェクトで活かせるか・・といわれるとまだイメージができてません。面白い応用例を考えてみたいところ。
また、今回は動かないモデルでしたが、Houdiniはシミュレーションも得意っぽいです。
ベイクしたアニメーションをUnityで利用するには、FBXアニメーションやVAX(Vertex Animation Texture)を利用してUnityへ取り込む方法があるようですが、そちらも追々試していけたらと思います。