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オブジェクトノードを使用して、インスタンサーを作成することもできます。
アトリビュートインスタンサー ¶
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との間に互換性があることを確認することをお勧めします。