Houdini 20.5 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オブジェクトノードを使用して、インスタンサーを作成することもできます。

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出力の一部のプロパティと挙動を制御およびオーバーライドすることができます。 詳細は、アトリビュートとグループを参照してください。

インスタンサー

アトリビュート名

オーナー

説明

unreal_instance

Point, Detail

string

指定したトランスフォームでインスタンス化されるアセットのUnrealパス。バージョン2では、このアトリビュートはクラス名にもなります(PointLightなど)。

unreal_foliage

Detail, Primitive, Point

int, float

インスタンスで使用(および1に設定)されるとき、プラグインは、新しいアクター/コンポーネントを作成する代わりに、現行レベルのFoliageシステムにインスタンスを追加します。

unreal_foliage_attachment_type

Point

int

フォリッジをそのレベルの他のオブジェクトに追加すべきかどうかを決定します。Yesなら1、Noなら0、ランドスケープのみに追加する場合は2です。

unreal_foliage_attachment_distance

Point

float

unreal_foliage_attachment_typeの使用時に、垂直に検索する距離。デフォルトは1000です。

unreal_split_attr

any

string

2つ目のアトリビュート値に基づいてインスタンサーを複数のコンポーネントに分割するために使用される、もう1つのアトリビュートの名前を示します。

unreal_split_instances

Detail, Primitive

any

(廃止) 代わりにunreal_split_attrを使用してください。生成されたインスタンスを1つのInstancedStaticMeshComponentではなく、StaticMeshComponentsに分割すべきかどうかを示します。

unreal_instance_color

Primitive

float(4)

(廃止) unreal_split_instancesと共に使用して、インスタンス毎のカラーを指定し、生成されたStaticMeshComponents頂点カラーを上書きします。

unreal_hierarchical_instancer

any

int

1に設定すると、InstancedStaticMeshComponentsではなくHierarchicalInstancedStaticMeshComponentの作成を強制できます。 またこれは、インスタンス数がわずか1の場合でも、HierarchicalInstancedStaticMeshComponentの作成を強制することができます。

unreal_force_instancer

any

int

1に設定すると、スタティックメッシュにインスタンスが1つしかない場合でも、インスタンサーコンポーネント(InstancedStaticMeshComponentまたはHierarchicalInstancedStaticMeshComponent、後者はLODまたはunreal_hierarichal_instancer == 1に基づいています)の作成を強制することができます。

unreal_num_custom_floats

any

int

インスタンサーのインスタンス毎のカスタムデータに使用される、カスタム浮動小数点の数を示します。

unreal_per_instance_custom_dataX

any

float

インスタンス毎のカスタム浮動小数点データ(Xはカスタムデータのゼロベースのインデックス)

Unreal

はじめよう

基本

Houdini Engineを使用する

スクリプト

リファレンス