On this page |
Houdini Engine for Unrealは、ランドスケープの入力および出力の両方をサポートしています。 また、ランドスケープをWorld Compositionシステムに出力することもできます。
Note
現在のところ、Houdini Engineプラグインはマテリアル/ペイントランドスケープレイヤーに加え、 ランドスケープ編集レイヤー をサポートするようになりました。
入力 ¶
ランドスケープは、“World Input”を使用してHoudiniにインポートでき、ランドスケープをレベルから選択することができます。
ランドスケープの高さおよびレイヤーデータは、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)レイヤーです。
-
編集レイヤーは、様々なランドスケープレイヤーを、ユーザが構築可能なユーザ制御レイヤーに分割します。
Note
編集レイヤーは、スカルプトモードでのみ機能します。現在のところ、ペイント可能編集レイヤーはサポートされていません。
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
Heightfield 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で_heightfield_
プリミティブ上にある必要があります。heightfieldでないプリミティブでのUPropertyアトリビュートは無視されます。
一般的なワークフロー ¶
ランドスケープをトランスフォームする ¶
ランドスケープは、HoudiniおよびUnreal Editorでトランスフォームすることができます。ランドスケープアクターは、親アクターに対して相対的にトランスフォームされます。
Note
HoudiniからのHeight Fieldの_translation_
はサポートされていますが、Houdiniからのheightfield _rotation_
はサポートされていません。
タイル化されたランドスケープ ¶
Height Field Tile Split SOP ノードを使用して、Height FieldをHoudiniでタイルに分割できますデフォルトでは、各ランドスケープのタイルは単独のランドスケープとしてUEにインポートされます。旧バージョンのプラグインとは異なり、タイルのターゲットはランドスケープストリーミングプロキシではなく、ランドスケープアクターである必要があります
詳細は、出力アトリビュートを参照してください。