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 SOP を Pack and Instance オプションをオンにして使用することです。 入力にPack Geometry Before Mergingを使用しても構いません。
インスタンサーまたはパックプリミティブのインスタンス化されたメッシュのいずれかのプロパティを制御する際に重要なのは、アトリビュートの位置を考えることです。 パック前にアトリビュートを適用すると、生成されたメッシュに適用されます。 例えば、PACK SOPを使用する前にアトリビュートを適用する場合です。パック後にアトリビュートを適用すると、インスタンサーのみに適用されます。
オブジェクトインスタンサー ¶
Instanceオブジェクトノードを使用して、インスタンサーを作成することもできます。
Note
オブジェクトインスタンサーの代わりにパックプリミティブまたはアトリビュートインスタンサーを使用することを推奨します。
アトリビュートインスタンサー ¶
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つの異なるインスタンサーコンポーネントに分割されます。
Houdini20.5では、unreal_split_instances
アトリビュートを使用して個別のStaticMeshComponents
を作成する方法が廃止され、今後のバージョンで削除されます。
代わりにunreal_split_attr
アトリビュートを使用することを推奨します。
以下のコードは、unreal_split_instances
アトリビュートと同様の挙動にすることができます:
i@id = @ptnum; s@unreal_split_attr = "id";
上書き - 廃止 ¶
インスタンス化されたジオメトリは、サムネイルピッカーに表示されます。 それを上書きするには、ドロップダウンアセット選択を押してリストからアセットを選択するか、アセットをコンテンツブラウザからサムネールにドラッグアンドドロップします。
インスタンサー出力で使用されるジオメトリがスタティックメッシュ以外のもので上書きされる場合や、その逆の場合は、呼応するコンポーネントが適宜変更されます。
例えば、ParticleSystemアセットを選択すると、結果としてAEmitter
オブジェクトがインスタンスポイントに生成されます。同様に、Blueprintアセットを選択すると、そのBlueprintのアクターインスタンスが生成されます。
Houdini20.5では、インスタンスを上書きするためのUIがデフォルトで無効になっていますが、Unrealプラグイン設定の“Enable Deprecated Instance Variations”でそれを再び有効にすることができます。
バリエーション - 廃止 ¶
Unrealからのインスタンスバリエーションの制御は、Houdini20.5で廃止され、正体のバージョンで削除される予定です。
この機能を使用しているプロジェクトは、hdaバリエーションの処理が削除される次のリリースまでにバリエーションロジックをHoudiniに移行してください。
Houdini20.5では、インスタンスバリエーションを制御するためのUIがデフォルトで無効になっています。 Unrealプラグイン設定の Enable Deprecated Instance Variations でそれを有効にすることができます。
インスタンス毎のカスタムデータ ¶
インスタンス毎のカスタムデータを使用すると、カスタムデータをインスタンスバッファに追加して、その後、インスタンサーのマテリアルの頂点シェーダによって読み込むことができます。
HDAでは、インスタンスにおけるインスタンス毎のカスタムデータを、アトリビュートを通して指定することができます:
インスタンス毎のカスタム浮動小数点の数は、unreal_num_custom_floats
アトリビュートを介して設定できます。
カスタムデータ自体は、unreal_per_instance_custom_dataX
アトリビュートを介してインスタンスで設定できます(X
は、カスタム浮動小数点データのゼロベースのインデックス)。
例として、インスタンスにカスタムRGB float値を指定することができます。
以下を追加する必要があります:
i@unreal_num_custom_floats = 3; (各インスタンスが3つのカスタム浮動小数点を持つことを示すために) f@unreal_per_instance_custom_data0 = XXX; (赤の値) f@unreal_per_instance_custom_data1 = YYY; (緑の値) f@unreal_per_instance_custom_data2 = ZZZ; (青の値)
フォリッジタイプ ¶
HDAを使用してフォリッジインスタンスを出力するには、値を1に設定したunreal_foliage
アトリビュートをインスタンスに追加してください。
UE5ではUnrealレベル内にフォリッジインスタンスを作成するには、コンテンツフォルダに格納されたフォリッジタイプアセットが必要です。
HDAのインスタンスタイプがUnrealスタティックメッシュを参照するように設定されている場合、プラグインはクック時およびベイク時に、必要なフォリッジタイプアセットを自動的に作成します。
インスタンスタイプが既存のUnreal フォリッジ Type に設定されている場合、フォリッジインスタンスはそのフォリッジタイプにベイクできます。 クック中、一時的なフォリッジタイプが作成されます(これは、HDAで指定されたユーザ定義のフォリッジタイプのコピーです)。 これにより、クック後に、フォリッジエディタで既存のフォリッジまたはHDA生成のフォリッジのいずれかを選択することができます。 ベイク時のみ、インスタンスはターゲットのフォリッジタイプを使用してレベルにベイクされます。
Note
一時的なフォリッジタイプを変更すると、HDAをベイクした時に新しいフォリッジタイプが作成されます。 これによって、元のフォリッジタイプが変更されなくなります。
unreal_foliage_attachment_type
アトリビュートは、Unrealレベル内でフォリッジインスタンスを別のオブジェクトにアタッチします。以下の値を使用できます:
-
0 - インスタンスはアタッチされません(デフォルト)。
-
1 - インスタンスはすべてのコリジョンコンポーネントにアタッチすることができます。
-
2 - インスタンスはランドスケープコリジョンコンポーネントにのみアタッチすることができます。
アタッチする正確なコンポーネントは、unreal_foliage_attachment_distance
の距離だけ、インスタンスの位置の上方から上下に垂直にレイトレーシングすることで決定されます。
レベルのインスタンス化 ¶
レベルのインスタンス化はUnreal5.1以降でサポートされており、ソースレベルまたはPacked Levelブループリントを参照するようにunreal_instance
を設定します。
Unrealでは、レベルのインスタンス化はコンポーネントレベルではなく、アクターレベルで実行されます。 そのため、クックおよびベイクの両方で、コンポーネントではなくアクターが生成されます。
Note
Unrealでは、ソースレベルとターゲットレベルの両方で、External Actorsなどの特定の設定が有効になっている必要があります。 HDAやインスタンス化パイプラインを開発する際は、Unrealでマップチェックを実行して、データと最新バージョンのUnrealとの間に互換性があることを確認することをお勧めします。
アトリビュート ¶
Houdini to Unreal ¶
このテーブルには、HDA内で設定する特殊なアトリビュートを載せており、このプラグインは、HoudiniデータをUnreal出力に変換する時にそれらのアトリビュートを認識します。 アセット上にこれらのアトリビュートをセットアップすることで、生成されるUnreal出力の一部のプロパティと挙動を制御およびオーバーライドすることができます。 詳細は、アトリビュートとグループを参照してください。
インスタンサー ¶
アトリビュート名 |
オーナー |
型 |
説明 |
---|---|---|---|
|
Point, Detail |
string |
指定したトランスフォームでインスタンス化されるアセットのUnrealパス。バージョン2では、このアトリビュートはクラス名にもなります( |
|
Detail, Primitive, Point |
int, float |
インスタンスで使用(および1に設定)されるとき、プラグインは、新しいアクター/コンポーネントを作成する代わりに、現行レベルのFoliageシステムにインスタンスを追加します。 |
|
Point |
int |
フォリッジをそのレベルの他のオブジェクトに追加すべきかどうかを決定します。Yesなら1、Noなら0、ランドスケープのみに追加する場合は2です。 |
|
Point |
float |
|
|
any |
string |
2つ目のアトリビュート値に基づいてインスタンサーを複数のコンポーネントに分割するために使用される、もう1つのアトリビュートの名前を示します。 |
|
Detail, Primitive |
any |
(廃止) 代わりにunreal_split_attrを使用してください。生成されたインスタンスを1つの |
|
Primitive |
float(4) |
(廃止) unreal_split_instancesと共に使用して、インスタンス毎のカラーを指定し、生成されたStaticMeshComponents頂点カラーを上書きします。 |
|
any |
int |
1に設定すると、 |
|
any |
int |
1に設定すると、スタティックメッシュにインスタンスが1つしかない場合でも、インスタンサーコンポーネント( |
|
any |
int |
インスタンサーのインスタンス毎のカスタムデータに使用される、カスタム浮動小数点の数を示します。 |
|
any |
float |
インスタンス毎のカスタム浮動小数点データ(Xはカスタムデータのゼロベースのインデックス) |