テレイン設定
ドキュメント:
使い方
参考:
Terrain の基本設定 | Unity でゲームを作ろう!
導入
参考:
設定
Basic Terrain
- Grouping ID: Auto Connect で使用するグループ ID (デフォルト:
0
) - Auto connect: 同じグループ ID を持つ隣接するタイルと自動的に結合する。(デフォルト:
有効
) - Draw: テレインを描画する。(デフォルト:
有効
) - Draw Instanced: インスタンス化して描画する。(デフォルト:
無効
) - Pixel Error: ハイトマップあるいはテクスチャと生成されたテレインのマッピング精度。値を大きくすると、マッピングの精度は悪くなるがレンダリング負荷が小さくなる。(デフォルト:
5
) - Base Map Dist.: テクスチャを最高解像度で表示する距離。この距離を超えると、低解像度の合成画像が使用される。(デフォルト:
1000
) - Cast Shadows: テレインによるシャドウを制御する。
- Off: テレインによるシャドウを投影しない。
- On: テレインによるシャドウを投影する。
- Two Sided: 両方向にシャドウを投影する。グローバルイルミネーションは両面シャドウをサポートしない。(デフォルト)
- Shadows Only: テレインを描画せずにテレインが投影するシャドウのみを描画する。
- Material: テレインで使用するマテリアルを選択する。
- Default-Terrain-Standard (Unity 2019 以降のデフォルト)
- Unity 2018 以前
- Built In Standard: 組み込みのスタンダードシェーダー
- Built In Legacy Diffuse: Unity 4.x 以前に使用されていた組み込みシェーダー (レガシー)
- Built In Legacy Specular: Blinn-Phong モデルを使用した組み込みシェーダー (レガシー)
- Custom: カスタムマテリアル
- Reflection Probes
- Off: リフレクションプローブは無効/スカイボックスが適用される。
- Blend Probes: リフレクションプローブは有効/プローブ間でブレンドを適用する。
- Blend Probes And Skybox: リフレクションプローブは有効/プローブ間及びデフォルトのリフレクションの間でブレンドが適用される。
- Simple: リフレクションプローブは有効/ブレンドは適用されない。
Tree and Detail Objects
- Draw: 樹木及びディテールを描画する。(デフォルト:
有効
) - Bake Light Probes For Trees: 内部に樹木用のライトプローブを生成し、樹木の描画にグローバルイルミネーションを適用する。樹木のプレハブにライトプローブが設置されている場合にこのオプションを使用する。(デフォルト:
有効
) - Remove Light Probe Ringing: ライトプローブによるリンギングを除去する。(デフォルト:
有効
) - Preserve Tree Prototype Layers: 元のプレハブのレイヤーを保持する。(デフォルト:
無効
) - Detail Distance: ディテールを表示する距離。この距離を超えると、ディテールはカリングの対象となり描画されない。(デフォルト:
80
) - Detail Density: 単位面積当たりのディテールオブジェクト数 (デフォルト:
1
) - Tree Distance: 樹木を表示する距離。この距離を超えると、樹木はカリングの対象となり描画されない。(デフォルト:
5000
) - Billboard Start: 樹木をビルボードで表示する距離。この距離を超えると、樹木はビルボードとして表示される。(デフォルト:
50
) - Fade Length: 樹木をビルボードでの表示に徐々に置き換える距離。(デフォルト:
5
) - Max Mesh Trees: 3D オブジェクトとして表示する樹木の最大数。この数量を超えると、樹木ほビルボードとして表示される。(デフォルト:
50
)
Physics
- Thickness: 地形のコライダーの厚みを指定する。コライダーに厚みを持たせることで、高速に移動するゲームオブジェクトが地形を貫通することを防ぐことができる。
Wind Settings for Grass
- Speed: 風の速度 (デフォルト:
0.5
) - Size: 揺らぎの波長 (デフォルト:
0.5
) - Bending: しなりの大きさ/角度 (デフォルト:
0.5
) - Grass Tint: 風が影響する領域の着色 (デフォルト:
B29980
)
Mesh Resolutions
- Terrain Width: X 軸方向の大きさ (デフォルト:
1000
) - Terrain Length: Z 軸方向の大きさ (デフォルト:
1000
) - Terrain Height: Y 軸方向の大きさ (デフォルト:
600
) - Detail Resolution Per Patch: パッチ当たりのディテールを配置するセル数 (デフォルト:
32
) - Detail Resolution: ディテールを配置するセル数。グリッドを構成するために平方数とする。(デフォルト:
1024
)
Holes Settings
- Compress Holes Texture: 穴をマッピングするテクスチャを DXT1 形式に圧縮する。(デフォルト:
有効
)
Texture Resolutions
- Heightmap Resolution: ハイトマップのピクセル解像度。一辺の長さに2の累乗に1を加えた値を用いる。(デフォルト:
513 x 513
) - Control Texture Resolution: スプラットマップの解像度 (デフォルト:
512 x 512
) - Base Texture Resolution: Base Map Dist. を超えた際に使用される合成テクスチャの解像度 (デフォルト:
1024 x 1024
)
Lighting
- Contribute Global Illumination: グローバルイルミネーションの影響を計算する。(デフォルト:
有効
)
Lightmapping
- Scale In Lightmap: ライトマップの相対的なサイズを指定する。0 を指定すると、ライトマップは生成されないが、他のオブジェクトのライティング計算には含まれる。(デフォルト:
0.0256
) - Lightmap Parameters: ライトマップパラメーターを指定する。
- Scene Default Parameters: シーンで指定された既定のライトマップパラメーターを使用する。
- Default-HighResolution
- Default-LowResolution
- Default-Medium
- Default-VeryLowResolution (デフォルト)
- Create New: ライトマップパラメーターを新規に作成する。
- Rendering Layer Mask: レンダリングレイヤーマスクを設定する。SRP で使用する。
Terrain Collider
- Material: 物理特性マテリアルを指定する。(デフォルト:
None
) - Terrain Data: テレインのデータを保持するアセット
- Enable Tree Colliders: 樹木のコライダーを有効にする。(デフォルト:
有効
)
参考:
Terrain Settings | Unity マニュアル [公式]
解像度
- メッシュ解像度 (Mesh Resolutions)
- テクスチャ解像度 (Texture Resolutions)
動画:
Terrain Resolution Overview (Devin Olsen)
Intro to Terrain Size & Resolution (cbcstudio)
How to Set Terrain Resolution (Chidre)
参考:
Terrain の基本設定 | Unity でゲームを作ろう!
ピクセルエラー (Pixel Error)
参考:
Terrain でゲームが重いときの対処法 | Unishar
Understanding implementation of terrain pixel error setting – Unity Forum
Pixel Error doing nothing – Unity Forum
How to Set LOD for Terrain Mesh? – Unity Forum
How do you change Pixel Error in Unity3D terrain during runtime? – Stack Overflow
解像度を変更する (Resolution)
参考:
Change Terrain Heightmap Resolution without Resizing Terrain – Unity Answers
Terrain resolution for a MMO – Unity Answers
Terrain Resolution – Unity Forum
Base Texture and Control Texture resolution limit – Unity Forum
Base Texture Resolution – Unity Answers
Control texture resolution ? – Unity Forum
Change resolution of the terrain splat-texture? – Unity Forum
best tile size for terrain? – Unity Answers
Detail Resolution Per Patch
「Detail Resolution Per Patch」は、1回のドローコールで描画されるパッチの大きさを指定する。出来る限り大きな値を指定する方が描画パフォーマンスが向上する。設定値を変更すると編集データは失われるので、最初に設定する必要がある。
Terrain 設定の Detail Resolution Per Patch の値を小さくすると Patch が細分化されるのでより多くのポリゴン数を置けるようになるが描画負荷に大きくかかわる為 64 より小さくするのは非推奨
—— @tiwa_null
動画:
Grass Gap Problem Resolved (The Amazing Codeverse)
参考:
Terrain 設定の Detail Resolution Per Patch の値を小さくすると Patch が細分化される (@tiwa_null) – Twitter
Detail Resolution per Patch – Unity Answers
What does the “detail resolution per patch” in terrain’s options stand for? – Unity Answers
スクリプトから設定する
ドキュメント:
UnityEngine.Terrain | Unity スクリプトリファレンス [公式]
参考:
How do you change Pixel Error in Unity3D terrain during runtime? – Stack Overflow
パフォーマンスを改善する
テレイン
- 適切な「ハイトマップ解像度」 (Heighmap Resolusion) を使用する
- Pixel Error を適度に大きくする
樹木/ツリー
- マテリアルで GPU インスタンシングを有効にする
- ツリーの Billboard Start を調整する
草花/ディテール
- Detail Density をある程度下げる
- Detail Resolution per Patch の値をある程度大きくしておく (
64
あるいは128
が推奨される) - ディテールをビルボードで描画する
その他
- テレインをメッシュに変換する
- 樹木を Imposter として描画する
- 高効率な専用の草シェーダーを使用する
参考:
Terrain の基本設定 | Unity でゲームを作ろう!
重い Terrain の描画処理を少しでも軽くする方法 | くろくまそふと
Terrain の負荷やら DrawCall やらを下げるポイント | テラシュールブログ
Terrain の負荷軽減 & ライティングのベイク時間短縮方法 | Unity でゲームを作ろう!
ゲームの描画処理を軽くする方法 | Unity でゲームを作ろう!
Terrain のせいでゲームの動作が重い?設定で改善/軽量化する実例 | JoyPlot ドキュメント
Increase Terrain Performance – Unity Forum
コリジョン
メニューから「Edit > Project Settings」を開き、「Physics」タブで「Enable Unified Heightmaps」を有効にすると、テレインのコリジョンをメッシュと同様に扱うようになる。(Unity 2018.3 以降)
Unity 2019.3 で Thickness パラメーターは削除され、代わりに Continuous Collision Detection の使用が推奨される。
ドキュメント:
リンク:
Unity 2019.3 における物理関連の変更事項 | Unity Blog [公式]