この記事では、unreal_split_instancesというHoudini Engineで使用できるアトリビュートについて紹介します。
このアトリビュートをはじめて使用した際、Houdini Engineのワークフローが大きく変わるような感動を覚えました。
使ったことのない方は是非試してみてください!
unreal_instance
まず、前提として、unreal_instanceについて紹介します。
今回は例としてこのようなサンプルで考えてみます。
ここではグリッドにポイントをバラ撒き、そのポイントにunreal_instanceというアトリビュートとしてアセットパスを付与しています。
Houdiniでは単なる点ですが、Unreal Engineでは具体的なアセットに差し替わります。
非常に軽快な動作で検討できる手法です。この方法はHoudini Engineについてのチュートリアルなどでもよく紹介されています。
unreal_instanceアトリビュートには、Unrealのコンテンツブラウザ内のデータパスをString型として持たせることができます。
コンテンツブラウザでパスを取ることのできるデータであれば、スタティックメッシュ以外にもBPやNiagaraなど様々なデータを扱うことができます。
unreal_instanceアトリビュートでこのキューブのパスを参照しています。
また、ここではあらかじめVertex Colorを取得するマテリアルが適応されたキューブをコンテンツブラウザに用意しています。
詳細ビュー右上のHDA内に生成されているのは、1つのStaticMeshComponentとなっていますね!
端的に言えば、unreal_split_instancesアトリビュートを使うことで、マージされたStaticMeshComponentをインスタンスごとに分けることができます。
unreal split instances
では、今回の本題であるunreal_split_instancesアトリビュートを付与したバージョンを見てみましょう!
Detailビューの表示が変わっています。先程まではすべてが単一のメッシュでしたが、アトリビュート付与した後はバラバラな状態で表示されるようになりました。
さらにこの変更によって、エディタ上でインスタンスを個別に選択し、移動・回転・拡縮や削除することができるようになっています。
これによって大まかな傾向をプロシージャルにデザインした後、空間内で印象に残りやすい部分を手作業で微調整することも可能になります。
また、バラバラになったことで個別の最適化がしやすくなります。影にも変化が出ていますね。
遠く離れた部分を非表示にするDesired Max Draw Distanceが効いてることが確認できます。
unreal_instance_color

Split Instancesが有効な場合に限り、Houdini内でポイントが持っていたCd情報をUnreal Instanceに転送することが可能です。
HDA内でCdアトリビュートをunreal_instance_colorというアトリビュートにリネームすることでCd情報をVertex Colorとしてマテリアルノードで取得し、インスタンス全体に適応することができます。

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

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

使い方は簡単です。attribute createなどでunreal_split_instancesという名前のアトリビュートを付与します。クラスはdetailまたはprim、タイプはintegerで有効化するためにValueを1にします。
unreal_instance_colorの使い方
unreal_instanceにポイントのCd情報を送るには、CdのVector型データをunreal_instance_colorにリネームするだけでOKです!
最近話題になることの増えた点群データを利用した表現にも応用することができそうですね!