この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: Unity Terrain で地形に高低差をつける方法
SEOタイトル: Unity Terrain の Raise/Lower / Set Height / Smooth / Stamp と Heightmap 編集まとめ

この記事の要点
  • Raise/Lower Terrain ブラシで盛り上げ・くぼみを直感的に作る。Shift で逆動作
  • Set Height は指定高さに平坦化。基準面を作るのに便利
  • Smooth Height で凹凸をなだらかに、Stamp Terrain でテンプレ地形を押し付け
  • Brush Size と Opacity(強さ)を調整して段階的に盛る
  • 大規模地形は Heightmap (RAW/PNG) を外部ツールで編集してImportするのが効率的

Unity Terrain の概要

Unity の Terrain は広大な地形を扱うための専用コンポーネントで、Heightmap(高さデータ)を持ち、ブラシ操作で凹凸を作れます。山・谷・平原・川などのオープンワールドを構築するための土台です。

GameObject → 3D Object → Terrain を作成すると、シーンに平らな地形(既定 1000×1000)が配置されます。Inspector の地形コンポーネントには 5 つのアイコンが並び、地形編集モードを切り替えます。

Unity Terrain Raise / Lower Terrain ブラシ

1. Raise / Lower Terrain(盛上げ / 掘削)

最も基本的な地形ブラシ。マウス左ドラッグで盛り上げ、Shift + 左ドラッグで掘り下げます。

パラメータ役割目安
Brush Sizeブラシの半径大地形は 50〜100、ディテールは 5〜20
Opacity1 ストロークあたりの強度10〜30 が扱いやすい
ブラシ形状柔らかい円 / 硬い円 / ノイズ等自然地形はノイズ系がおすすめ

2. Set Height(平坦化 / 基準面作成)

指定した高さに地形を揃えます。建物を建てる土地、湖底、台地を作るのに使います。

  1. Set Height ブラシを選択
  2. Height 欄に目標高さを入力(例: 50)
  3. Flatten Tile ボタンで全面に適用、もしくはブラシでなぞる
  4. 地表に Shift を押しながらクリックすると「その地点の高さ」を Height にスポイト取得できる

3. Smooth Height(平滑化)

盛りすぎてギザギザになった地形をなめらかにします。山と谷の境目、湖の周辺など、不自然な急角度をなだらかにするのに便利です。

Unity Terrain Stamp Terrain 適用例

4. Stamp Terrain(テンプレ地形の押付)

あらかじめ用意した山や火口の形をスタンプとして地形に押し付けます。同じパターンを連続で配置したい場合に時間を節約できます。

  • Brush に山型・峰型・尾根型などの形状を選択
  • Stamp Height でスタンプの最大高さを指定
  • マウスクリックで 1 回押下、Shift + クリックで反転(くぼみに)

5. Paint Texture(テクスチャ塗布)

高低づくりに直接関係ありませんが、地形が出来たら草地・岩・砂浜のテクスチャを塗り分けます。Layers を追加し、ブラシで描画します。標高別・傾斜別の自動塗布は Terrain Layers + シェーダまたは Unity Asset Store の MicroSplat / CTS で実現できます。

Heightmap を外部ツールで作成

広大な地形を手で塗るのは時間がかかります。実写の標高データ(DEM)や、World Machine / Gaea / TerreSculptor などのプロシージャル地形ツールで生成した Heightmap(グレースケール画像)を Unity に取り込むと、リアルな地形が一気に作れます。

[Terrain Inspector]
  歯車アイコン (Terrain Settings)
    → Texture Resolutions (On Disk)
    → Heightmap Resolution: 513 / 1025 / 2049 / 4097
    → Import Raw...     ← RAW 16bit ファイルを取り込む
    → Export Raw...     ← 現在の地形を書き出す

対応フォーマット:
  RAW 16bit (推奨) — 階調が広く滑らか
  RAW 8bit          — 軽量だが段差が見える
  PNG (8bit/16bit)  — 一般的、Photoshop で編集可

URP / HDRP での Terrain

Built-in(Standard)と URP / HDRP では Terrain のシェーダが異なります。新規プロジェクトで URP / HDRP テンプレートを選んだ場合、Terrain のマテリアルは自動的にパイプライン用のものに差し替わります。既存プロジェクトをアップグレードした場合は、Edit → Rendering → Materials → Convert Selected Built-in Materials to URP で変換できます。

Unity Terrain Smooth と高低差

スクリプトから地形を編集

ランタイム or エディタ拡張で地形を動的に変更したい場合のサンプル:

using UnityEngine;

public class TerrainEdit : MonoBehaviour
{
    public Terrain terrain;

    void Start()
    {
        TerrainData data = terrain.terrainData;
        int w = data.heightmapResolution;
        int h = data.heightmapResolution;

        float[,] heights = data.GetHeights(0, 0, w, h);

        // 中央を山にする(簡易ガウス)
        for (int z = 0; z < h; z++)
        {
            for (int x = 0; x < w; x++)
            {
                float dx = (x - w / 2f) / w;
                float dz = (z - h / 2f) / h;
                float d2 = dx * dx + dz * dz;
                heights[z, x] = Mathf.Exp(-d2 * 12f) * 0.5f;
                // 正規化高さ 0.0〜1.0
            }
        }
        data.SetHeights(0, 0, heights);
    }
}

作業効率を上げるコツ

  • Opacity は控えめに: 5〜10 で繰り返すと自然な凹凸ができる
  • カメラを真上に: 上空視点で大まかな地形を作り、視点を下げてディテール
  • 頻繁にプレビュー: Game View に切替えてプレイヤー視点を確認
  • Heightmap Resolution は必要十分に: 4097 はメモリを大量に使う
  • 大規模地形は Terrain Tile(複数 Terrain)に分けて遠景 LOD を効かせる

FAQ

Q: 高低差の最大値は?
A: Terrain Settings → Mesh Resolution の Terrain Height で決まる。既定 600m。山岳地形なら 1000〜2000m に。

Q: 地形が真っ黒に表示される
A: URP / HDRP のマテリアル変換が未実施です。Window → Rendering → Render Pipeline Converter で一括変換できます。

Q: Undo が効かない
A: 大きな Terrain では Undo がバッファに収まらず効かないことがあります。重要な変更前に Export Raw で書き出しておくと安心です。