Houdini 20.0 Unreal

インスタンサー

On this page

入力

インスタンス化されたStatic Meshコンポーネントを含むアクターを選択すると、Houdiniにインスタンサーをインポートすることができます。 インスタンス化されたメッシュは、パックプリミティブとしてインポートされ、インスタンス化されたポイントにそれぞれコピーされます。

インスタンスに使用される各マテリアルには、それに呼応したunreal_materialINDEXというアトリビュートがあります。 INDEXはそれ呼応するマテリアルのスロットのインデックスです。値は、そのマテリアルへのUnrealパスになります。

フォリッジインスタンスも同じようにインポートすることができ、unreal_foliage attributeセットが含まれます。

または、 Import as reference チェックボックスをオンにすると、スタティックメッシュを単一のアトリビュートインスタンスとしてインポートすることもできます。

出力

プラグインは、パックプリミティブ、オブジェクトインスタンサー、アトリビュートインスタンサーを使用して、アセットからインスタンスを出力することをサポートしています。

Unrealのインスタンス化されたジオメトリは、デフォルトではInstancedStaticMeshComponents(デフォルト)、インスタンス化されたジオメトリに複数のLODがある場合はHierarchicalInstancedStaticMeshComponentsです。LODがない場合であっても強制的にHierarchicalInstancedStaticMeshComponentsを作成したい場合は、unreal_hierarchical_instancerを追加して、値を1に設定します。

インスタンス化されたジオメトリまたはuassetsは、Detailsパネルの Houdini Outputs セクションに、以下のようにインスタンサーとして表示されます。

Pointアトリビュートを追加して、インスタンス化されたメッシュにマテリアルオーバーライドを指定することができます。 unreal_materialINDEXという名前のアトリビュートを作成します。 INDEXは、上書きするマテリアルスロットインデックスを表します。値は、使用されるマテリアルへのUnrealパスにする必要があります。

インスタンス化した各出力のジオメトリは、Unrealで置き換えたり、Detailsパネルのそれに呼応するコントロールを使用して位置、回転、スケールオフセットを適用したりできます。

パックプリミティブ

推奨されるインスタンスの作成方法は、パックプリミティブを使用することです。 パックジオメトリがインスタンス化されたジオメトリとして使用され、このパックプリミティブのすべてのコピーがUnrealでインスタンスに変換されます。

Note

パックプリミティブにインスタンサーが作成されるのは、パックプリミティブが複数回コピーされる場合のみです。 単一インスタンスのインスタンサーでは、通常のStatic Meshコンポーネントのみ作成されます。

簡単なのは、 Copy To Points SOPPack and Instance オプションをオンにして使用することです。 入力にPack Geometry Before Mergingを使用しても構いません。

インスタンサーまたはパックプリミティブのインスタンス化されたメッシュのいずれかのプロパティを制御する際に重要なのは、アトリビュートの位置を考えることです。 パック前にアトリビュートを適用すると、生成されたメッシュに適用されます。 例えば、PACK SOPを使用する前にアトリビュートを適用する場合です。パック後にアトリビュートを適用すると、インスタンサーのみに適用されます。

オブジェクトインスタンサー

Instanceオブジェクトノードを使用して、インスタンサーを作成することもできます。

アトリビュートインスタンサー

HDAで生成されたジオメトリのインスタンス化に加えて、インスタンスは既存のUnrealアセットから作成することもできます。

これ実行するには、unreal_instanceアトリビュートを使用し、そのアトリビュート値をアセットの参照に設定します。

スタティックメッシュに限らず、インスタンス化されるアセットはネイティブのアクターのタイプに変換可能でなければなりません。 その場合、そのアクターのタイプの複数のインスタンスが作成され、生成されたインスタンサーコンポーネントはHoudiniInstancedActorComponentになります。 これは、生成されたインスタンサーのポイントクラウドを使用して、そのレベルの既存のアセットを生成するのに使用することができます。

また、アトリビュートインスタンサーを使用して、クラスを直接インスタンス化することもできます。 これは、コンテンツブラウザにuassetとして保存することはできないが、アクター(例えばLight、Volumeなど)としてインスタンス化できるクラスのインスタンスを作成するのに便利です。

そのためには、unreal_instanceボリュームを、アクターとしてインスタンス化したいクラスの名前に設定します(unreal_instance = PointLight)。

Note

正しく検出するためには、アトリビュートインスタンサーがジオメトリの別の部分にある必要があります。 アトリビュートインスタンサーが割り当てられているポイントがメインジオメトリの一部である場合、アトリビュートインスタンサーは検出されません。

アトリビュートインスタンサーが参照するアセットが見つからないときには、プラグインはインスタンサーを無視するのではなく、デフォルトの“asset not found”ボックスメッシュ(デフォルトでゲーム内で非表示)を作成します。 これを有効または無効にするには、プラグイン設定の Show default Mesh チェックボックスを使用します。

Houdini rot/orientおよびscaleアトリビュートを適用して、インスタンスのトランスフォームを指定することができます。

インスタンサーを分割する

インスタンサーの出力を複数のコンポーネントに分割したい場合もあるでしょう。 例えば、インスタンサー毎に異なるマテリアルを割り当て、ベイク時に生成されるアクターをより細かく制御したいような場合です。

これを行なうには、unreal_split_attr文字列アトリビュートを使用します。 このアトリビュートの値は、別のアトリビュートの名前に設定する必要があり、その値を使用して分割を制御します (そのアトリビュートの値ごとに、個別のインスタンサーコンポーネントが作成されます)。

例えば、unreal_split_attrアトリビュートにunreal_materialアトリビュートを使用すると(unreal_split_attr = unreal_material)、2つ目のアトリビュートの各マテリアルについて、インスタンサーコンポーネントが作成されます。 3つの異なるマテリアルが使用されていれば、インスタンサーは3つの異なるインスタンサーコンポーネントに分割されます。

または、unreal_split_instancesアトリビュートを使用して、インスタンス化されたコンポーネントの代わりに個別のStaticMeshComponentsを作成することもできます。 その後、unreal_instance_color Primitiveアトリビュートを使用して、上書きする頂点カラーを指定し、この方法で作成された各コンポーネントに適用します。 このようにして、マテリアルを介してインスタンスにバリエーションを追加することができます。

上書きする

インスタンス化されたジオメトリは、サムネイルピッカーに表示されます。 それを上書きするには、ドロップダウンアセット選択を押してリストからアセットを選択するか、アセットをコンテンツブラウザからサムネールにドラッグアンドドロップします。

インスタンサー出力で使用されるジオメトリがスタティックメッシュ以外のもので上書きされる場合や、その逆の場合は、呼応するコンポーネントが適宜変更されます。例えば、ParticleSystemアセットを選択すると、結果としてAEmitterオブジェクトがインスタンスポイントに生成されます。同様に、Blueprintアセットを選択すると、そのBlueprintのアクターインスタンスが生成されます。

バリエーション

インスタンス化したエレメントのランダムなバリエーションが必要な場合があります。例えば、シーンのあちこちに岩をばら撒いたときは、視覚的な面白みが増すようにいくつかバリエーションが欲しいでしょう。バリエーションを追加するには、インスタンスサムネイルの横の+アイコンを押します。これにより、インスタンス化された2つの入力の間で均一な確率分布が得られます。

複数のインスタンスバリエーションは、インスタンサー出力行として、角括弧の接尾辞付きで表示されます。

インスタンス毎のカスタムデータ

インスタンス毎のカスタムデータを使用すると、カスタムデータをインスタンスバッファに追加して、その後、インスタンサーのマテリアルの頂点シェーダによって読み込むことができます。

HDAでは、インスタンスにおけるインスタンス毎のカスタムデータを、アトリビュートを通して指定することができます:

インスタンス毎のカスタム浮動小数点の数は、unreal_num_custom_floatsアトリビュートを介して設定できます。 カスタムデータ自体は、unreal_per_instance_custom_dataXアトリビュートを介してインスタンスで設定できます(Xは、カスタム浮動小数点データのゼロベースのインデックス)。

例として、インスタンスにカスタムRGB float値を指定することができます。

以下を追加する必要があります:

i@unreal_num_custom_floats = 3;   (to indicate that each instance will have 3 custom floats)
f@unreal_per_instance_custom_data0 = XXX; (red value)
f@unreal_per_instance_custom_data1 = YYY; (green value)
f@unreal_per_instance_custom_data2 = ZZZ; (blue value)  

Foliageタイプ

HDAを使用してフォリッジインスタンスを出力するには、値を1に設定したunreal_foliageアトリビュートをインスタンスに追加する必要があります。UE4とは違い、UE5ではUnrealレベル内にフォリッジインスタンスを作成するには、コンテンツフォルダに格納されたFoliage Typeアセットが必要です。

HDAのインスタンスタイプがUnrealスタティックメッシュを参照するように設定されている場合、プラグインはクック時およびベイク時に、必要なFoliage Typeアセットを自動的に作成します。

インスタンスタイプが既存のUnreal Foliage Type に設定されている場合、フォリッジインスタンスはそのフォリッジタイプにベイクできます。 クック中、一時的なFoliage Typeが作成されます(これは、HDAで指定されたユーザ定義のFoliage Typeのコピーです)。 これにより、ユーザはクック後に、Foliageエディタで既存のフォリッジまたはHDA生成のフォリッジのいずれかを選択することができます。 ベイク時のみ、インスタンスはターゲットのFoliage Typeを使用してレベルにベイクされます。

Note

ユーザ定義のFoliage Typeのコピーとして作成された一時的なFoliage Typeが変更された場合(汎用 UProperty アトリビュートやマテリアルオーバーライドを使用するなど)、 そのHDAをベイクすると、ターゲットのFoliage Typeを変更することなくこれらの変更を保持するため、ターゲットのFoliage Typeにベイクするのではなく、新しいFoliage Typeが作成されます。

unreal_foliage_attachment_typeアトリビュートを使用して、Unrealレベルの別のオブジェクトにフォリッジインスタンスをアタッチすることができます。以下の値を使用できます:

  • 0 - インスタンスはアタッチされません(デフォルト)。

  • 1 - インスタンスはすべてのコリジョンコンポーネントにアタッチすることができます。

  • 2 - インスタンスはランドスケープコリジョンコンポーネントにのみアタッチすることができます。

アタッチする正確なコンポーネントは、unreal_foliage_attachment_distanceの距離だけ、インスタンスの位置の上方から上下に垂直にレイトレーシングすることで決定されます。

レベルのインスタンス化

レベルのインスタンス化はUnreal 5.1以降でサポートされており、ソースレベルまたはPacked Levelブループリントを参照するようにunreal_instanceを設定します。

Unrealでは、レベルのインスタンス化はコンポーネントレベルではなく、アクターレベルで実行されます。 そのため、クックおよびベイクの両方で、コンポーネントではなくアクターが生成されます。

Note

Unrealでは、ソースレベルとターゲットレベルの両方で、External Actorsなどの特定の設定が有効になっている必要があります。 したがって、HDAの作成やパイプラインのインスタンス化の際は、Unrealでマップチェックを実行して、データと最新バージョンのUnrealとの間に互換性があることを確認することをお勧めします。

Unreal

はじめよう

基本

Houdini Engineを使用する

リファレンス

Houdini Engine for Unreal Engineは、HoudiniのテクノロジーをUnrealに統合できるプラグインです。 Session SyncとNode Syncは、Houdiniのライブセッションと相互作用するためのHoudini Engineプラグインの2つの機能です。

このプラグインを使用すると、Houdiniの強力かつ柔軟なプロシージャルワークフローを、Houdiniデジタルアセットを通してUnreal Engineで実現できます。 アーティストはエディタ内でアセットパラメータをインタラクティブに調整して、Unrealアセットを入力として使用することができます。 その後、Houdiniのプロシージャルエンジンがアセットを“クック”し、その結果をエディタで使用できるようになります。ベイクする必要はありません。

一般情報:

互換性:

現在のところ、プラグインにはUE5.3、5.2、5.1、5.0、UE4.27、UE4.26向けにビルドされたバイナリがあり、Houdiniの最新のプロダクションビルドにリンクされています。

プラグインのソースコードは、UE5.3、5.2、5.1、5.0、UE4.27、UE4.26のこのリポジトリで利用可能です。

Note

UE5.1およびUE5.0は、同じソースファイル/ブランチを使用し、5.0ソースは5.1でも使用できるようになっています。

サポートおよびバグのレポート:

便利なリンク:

SessionSync

Houdini Engine SessionSync機能を使用すると、GUIを使ってHoudini内で実行されているHoudini Engineのセッションに接続することができます。 通常のHoudini Engineワークフローのすべての機能と、Session Sync固有の追加機能をサポートしています。

Houdini Engineは非UIバージョンのHoudiniを使用しますが、Session SyncではHoudiniのユーザインターフェースを通してHoudiniセッションを確認したり、操作することができます。 また、UnrealやHoudiniで加えた変更は同期されるため、どちらのプログラムでも変更を加えても、同じ結果が得られます。

NodeSync

NodeSyncは、UnrealとHoudini Session Sync間のアセット共有を可能にする、Houdini Engine for Unrealプラグインの機能です。スケルタルメッシュとスタティックメッシュで機能します。

専用のHDAを使用することなく、Unrealにデータを送信したり、Unrealからデータを受信することができます。アクターに加えて、スタティックメッシュやスケルタルメッシュでも機能します。

Houdini Niagara

Houdini-Niagaraプラグインを使用すると、HoudiniNiagara Data Interfaceを使用して、HoudiniとUnrealのNiagaraシステム間でポイントクラウドデータを交換することができます。 Houdiniのアトリビュートデータを、HoudiniPointCacheアセットとしてエクスポートできます。 これらをUnrealにインポートし、Niagaraシステムとエミッターを使用して、複雑なエフェクトやパーティクルシステムを作成できます。