Terrain (地形) の表面が、草の塊や他の小さなオブジェクト (岩など) で覆われている場合があります。Unity では、必要なディテールやパフォーマンスのレベルに応じて、テクスチャ化したクアッドや完全なメッシュを使用し、これらのオブジェクトをレンダリングします。
インスタンシングの詳細は、HD レンダーパイプライン (HDRP) を含む、すべてのレンダーパイプラインで使用できます。
Terrain (地形) のディテールにはいくつかのモードがあり、それぞれのモードはゲーム開発中に異なる用途で使用されます。
| Mode | 説明 |
|---|---|
| インスタンスメッシュ | Unity ではこのモードの使用を推奨しています。このモードは、Terrain (地形) 上に任意の数のメッシュを配置する必要があるほとんどのシナリオで最適だからです。 インスタンス化されたメッシュを追加するには、Add Detail Mesh を選択し、Use GPU Instancing オプションを有効にします。 |
| Vertex Lit メッシュ | レンダリングに GPU インスタンシングを使用しません。代わりに、すべてのディテールのインスタンスを 1 つのメッシュに統合します。そのため単純なシェーディングとなり、実現できるインスタンス数に制限が生じます。 Vertex Lit メッシュを追加するには、Add Detail Mesh を選択し、Render Mode を Vertex Lit に設定します。 |
| 草メッシュ | Vertex Lit メッシュと同様に動作しますが、Unity ではこれらのメッシュは草として扱われるので、常に上向きの法線を持ち、風で動きます。 草メッシュを追加するには、Add Detail Mesh を選択し、Render Mode を Grass に設定します。 |
| 草テクスチャ | 風で動く草のクアッドメッシュをテクスチャから直接作成できます。カスタムメッシュを指定する必要はありません。また、ビルボード効果のために、草のクアッドを常にカメラに向けるオプションもあります。 このオプションには Add Grass Texture を選択してください。 |
草とディテールへのペイントを利用するには、Terrain Inspector のツールバーで、Paint Details ボタンを選択します。
オーバーレイから Paint Details にアクセスするには、以下を行います。
を選択します。Foliage Mode ツールは Terrain Tools オーバーレイの最後に表示されます。
を選択します。最初は、Terrain (地形) に草やディテールの描写はありません。Inspector で Edit Details ボタンをクリックすると、Add Detail Mesh および Add Grass Texture オプションを含むメニューが表示されます。いずれかのオプションをクリックすると、ペイントのために Terrain (地形) に追加するアセットを選択できるウィンドウが表示されます。
Detail Prefab フィールドを使用して、プロジェクトからプレハブを選択します。本物らしい外観を作成するために、各メッシュのサイズと色の決定にはランダムな係数が影響します。Unity では、このようなランダムな係数の生成に、パーリンノイズアルゴリズムを使用します。
Min Width、Max Width、Min Height、Max Height の値は、メッシュをランダムに生成する X 軸と Y 軸に沿った上下のスケーリングを指定します。
Align to Ground (%) 値は、詳細軸を地形の法線にどの程度整列させるかを指定します。0 は整列せず、100 は法線に沿って整列します。
Position Jitter (%) は、ディテールの分布のランダム性を、規則的な並びからランダムな並びに制御します。これは、Quality Settings で古い機能での分布がオフになっている場合にのみ使用できます。
Noise Seed 設定は、乱数生成のシードを設定します。一意の値を生成するために、各シード値が必要です。もし、2 つのタイプのディテールに同じシードを設定すると、まったく同じインスタンスが生成されます。Noise Spread 値は、X-Z 平面上のノイズパターンのスケーリングを参照し、値が大きいほど与えられた領域内でより多くのバリエーションがあることを示しています。
Hole Edge Padding (%) 設定は、細かいオブジェクトが穴領域の端からどのくらい離れているかを制御します。詳細は、DetailPrototype.holeEdgePadding を参照してください。
Detail Density 値は、そのサイズに対する細部の密度を制御します。これを有効にするには、Terrain Settings で設定する “Coverage” Detail Scatter モードを使用します。
Healthy Color と Dry Color の設定は、カラーバリエーションを制御します。Unity は健康的な色と乾いた色の間でリニア補間を行い、メッシュのサイズに基づいて色を選択します。例えば、システムは大きなサイズのメッシュをより健康的であると見なします。このようなメッシュのリニア補間の結果は、Healthy Color の色合いにより近くなります。これらのカラー設定はインスタンスメッシュに影響しないため、Use GPU Instancing を選択すると表示されません。
Affected by Density Scale チェックボックスは、Terrain Settings で設定された Detail Density Scale 設定がこの細部に影響するかどうかを決定します。
Render Mode は Vertex Lit または Grass に設定できます。
| Render Mode | 説明 |
|---|---|
| Vertex Lit | シーンで、ディテールメッシュを風に吹かれても動かない固定の、Vertex Lit ゲームオブジェクトとしてレンダリングします。 |
| Grass | シーンで、ディテールメッシュをグラステクスチャに似た簡易化したライティングでレンダリングします。ディテールは、風に吹かれて動きます。 |
ノート: Vertex Lit または Grass の描画モードを使用してディテールにテクスチャを適用するには、テクスチャを MainTex マテリアルプロパティ (ビルトイン/URP の通常色マップでのデフォルトの設定名) に割り当てます。その他のマテリアルプロパティは、インスタンス化されていないディテールに対して考慮されません。
ディテールのメッシュのレンダリングに GPU インスタンシングを使用するかどうかを指定することができます。GPU インスタンシングでは、プレハブで指定されたマテリアルとシェーダーがレンダリングに使用されます。これにより、シェーダーでより多くのカスタマイズを実行でき、Shader Graph も使用できます。
各インスタンスには、Width と Height ノイズはここでも適用されますが、Healthy Color/Dry Color ノイズは無効にされます。シェーダーでは、他のランダム化の技法とともに、独自のカラーバリエーションの方法を使用できます。
Unity の GPU インスタンシングの制限の一部は、レンダリングに影響を及ぼします。 例:
Unity がフレームごとに動的にインスタンス定数バッファを構築する通常のインスタンシングとは異なり、ディテールのインスタンシングは、それがターゲットハードウェアで可能な場合、CPU と GPU のパフォーマンスを向上させる永続的な定数バッファを持っています。ただし、それと引き換えに GPUメモリ使用量が少し増加します。
Use GPU Instancing を選択すると、Render Mode の設定がグレーアウトして利用できなくなります。
Add Grass Texture ウィンドウ
ディテールテクスチャは草を表すテクスチャです。アセットストアからテクスチャをダウンロードするか、独自のテクスチャを作成できます。テクスチャは、何もない領域に対してアルファが 0 に設定された小さな画像です。“Grass” は汎用の用語であり、テクスチャが花や有刺鉄線コイルなどの人工物を表すこともあります。
Min Width、Max Width、Min Height、Max Height、Noise Seed、Noise Spread、Hole Edge Padding (%)、Align to Ground (%)、Position Jitter (%)、Detail Density、Affected by Density Scale、Healthy Color、Dry Color の各設定は、メッシュの場合と同じ働きをします。詳細については、前述の Add Detail Mesh についてのセクションを参照してください。
Billboard オプションを有効にすると、草の画像は常にカメラの方を向くように回転します。これは、草の密集したフィールドを表示する場合に役立ちます。草のかたまりは 2 次元であり、横からは見えないためです。ただし、草がまばらな場合は、個々のかたまりの回転が可視化されてしまい、奇妙な効果が生じる可能性があります。
ディテールを削除するには、削除するディテールを選択し、Edit Details ボタンをクリックして Remove を選択します。ディテールを削除すると、そのディテールを配置した地形の領域を表すデータが消去されます。