On this page |
Houdini Engine Plugin for Unrealは、ランドスケープの入力および出力の両方をサポートしています。 他にも、Edit Layers、Paint Layers、World Partitionをサポートしています。
Unrealからの入力 ¶
ランドスケープは、Unreal Houdini Asset Compononent上の World Input としてHoudiniにインポートすることができます。
ランドスケープのHeightデータおよびレイヤデータは、HoudiniではHeight Fieldとしてインポートされます。 ワールド入力でオプションを選択した場合は、その選択に応じてポイントクラウドまたはメッシュとしてインポートすることもできます。
ランドスケープをHeight Fieldとしてエクスポートすると、すべてのランドスケープレイヤはHeightfieldノードでマスクになります。入力のランドスケープのタグはPrimitiveアトリビュートとしてインポートされ、接頭辞はunreal_uproperty_tag_
、その後にタグの名前が続きます。これらのアトリビュートは、Height FieldをUnrealに再度出力する際、インポートされたタブを再作成します。
詳細は、ランドスケープ入力を参照してください。
出力 ¶
ランドスケープは、出力ノードにHeight Fieldプリミティブが含まれている場合、HDAによって生成することができます。
出力内の各Height Fieldプリミティブは、プラグインによってランドスケープに変換されます。そのheightプリミティブは、ランドスケープジオメトリと、その他すべてのHeight Fieldプリミティブ(mask、mesa、cliffs)を ターゲットレイヤ として制御します。
詳細は、ランドスケープ出力を参照してください。
Unrealランドスケープレイヤ ¶
Unrealは、Landscapeシステムで2種類のレイヤを使用します:
-
ターゲットレイヤは、ランドスケープの様々なプロパティを制御します。これらは、Paintレイヤ、Visibilityレイヤ、Sculpt(またはheight)レイヤです。
-
編集レイヤは、様々なランドスケープレイヤを、ユーザが構築可能なユーザ制御レイヤに分割します。
Houdini Engineプラグインは、クック時に編集レイヤをフル活用して、Unreal Editorで表示可能な一時ランドスケープデータを構築します。旧バージョンのHoudini Engineプラグインでは、クック時に一時的なランドスケープアクターを使用しましたが、World Partitionを使用できないため、現在はサポートされていません。
クック後、プラグインはクック時に見つかったデータ向けに 編集レイヤ を生成します。
ベイク中、これらの一時的なレイヤが削除され、最終レイヤが生成されます。
ベイクされた編集レイヤ名は、unreal_landscape_editlayer_name
を使用して指定することができます。
各ターゲットレイヤの名前は、Houdiniの各プリミティブの名前から直接取得されます。height
はheightレイヤを指定するために使用され、visibility
はvisibilityレイヤを制御し、他のレイヤはpaintレイヤとして見なされます。
Note
エディタで穴を表示するには、Opacityマスクとして Landscape Visibility Mask ノードを使用するランドスケープマテリアルを使用する必要があります。
Unrealは、すべてのランドスケープのLayer Info Objectをファイルに保存する必要があります。デフォルトでは、生成されたランドスケープのレイヤは、コンテンツブラウザの HoudiniEngine/Temp フォルダに保存されます。レベルを保存する際、必ずこれらのランドスケープレイヤアセットも保存するようにしてください。
既存のランドスケープのLayer Info Objectを指定/割り当てるには、unreal_landscape_layer_info
文字列アトリビュートの値を、既存のレイヤ情報アセットの参照に設定します。
編集レイヤをロックおよびロック解除する ¶
デフォルトで、プラグインはロックされた編集レイヤには書き込まず、クックおよびベイク後に変更された編集レイヤをロック解除のままにします。
アトリビュートunreal_landscape_write_locked_layer
が存在する場合、1
に設定すると、プラグインはロックされたレイヤに書き込みを行ないます。
アトリビュートunreal_landscape_lock_layer
が存在する場合、1
に設定すると、プラグインは編集されたレイヤを処理後にロックします。
単一のレイヤに対して、両方のアトリビュートを指定することができます。
ランドスケープを作成または変更する ¶
デフォルトでは、Houdini Engineプラグインは、HDA内の各出力を、作成される独自のランドスケープとして処理します。プラグインは、既存のランドスケープを変更することもできます。これは、HDA出力の各プリミティブのアトリビュートによって制御されます:
unreal_landscape_output_mode
を0
に設定すると、新しいランドスケープが生成されます。既存のランドスケープで編集レイヤを変更するには、1
に設定します。
両モードともにターゲットランドスケープアクターの名前は、unreal_output_name
を使用して指定できます。既存のランドスケープを変更する際、特別な名前Input<N>
を使用して、出力が、HDAに<N>
番目の入力として送信されるように指定できます。これが特に便利なのは、Houdiniを使用して既存のランドスケープを変更する場合です。デフォルトの名前は、Landscapeです。
Heightデータの変換 ¶
Unrealはランドスケープに16ビットint型を使用し、Houdiniは32ビットfloat型を使用して高さの値を表現しているため、データを変換する必要があります。このため、Height Fieldからランドスケープを作成するとき、精度が少し下がります。
デフォルトでは、Houdini Engineによって作成されたランドスケープは、使用可能な16ビット範囲の3/4を変換に使用します。これにより、Unrealで、最小/最大値を超えてランドスケープをスカルプトできるようになります。
データ変換に最大精度を使用したい場合は、 Geometry Marshalling セクションの Marshalling Landscapes Use Full Resolution 設定をオンにします。例えば、4 kmの高さのランドスケープの精度は、デフォルトで8.13 cm(Z軸で)になり、そのオプションがオンの場合は6.10 cmの精度になります。
Geometry Marshalling で Use default Unreal Scaling オプションをオンにすると、プラグイン設定でデフォルトのUnreal変換値を使用することもできます。 この場合、変換中に精度が落ちる可能性があり、Height Fieldの値が高すぎるとクリッピングされることもあります。この結果、Z軸に“標準の”スケール係数を持つランドスケープが作成されます。
Height Fieldデータをランドスケープに変換する際、unreal_landscape_layer_min
およびunreal_landscape_layer_max
Floatアトリビュートを追加することで、変換に使用する最小値および最大値を指定できます。これは、高さデータに加え、ランドスケープレイヤに変換されるあらゆるマスクで機能します。これが便利なのは、タイル化されたランドスケープの出力時、すべてのタイルが同じように変換されるようにしたい場合です。
ターゲットレイヤは、Houdiniの32ビットfloat型からUnrealの8ビット符号なしint型に変換されます。値は、Houdiniの(最小, 最大)からUEの(0, 255)に変換されます。
デフォルトでは、Height Fieldマスクはウェイトがブレンドされたランドスケープレイヤに変換されます。Height Fieldマスクの一部をウェイトがブレンドされていないレイヤとしてUnrealにエクスポートしたい場合、Primitive Stringアトリビュートをunreal_landscape_layer_nonweightblended
という名前でHeight Fieldに追加する必要があります。このアトリビュート値を、スペース区切りのマスクの名前に設定します(例: mask water debris)。
または、それぞれのHeight Fieldマスクはunreal_landscape_layer_noweightblend
という名前のPrimitive Intアトリビュートを持てるため、それを使用してNo Weight Blendプロパティをオフ(0)またはオン(1)に明示的に設定することもできます。
Note
unreal_landscape_layer_noweightblend
はunreal_landscape_layer_nonweightblended
よりも優先されます。
ターゲットレイヤのデータ変換 ¶
Unrealは、ターゲット(ペイントと可視性)レイヤを8ビット符号なしの値として格納します。 Houdini Volumeレイヤ(マスク)は、自動的にUnrealで必要な範囲に変換され、0から1の範囲に収まるはずです。
デフォルトでは、0から1の範囲外の値はクランプされます。
しかし、Houdini内でレイヤ上のunreal_landscape_layer_normalize
アトリビュートを1に設定すると、このプラグインは必要な範囲に収まるようにレイヤの値を正規化します。
マイナスの値は0に設定されます。
ランドスケープのサイズ ¶
Unreal Engineでは、ランドスケープが特定のサイズである必要があります。ランドスケープはLOD/最適化のために、セクションとコンポーネントに分割されるためです。推奨されるサイズは以下の通りです:
-
8129 x 8129
-
4033 x 4033
-
2017 x 2017
-
1009 x 1009
-
505 x 505
-
253 x 253
-
127 x 127
Height Fieldデータがこれらの推奨サイズのいずれとも一致しない場合、Houdini Engineはデータを自動的に再サンプルし、生成されたランドスケープがサイズ要件に合うようにします。
この場合、Height Fieldをタイルに分割する際、不要な変換が行なわれるため、問題が生じる可能性があります。また、標準以外のサイズを使用すると、必要以上のコンポーネントが使用されることになり、パフォーマンスの大幅な低下を招きます。生成されるタイルのボリュームサイズが、Epic社がランドスケープテクニカルガイドで推奨しているサイズと一致するよう、確認することをお勧めします。
クック時、生成されたランドスケープのトランスフォームは自動的にセットアップされるため、Unrealでの寸法、緯度、スケール、位置はHoudiniと同じになります。

ランドスケープをUnrealにインポートする際、プラグインが自動的にSection SizeおよびSetions Per Componentの値を選択します。しかし、これらは、unreal_landscape_section_size
およびunreal_landscape_sections_per_component
アトリビュートを使用して設定することもできます。両方のアトリビュートを設定する必要があり、片方しか設定されていない場合は無視されます。両方が設定されている場合、プラグインはランドスケープのサイズ変更を試みないため、ランドスケープのサイズがそのまま使用されます。
パラメータとタグ ¶
Height Fieldにunreal_uproperty_tag_X
Primitiveアトリビュートがある場合、これらのアトリビュートの値は結果のランドスケープアクターのタグに使用されます。
Note
Height Field Erode といった時間依存のノードを使用している場合、時間を適切に設定するために、その後に必ずTimeShiftノードを使用します。プラグインでは、HDAが使用するフレームを設定することができません。TimeShiftノードのフレームパラメータはデフォルト値が$F
に設定されているため、そのキーフレームを削除してください。Houdini Engineはフレーム値を1に設定しているため、CTRL)を使用するか、 Channels and Keyframes コンテキストメニューで Remove Keyframe を選択します。
Height Fieldにunreal_uproperty_X
Detailアトリビュートがある場合、タイルアクターおよび共有ランドスケープアクターに適用されます。Height Fieldにunreal_uproperty_X
PointまたはPrimitiveアトリビュートがある場合、それぞれのランドスケープタイルアクターのみに適用されます。Point/Primitiveアトリビュートは、Houdiniでは_Height Field_
プリミティブ上にある必要があります。Height Fieldでないプリミティブ上のUPropertyアトリビュートは無視されます。
一般的なワークフロー ¶
ランドスケープをトランスフォームする ¶
ランドスケープは、HoudiniおよびUnreal Editorでトランスフォームすることができます。ランドスケープアクターは、親アクターに対して相対的にトランスフォームされます。
Note
HoudiniからのHeight Fieldの_translation_
はサポートされていますが、HoudiniからのHeight Field _rotation_
はサポートされていません。
タイル化されたランドスケープ ¶
Height Field Tile Split SOP ノードを使用して、Height FieldをHoudiniでタイルに分割できますデフォルトでは、各ランドスケープのタイルは単独のランドスケープとしてUEにインポートされます。旧バージョンのプラグインとは異なり、タイルのターゲットはランドスケープストリーミングプロキシではなく、ランドスケープアクターである必要があります
詳細は、出力アトリビュートを参照してください。
アトリビュート ¶
Houdini to Unreal ¶
このテーブルには、HDA内で設定する特別なアトリビュートを載せており、 HoudiniデータをUnreal出力に変換する際にプラグインがそれらのアトリビュートを認識します。 また、アセット上にこれらのアトリビュートをセットアップすることで、生成されるUnreal出力の一部のプロパティや挙動を制御/上書きすることができます。 詳細は、アトリビュートとグループを参照してください。
ランドスケープ ¶
アトリビュート名 |
オーナー |
型 |
説明 |
---|---|---|---|
|
Primitive, Detail |
string |
ランドスケープの穴に使用するマテリアルアセットのUnrealパス |
|
any |
string |
ランドスケープストリーミングプロキシを使用する際の主要/共有ランドスケープアクターの名前。ランドスケープタイルアクターの名前は、 |
|
any |
float |
Height Fieldレイヤ/高さの値をランドスケープに変換する際に使用される最小値を指定します。これは、すべてのタイルを確実に同じように変換したい場合に特に便利です。 |
|
any |
float |
Height Fieldレイヤ/高さの値をランドスケープに変換する際に使用される最大値を指定します。これは、すべてのタイルを確実に同じように変換したい場合に特に便利です。 |
|
any |
int |
ロックされたLandscape Edit Layerに対してレイヤのデータの書き込みを許可します。 |
|
any |
int |
書き込み後にEdit Layerをロックします。 |
|
any |
int |
ランドスケープのセクションのサイズを指定します。unreal_landscape_sections_per_componentも設定する必要があります。 |
|
any |
int |
ランドスケープのコンポーネント毎のセクションを指定します。unreal_landscape_section_sizeも設定する必要があります。 |
|
Primitive, Detail |
int |
1に設定すると、ランドスケープレイヤに変換される際、Height Fieldマスクの値は |
|
Primitive, Detail |
string |
ウェイトがブレンドされていないランドスケープレイヤとして作成される、スペース区切りのHeight Fieldマスクの名前。 |
|
Primitive |
string |
指定したHeight Fieldマスクをランドスケープレイヤに変換する際に使用される、既存のLandscapeLayerInfoオブジェクトのUnrealパス |
|
Primitive, Detail |
int |
Unreal内の呼応するペイントレイヤのLayerInfoオブジェクトで、 |
|
any |
int |
ランドスケープ出力モードをGenerate Landscapeの |
|
any |
string |
ターゲットの編集レイヤの名前 |
|
any |
string |
(廃止) 代わりに |
|
any |
string |
出力されるレイヤのタイプ。 |
|
any |
int |
出力Heightfieldを描画する前に編集レイヤ全体をクリアするかどうか(デフォルト: |
|
any |
string |
ターゲットランドスケープのレイヤ。そのレイヤの後に、この出力レイヤを配置します。 |
|
Primitive, Detail |
int |
このアトリビュートをHeight Fieldマスクに設定することで、UnrealのペイントレイヤのSubtractive Blendプロパティを、チェックを外した |
|
Primitive |
int |
このアトリビュートは、ランドスケープの作成時、World Partitionグリッドのサイズを制御します。World Partitionが有効なレベルでのみ適用できます。 |
|
Primitive |
int2 |
単一のタイルのインポート時、ランドスケープ全体のサイズを示すのに使用されます。 |