タイトル: 地形の作成
SEOタイトル: Unity Terrain 作成完全ガイド(Heightmap・草・木・Paint Texture・Unity 6 改善)
| この記事の要点 |
|
Terrain とは
Unity の Terrain は大規模な屋外地形を効率的に作成・描画するためのコンポーネントです。Heightmap(高さマップ)と Splatmap(テクスチャの混ぜ方)を内部で持ち、専用シェーダーで GPU 描画されます。

1. Terrain オブジェクトを作成する
- メニュー GameObject > 3D Object > Terrain(または Hierarchy 右クリック > 3D Object > Terrain)
- シーンに 1000m × 1000m の平らな Terrain が生成される
- Inspector に Terrain コンポーネントと TerrainCollider が自動で付く
- Terrain ツールバー(ペイントブラシ / 山 / 草 / 木 アイコン)から地形編集を開始
2. Terrain ツール一覧
| ツール | 機能 | 主な設定 |
|---|---|---|
| Raise/Lower Terrain | クリックで盛り上げ、Shift で凹ませる | Brush Size / Opacity |
| Paint Height | 指定の高さに均す | Height(目標高さ) |
| Smooth Height | 凹凸を滑らかに | Strength |
| Stamp Terrain | ブラシ形状の高さを一気にスタンプ | Brush, Height, Subtract |
| Paint Texture | 草 / 岩 / 砂 などのテクスチャを塗る | Layer / Target Strength |
| Paint Trees | 樹木を植える(プレハブ) | Tree Density / Random Rotation |
| Paint Details | 草・小石(ビルボード) | Detail Distance |
| Wind / Bake | 風で揺らす / ライトベイク | Wind Speed, Bend |

3. Heightmap をインポートして地形を読み込む
外部の DEM データ(国土地理院など)や Photoshop で作ったグレースケール PNG/RAW を読み込めます。
- Terrain コンポーネントの歯車アイコン (Terrain Settings)を開く
- Texture Resolutions (On Terrain Data) > Heightmap Resolution を確認(513, 1025, 2049, 4097)
- Import Raw... ボタンから 16-bit Raw / PNG を選択
- Width / Height / Byte Order (Mac/Windows) を指定して Import
解像度設定のセオリー
- Terrain Width / Length: 大きすぎる地形は描画コストが高い → 1000m 程度を複数 Terrain で繋ぐのが現実的
- Heightmap Resolution: 1025 で実用。2 のべき乗 + 1 である必要
- Detail Resolution: 1024 程度。草を多く置く場合は 2048 でも OK
- Control Texture Resolution: テクスチャブレンドの解像度。512〜1024 で十分
- Base Texture Resolution: 遠景で使う合成テクスチャ。1024 で OK
4. Terrain Layer(テクスチャ)の設定
Paint Texture モードで使う草・岩・砂のテクスチャはTerrain Layer アセットとして登録します。
1. Project Window で右クリック > Create > Terrain Layer
2. Diffuse / Normal Map をドラッグ&ドロップ
3. Metallic / Smoothness / Specular を設定
4. Tile Size (m) を指定 (例: 8 × 8)
5. Terrain の Paint Texture モードで Layer リストに追加
ヒント:
- 最大 4 Layer/ピクセル しか同時に使えない (Splatmap RGBA)
- 5 枚以上使う場合は Terrain 内で領域を分けるか、Unity Terrain Tools の追加 splatmap を利用
- Normal Map を入れると遠景でも凹凸感が出る
5. 樹木(Trees)を植える
- Paint Trees モードに切替
- Edit Trees... > Add Tree で Tree プレハブ(SpeedTree / Standard Tree Creator / 任意プレハブ)を登録
- Brush Size / Tree Density / Tree Height でランダム変動を設定
- Shift + クリックで消去、Ctrl + クリックで特定の木種だけ消去

Tree LOD / Billboard 設定
- Tree コンポーネントの LOD Group で距離別メッシュを設定
- Terrain Settings > Tree Distance:木を描画する最大距離
- Billboard Start:この距離以降は板ポリ(ビルボード)に置換
- Fade Length:ビルボード切替時のフェード
- Max Mesh Trees:メッシュとして表示する最大本数
6. 草・小石(Details)
Paint Details モードで草や小石(メッシュ or ビルボード)を密度で配置します。
- Edit Details > Add Grass Texture(草テクスチャ) or Add Detail Mesh(メッシュ)
- Min/Max Width / Height でランダムスケール
- Healthy/Dry Color で色のバリエーション
- Bend Factor / Wave Tint で風揺れ表現
- Terrain Settings > Detail Distance で描画距離(重い場合は短く)
7. Terrain Settings の Performance 調整
| 項目 | 役割 | 推奨 |
|---|---|---|
| Pixel Error | 遠距離での Heightmap 解像度の許容誤差 | 5(軽量)/ 1(高品質) |
| Base Map Distance | 詳細テクスチャを使う距離 | 1000m(標準) |
| Cast Shadows | 地形が影を落とすか | 必要に応じて |
| Draw Instanced | GPU インスタンシング | ★ ON 推奨(軽量化) |
| Reflection Probes | 反射プローブの混合方式 | Blend Probes |
| Material | Terrain 用シェーダー | URP/HDRP の Terrain Lit |
8. スクリプトから Terrain を操作する
using UnityEngine;
public class TerrainSampler : MonoBehaviour
{
void Start()
{
Terrain terrain = Terrain.activeTerrain;
TerrainData data = terrain.terrainData;
// 中心点の高さ
Vector3 pos = terrain.transform.position;
float centerX = pos.x + data.size.x / 2f;
float centerZ = pos.z + data.size.z / 2f;
float h = terrain.SampleHeight(new Vector3(centerX, 0, centerZ));
Debug.Log($"中心の高さ: {h}m");
// Heightmap を配列で取得して書き換え
int res = data.heightmapResolution;
float[,] heights = data.GetHeights(0, 0, res, res);
for (int y = 0; y < res; y++)
for (int x = 0; x < res; x++)
heights[y, x] += 0.01f; // 全体を 1% 持ち上げ
data.SetHeights(0, 0, heights);
}
}
Unity 6 / 最新版での改善点
- Terrain Tools パッケージ(Package Manager 経由)でブラシが大幅強化(Noise / Erosion / Hydraulic Erosion)
- URP / HDRP の Terrain Lit シェーダーが標準化、Normal Map + Mask Map 対応
- Detail / Tree の GPU インスタンス描画がデフォルト ON で大量配置時の負荷低減
- Terrain Holes(穴あけ)対応で洞窟入口や谷を Terrain に直接開けられる
- Terrain と HD Render Pipeline の Decal Projector 組合せで道や苔の表現が容易
FAQ
Q: 複数 Terrain を繋いだら継ぎ目に段差ができる
A: Terrain Tools の Stitch Terrains ボタンを使うか、Neighbors 設定で隣接 Terrain を登録して同じ高さに揃えてください。
Q: Terrain が重い
A: Pixel Error を大きく / Detail Distance を短く / Draw Instanced を ON / Tree Distance を短くしてください。Static Batching も有効です。
Q: Heightmap を Photoshop で作る場合の注意
A: 16bit グレースケールのRAW 形式で保存。Little Endian (Windows) / Big Endian (Mac) を Import 時に合わせる必要があります。