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_mode0に設定すると、新しいランドスケープが生成されます。既存のランドスケープで編集レイヤを変更するには、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 MarshallingUse 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_noweightblendunreal_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出力の一部のプロパティや挙動を制御/上書きすることができます。 詳細は、アトリビュートとグループを参照してください。

ランドスケープ

アトリビュート名

オーナー

説明

unreal_material_hole

Primitive, Detail

string

ランドスケープの穴に使用するマテリアルアセットのUnrealパス

unreal_landscape_shared_actor_name

any

string

ランドスケープストリーミングプロキシを使用する際の主要/共有ランドスケープアクターの名前。ランドスケープタイルアクターの名前は、unreal_output_nameから読み込まれます。デフォルト名: {hda_actor_name}_SharedLandscape (String Tokenをサポートしています)。

unreal_landscape_layer_min

any

float

Height Fieldレイヤ/高さの値をランドスケープに変換する際に使用される最小値を指定します。これは、すべてのタイルを確実に同じように変換したい場合に特に便利です。

unreal_landscape_layer_max

any

float

Height Fieldレイヤ/高さの値をランドスケープに変換する際に使用される最大値を指定します。これは、すべてのタイルを確実に同じように変換したい場合に特に便利です。

unreal_landscape_write_locked_layer

any

int

ロックされたLandscape Edit Layerに対してレイヤのデータの書き込みを許可します。

unreal_landscape_lock_layer

any

int

書き込み後にEdit Layerをロックします。

unreal_landscape_section_size

any

int

ランドスケープのセクションのサイズを指定します。unreal_landscape_sections_per_componentも設定する必要があります。

unreal_landscape_sections_per_component

any

int

ランドスケープのコンポーネント毎のセクションを指定します。unreal_landscape_section_sizeも設定する必要があります。

unreal_unit_landscape_layer

Primitive, Detail

int

1に設定すると、ランドスケープレイヤに変換される際、Height Fieldマスクの値は0, 1であるとみなされます。

unreal_landscape_layer_nonweightblended

Primitive, Detail

string

ウェイトがブレンドされていないランドスケープレイヤとして作成される、スペース区切りのHeight Fieldマスクの名前。

unreal_landscape_layer_info

Primitive

string

指定したHeight Fieldマスクをランドスケープレイヤに変換する際に使用される、既存のLandscapeLayerInfoオブジェクトのUnrealパス

unreal_landscape_layer_noweightblend

Primitive, Detail

int

Unreal内の呼応するペイントレイヤのLayerInfoオブジェクトで、NoWeightBlendプロパティを、チェックを外した0またはチェックが有効な1に設定します。このアトリビュートは、unreal_landscape_layer_nonweightblendedよりも優先されます。

unreal_landscape_output_mode

any

int

ランドスケープ出力モードをGenerate Landscapeの0、またはModify Edit Layerの1に設定します。

unreal_landscape_editlayer_name

any

string

ターゲットの編集レイヤの名前

unreal_landscape_editlayer_target

any

string

(廃止) 代わりにunreal_output_nameを使用してください。

unreal_landscape_editlayer_type

any

string

出力されるレイヤのタイプ。0 - ベースレイヤ、1 - 加算レイヤ(デフォルト: 0)。

unreal_landscape_editlayer_clear

any

int

出力Heightfieldを描画する前に編集レイヤ全体をクリアするかどうか(デフォルト: 0)。

unreal_landscape_editlayer_after

any

string

ターゲットランドスケープのレイヤ。そのレイヤの後に、この出力レイヤを配置します。

unreal_landscape_editlayer_subtractive

Primitive, Detail

int

このアトリビュートをHeight Fieldマスクに設定することで、UnrealのペイントレイヤのSubtractive Blendプロパティを、チェックを外した0またはチェックが有効な1に設定できます。

unreal_landscape_partition_grid_size

Primitive

int

このアトリビュートは、ランドスケープの作成時、World Partitionグリッドのサイズを制御します。World Partitionが有効なレベルでのみ適用できます。

unreal_landscape_landscape_size

Primitive

int2

単一のタイルのインポート時、ランドスケープ全体のサイズを示すのに使用されます。

ランドスケープ

はじめよう

ランドスケープスプライン

ワークフロー

ランドスケープを使用すると、プロシージャルなノードベースのワークフローを介して、Houdiniで地形や自然環境を作成したり操作することができます。その後、それをUnreal Engineに取り込んで、さらに編集、レンダリング、ベイクすることができます。Houdiniで生成されたランドスケープは、非常に詳細かつダイナミックで、複雑な地形を作成できます。

特長と機能

  • HoudiniのHeight Fieldツールを使用して、Hydro(水)、Thermal(熱)、Flow(流れ)といった侵食をシミュレートします。

このビデオは、Houdiniを使用して、ファークライ5で活用されているランドスケープ機能をいくつか紹介したものです:

  • Houdini Engine for Unrealは、ランドスケープをHeight Field、ポイント、またはメッシュとして読み込みます。

  • ランドスケープレイヤの作成、テクスチャの作成、マテリアルの生成を行ないます。

  • Unrealからランドスケープを取り込み、Houdini Engineを使用してスタティックメッシュに変換します。

  • Houdiniのばら撒き機能

  • PDGを使用して、大規模なワールドをより小さなサイズに分割し、素早いシミュレーションやチームのコラボレーションに役立てます。

  • ランドスケープで入力と出力をエクスポーズ(アクセス可能に)して、他のHDA間でもシームレスにやり取りできるようにします。

    • 例えば、カーブで制御される川のツールを使用できます。ランドスケープがカーブに作用して、川の流れをガイドし、川のツールによってランドスケープが侵食されます。

関連情報

以下は、ランドスケープを作成する前に理解しておくべきノードおよびコンセプトです: