JKになりたい

何か書きたいことを書きます。主にWeb方面の技術系記事が多いかも。

Houdini Engine for UnityでHoudiniで作ったプロシージャルモデルをUnity上で利用する

突然ですが、最近(ここ数日レベル)は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にしたいノード群をサブネットにする

サブネットにしたい対象のノードを選択し、画像の赤枠で囲った部分を押下するとサブネット化可能です。

f:id:sakata_harumi:20210504014154p:plain

図にはMaterialノードがありますが、これはSOPではなくサブネット外部の別のネットワークタイプのノード(VOP)を参照しているため、HDAにすることができません。

もしマテリアルにVOPのノードを指定した状態でMaterialノードを含めてHDA化しようとすると、以下のような警告が表示されます。

f:id:sakata_harumi:20210504013903p:plain

(手順2) 使用したいパラメータをアウトプットする
プロシージャルモデルを利用するんですから、当然パラメータによってその形状等を変化させたいわけです。

しかし、全てのパラメータがUnity上で変更できるようになるわけではなく、アウトプットしたパラメータだけが変更可能になります。

まず、Edit Parameter Interfaceから設定画面を開きます。

f:id:sakata_harumi:20210504015218p:plain

そして、サブネットの中に入ってアウトプットしたいパラメータをD&Dでもってくると設定可能です。

f:id:sakata_harumi:20210504015354p:plain

(手順3) HDAをエクスポートする

サブネットの上で右クリック > Create Digital Asset でHDA作成します。 色々細かい設定が出てきますが、よくわからないのでそのままにしました。とりあえず問題なさそうです。

f:id:sakata_harumi:20210504015452p:plain

Unityへ取り込む

(手順1) Houdini Engine for Unityを導入
公式の導入記事を参考に、カスタムパッケージをUnityプロジェクトに取り込みます。

www.sidefx.com

(手順2) HDAをインポート

Houdini Engine > Load File > HDAからインポートできます。先ほどエクスポートしたものを選択してください。

f:id:sakata_harumi:20210504020103p:plain

これで、パラメータを変えることでモデルの形状が変化するようになりました!

youtu.be

あとは良きパラメータを指定し、ベイクすることでそのモデルをゲームシーンに利用可能になります。

「ベイクすることで」とあるように、パラメータをゲーム中動的に変更することはできないのでご注意を。

UnityのMaterialを参照する

今回の手順では、Materialをエクスポートできませんでした。

白いままでは味気ないので、Unityで作成したマテリアルを利用できるようにしていきます。

Houdini Engineをインストールしていると、SOPに「Unity Material」というノードが用意されています。通常のMaterialの代わりに、こちらを利用することでUnityで作成したマテリアルを参照できます。

f:id:sakata_harumi:20210504022118p:plain

パラメータのStringにマテリアル(.mat)の Assets以下の相対パスを記述します。

f:id:sakata_harumi:20210504022455p:plain

そして、同手順でHDAを生成するのですが生成したHDAファイルは Assets以下の任意の場所 に置いてください。 「相対パスを記述する」「Assets以下にHDAファイルを置く」この二点がハマりポイントになります。

これで、Sphereに色をつけることができました!

youtu.be

おわりに。

Unityにプロシージャルモデルを取り込む事ができました。広大なマップにオブジェクトを配置したり、単一のモデルから様々なバリエーションのモデルを作成したりと、応用範囲は広そうです。

ただ、個人開発レベルのプロジェクトで活かせるか・・といわれるとまだイメージができてません。面白い応用例を考えてみたいところ。

また、今回は動かないモデルでしたが、Houdiniはシミュレーションも得意っぽいです。

ベイクしたアニメーションをUnityで利用するには、FBXアニメーションやVAX(Vertex Animation Texture)を利用してUnityへ取り込む方法があるようですが、そちらも追々試していけたらと思います。