blog heroalche.studio

unreal_split_instancesで半プロシージャルのススメ

著者:

Jun Ozaki

投稿日 2023.11.06更新日 2023.11.06

この記事では、unreal_split_instancesというHoudini Engineで使用できるアトリビュートについて紹介します。

このアトリビュートをはじめて使用した際、Houdini Engineのワークフローが大きく変わるような感動を覚えました。

使ったことのない方は是非試してみてください!


unreal_instance


unreal_instance_demo まず、前提として、unreal_instanceについて紹介します。 今回は例としてこのようなサンプルで考えてみます。

ここではグリッドにポイントをバラ撒き、そのポイントにunreal_instanceというアトリビュートとしてアセットパスを付与しています。

Houdiniでは単なる点ですが、Unreal Engineでは具体的なアセットに差し替わります。 非常に軽快な動作で検討できる手法です。この方法はHoudini Engineについてのチュートリアルなどでもよく紹介されています。 unreal_instance_demo03 unreal_instanceアトリビュートには、Unrealのコンテンツブラウザ内のデータパスをString型として持たせることができます。

コンテンツブラウザでパスを取ることのできるデータであれば、スタティックメッシュ以外にもBPやNiagaraなど様々なデータを扱うことができます。

unreal_instance_demo_cube unreal_instanceアトリビュートでこのキューブのパスを参照しています。 unreal_instance_demo08 また、ここではあらかじめVertex Colorを取得するマテリアルが適応されたキューブをコンテンツブラウザに用意しています。

unreal_instance_demo 詳細ビュー右上のHDA内に生成されているのは、1つのStaticMeshComponentとなっていますね!

端的に言えば、unreal_split_instancesアトリビュートを使うことで、マージされたStaticMeshComponentをインスタンスごとに分けることができます。

unreal split instances


では、今回の本題であるunreal_split_instancesアトリビュートを付与したバージョンを見てみましょう!

unreal_instance_demo04 Detailビューの表示が変わっています。先程まではすべてが単一のメッシュでしたが、アトリビュート付与した後はバラバラな状態で表示されるようになりました。

unreal_instance_demo05 さらにこの変更によって、エディタ上でインスタンスを個別に選択し、移動・回転・拡縮や削除することができるようになっています。 これによって大まかな傾向をプロシージャルにデザインした後、空間内で印象に残りやすい部分を手作業で微調整することも可能になります。

unreal_instance_demo07 また、バラバラになったことで個別の最適化がしやすくなります。影にも変化が出ていますね。 遠く離れた部分を非表示にするDesired Max Draw Distanceが効いてることが確認できます。

unreal_instance_color


unreal_instance_demo10

Split Instancesが有効な場合に限り、Houdini内でポイントが持っていたCd情報をUnreal Instanceに転送することが可能です。

HDA内でCdアトリビュートをunreal_instance_colorというアトリビュートにリネームすることでCd情報をVertex Colorとしてマテリアルノードで取得し、インスタンス全体に適応することができます。

unreal_instance_demo09

Houdini Engineでプリミティブ上のCd情報の転送はサポートされていますが、unreal_instanceといったポイントベースでCdアトリビュートを扱うには、この方法しかないように思います。

unreal_instance_demo11

試しにunreal_split_instancesを無効化してみると、unreal_instance_colorも無効化され色の表示もなくなっています。

unreal_split_instancesの使い方


unreal_instance_demo12

使い方は簡単です。attribute createなどでunreal_split_instancesという名前のアトリビュートを付与します。クラスはdetailまたはprim、タイプはintegerで有効化するためにValueを1にします。

unreal_instance_colorの使い方


unreal_instance_demo13 unreal_instanceにポイントのCd情報を送るには、CdのVector型データをunreal_instance_colorにリネームするだけでOKです!


最近話題になることの増えた点群データを利用した表現にも応用することができそうですね!