On this page |
HDA内でHeightField Scatterノードを使用してインスタンスを散乱させる方法は2通りあります:
Prefabインスタンス ¶
HeightField ScatterノードをHeightFieldネットワークで使用すると、出力はポイントクラウドになります。これらのポイントには、プロジェクトの既存のUnityPrefabへのパスと共にunity_instance
アトリビュートを追加することができます。プラグインは各ポイントにPrefabインスタンスを作成するだけでなく、HeightField Scatterノードで Keep Incoming Terrain が有効な場合は、HeightFieldに関連付けられた地形も作成します。これはポイント数が少ない場合はうまく機能しますが、大規模なセットでは非効率になる可能性があることに注意してください。
木のインスタンス ¶
より効率的な散乱方法は、TreeInstanceとTreePrototypeを介して、生成されたUnity Terrainにポイントクラウドを直接供給することです。TreePrototypeではPrefabのリストを設定でき、TreeInstanceではポイントごとのインスタンスデータでポイントのリストを設定できます。この方法を使用すると、何十万もの木を効率よく散乱させることができます。
TreeProtoypeは、 height レイヤのunity_hf_tree_prototype + インデックス
文字列アトリビュートで定義する必要があります。これらをプリミティブオーナーに設定しなければなりません。値は、 Assets フォルダを基準とした相対パスにします(Assets/Trees/tree1.prefabなど)。インデックス
値は0で始まり、プロトタイプが増える毎に増加します。インデックスは、以下のTreeInstanceの定義で参照されるインデックスに対応しています。例えば、3つのTreePrototypeを定義するためには、以下の3つのアトリビュートを定義します:
-
unity_hf_tree_prototype0
- Assets/Tree/large_tree.prefab -
unity_hf_tree_prototype1
- Assets/Tree/regular_tree.prefab -
unity_hf_tree_prototype2
- Assets/Tree/small_tree.prefab
ディテールレイヤ ¶
草や低木などの小さいサイズの環境ディテールについては、Height Fieldレイヤを指定してUnity Terrainのディテールレイヤに変換すると、効率的に描画することができます。
Unity Terrainのディテールレイヤには、Height Fieldの各値によってカバーされる領域のインスタンス数を指定する、整数値のマップが含まれています。これらの値は 0から16 までの整数でなければならないため、Height Fieldのfloat値はそのまま整数に変換されます。Height Fieldのポイントでは、0の値はインスタンスがないことを表し、1から16の値は、その高さのポイントでカバーされる領域に求められるインスタンスの数を表します。各高さのポイントによってカバーされる領域は、地形サイズを、Height Fieldレイヤのサイズから推測される Detail Resolution で割ることで決定されます。例えば、サイズが1024 x 1024、Detail Resolutionが256の地形では、ディテールレイヤの各高さのポイントは、4 x 4のエリアをカバーすることを意味します。
なお、Detail Resolutionはアトリビュートを介して設定できません。これはディテールレイヤのサイズから推測され、Unityの要求に合わせて、0から4048の間の正方形サイズである必要があります。したがって、指定されたすべてのディテールレイヤは同じサイズでなければなりません。
ディテールレイヤを使用するには、Height Fieldネットワークで、以下に説明するようなディテールプロパティを設定する必要があります。
ディテールレイヤプロパティ:
-
ディテールレイヤに変換されるHeight Fieldレイヤは、ディテールタイプとしてマークする必要があります。これを行なうには、レイヤの
unity_hf_layer_type
というPrimitive文字列アトリビュートに detail 値を設定します。 -
同じHeight Fieldレイヤで、以下のアトリビュートを介してDetailPrototypeも指定する必要があります。
-
Prefabをを使用するには、インスタンス化するPrefabまたはメッシュのレイヤの
unity_hf_detail_prototype_prefab
というPrimitive文字列アトリビュートを設定します。 -
テクスチャを使用するには、レイヤの
unity_hf_detail_prototype_texture
というPrimitive文字列アトリビュートに、テクスチャへのパスを設定します。
-
アトリビュート ¶
Tree Instances ¶
Tree Instancesは、ネットワーク内のHeightField Scatterノードの後に以下のPointアトリビュートを使用して定義します。 Terrain Tree Instancesの自動設定は、Unity 2019.1以降でのみ利用可能です。
アトリビュート名 |
説明 |
---|---|
|
使用するTreePrototypeのインデックス(0から始まる整数)を設定します。 このインデックスは、上記で説明しているTreePrototype定義を指します。 |
|
TreePrototypeの高さスケール(浮動小数点)を設定します。 |
|
TreePrototypeの幅スケール(浮動小数点)を設定します。 |
|
TreePrototypeのライトマップカラー(float4)を設定します。 |
|
TreePrototypeのカラー(float4)を設定します。 |
|
TreePrototypeの回転を設定します。 |
Terrain Detail Layers ¶
アトリビュート名 |
説明 |
---|---|
|
Height FieldレイヤをDetailレイヤに変換します。 Height Fieldレイヤ上にDetail値を含んだ文字列型Primitiveアトリビュートを設定します。 |
|
DetailPrototypeレイヤ上でprefabを使用するには、インスタンス化するprefabまたはメッシュのレイヤ上に文字列型rimitiveアトリビュートを設定します。 |
|
DetailPrototypeレイヤ上でテクスチャを使用するには、そのレイヤ上にテクスチャパスを含んだ文字列型Primitiveアトリビュートを設定します。 |
|
ベンド係数値を含んだ浮動小数点型Primitiveアトリビュートを設定します。 |
|
Dry Color値を含んだカラー(float4)型Primitiveアトリビュートを設定します。 |
|
Healthy Color値を含んだカラー(float4)型Primitiveアトリビュートを設定します。 |
|
Max Height値を含んだ浮動小数点型Primitiveアトリビュートを設定します。 |
|
Max Width値を含んだ浮動小数点型Primitiveアトリビュートを設定します。 |
|
Min Height値を含んだ浮動小数点型Primitiveアトリビュートを設定します。 |
|
Min Width値を含んだ浮動小数点型Primitiveアトリビュートを設定します。 |
|
Noise Spread値を含んだ浮動小数点型Primitiveアトリビュートを設定します。 |
|
DetailRenderMode値を含んだ整数型Primitiveアトリビュートを設定します(GrassBillboardが0、VertexLitが1、Grassが2(Default))。 |
Detail Layers - Global Detail Properties ¶
-
Height レイヤ上には、以下のアトリビュートを指定することで、生成されるTerrainDataのDetail値を設定することができます:
アトリビュート名 |
説明 |
---|---|
|
Detail Distance値(0から250)を含んだ整数型Detailアトリビュートを設定します。 |
|
Detail Density値(0から1)を含んだ浮動小数点型Detailアトリビュートを設定します。 |
|
Density Resolution Per Patch値(8から128)を含んだ整数型Detailアトリビュートを設定します。 |