UnityのTerrainで大地を創る

  • 52
    いいね
  • 0
    コメント

同じ内容を解説した勉強会の動画

広大なフィールドを手軽に作成できる地形エンジン Terrainを使ってみよう。

Terrainの特徴

Terrainは広大なフィールドを少ない負荷で作ることが出来る仕組み。
標準のサイズは2キロメートル四方のフィールドを1個のオブジェクトで表現できる。
下記のような機能を持っている。

  • 高低差のある広大な地形を作成
  • 地形上に任意のテクスチャをブレンドして塗り絵のように設定
  • 木、草などを植え、風になびくなどの設定

基本的な作り方

メニューからGameObject > Create Other > Terrain とするとTerrainのオブジェクトが作成される。

他のオブジェクトと同様にインスペクタから各種設定を変更する。

Terrainの設定を変更するには歯車のマークをクリックする。

さまざまな設定があるが、大きさなどを設定するには一番下のResolutionの項目。

項目名 内容
Terrain Width 地形の幅
Terrain Width 地形の長さ
Terrain Height 地形の最大の高さ

Unityの標準的なオブジェクトは1メートル四方の立方体であるのに対して、デフォルトで2000メートル四方、標高600メートルという圧倒的なサイズになっている。

またインスペクタのTransformのScaleはTerrainには効果を及ぼさないので注意。

高低差を作る

高低差はブラシツールをつかって、土地を持ち上げたり押し下げることで形成する。
初期状態が最も高度が低い状態になっているので窪んだ地形にする場合はまず持ち上げる必要がある。

地形を操作するツールは3種類。

名前 内容
Raise / Lower 山に矢印のアイコン。クリックした場所を持ち上げる。シフトを押しながらクリックで下げる。
Paint 山に矢印2個のアイコン。クリックした場所を指定した高さにする。平坦なエリアを作れる。
Smooth 山に水滴のアイコン。クリックした範囲を滑らかにする。不自然なエリアの調整。

地形を操作する時はシーンビューで操作したい場所にマウスのカーソルをのせてFを押すと指定の位置にブラシのサイズに合わせてズームインする。
ブラシのサイズを変更することで一回のクリックで編集する地形の範囲を変更できる。

ブラシサイズ15

ブラシサイズ40

窪んだ地形を作るには一度適当な高さでFlattenしてから押し下げるとよい。

実際にカメラやキャラクタを配置して確認すると想像以上に大きいので注意。(この例ではAssets > Import Package > Character Controller3rd Person Controllerを使った。)

テクスチャを貼る

テクスチャの設定はインスペクタの筆アイコンのツールで行う。
地形にはテクスチャをブラシで塗るようにして適用できる。通常は1つのオブジェクトには1つのテクスチャしか設定できないが、Terrainの場合は複数のテクスチャを塗り分けるように設定できる。

まずは標準のテクスチャパックが入っているアセットをインポート。Assets > Import Package > Terrain Assetとしてテクスチャをプロジェクトに読み込む。次にTerrainのインスペクタ、筆アイコンを選択してEdit Texturesをクリックし、Add Textureをクリック。地形に使うテクスチャを選択していく。まず最初に選択したテクスチャが地形のデフォルトになるので全体を塗りつぶすテクスチャを選択する。たとえば Grass (Hill)を選ぶと次のように鳴る。

同じようにAdd TextureでGood Dirt, Criff, Grass and Rockを選択していく。

テクスチャを複数準備したら、地形を塗りたいテクスチャを選択、ブラシのサイズや形を選択して地形を塗っていく。

テクスチャを用意して塗り分ければ草原や砂漠などが簡単につくれる。

木を植える

木を植えるにはインスペクタの木のアイコンを使う。この機能で植えた木には当たり判定などはないのであくまで装飾目的になる。

さきほどインポートしたアセットに木のモデルがあるのでEdit TreesからAdd Treeとし、Palmオブジェクトを設定する。◯アイコンをクリックして選択する。

あとはテクスチャなどと同じようにブラシサイズなどを設定してクリックすると植樹できる。

草を植える

草を植えるにはクローバーのマークのDetailツールを使う。平面の草や立体の小物などを散布できるが、やはり当たり判定はないので注意。

草も標準のデータが入っているのでEdit DetailsからAdd Grass Textureを選択、Grassを選択する。

あとは同様にブラシサイズなどを設定してクリックし、草を植える。

ライトマップ

見通しが効くので陰影が厳しい時はライトマップをベークすると良い。

Terrain Toolkitを使った自動生成

Terrainは便利な機能だが領域が広大なので自然な地形を作るのは手間がかかる。そこでアルゴリズムを元に地形を自動生成するパッケージ、Terrain Toolkitを使うと便利。

Terrain Toolkitの基本的な機能は次のとおり。

名前 説明
Create 地形を自動で生成する
Erode 風や雨、波による地形の侵食をシミュレートする
Texture 地形の標高に応じて自動的にテクスチャを塗り分ける

https://code.google.com/p/unityterraintoolkit/downloads/list

Terrain Toolkitをダウンロードし、インポートする。Assets > Import Package > Custom Pckageとし、ダウンロードして解凍したパッケージを選択する。

Terrain Toolkitの導入

Terrain Toolkitはスクリプトになっており、TerrainのオブジェクトにTerrainToolKitをドラッグアンドドロップして追加する。

インスペクタにメニューが表示されればOK.

Create

地形の特徴やアルゴリズムのパラメータを設定し、ランダムで地形を生成する。プリセットを使った手軽な生成も可能。生成する地形の区分は次の通り。

Voronoi

ボロノイ図状、任意の数の凸に地形を分割する|

Fractal

フラクタル。自己相似した細かな凹凸による起伏を作成|

Perlin

ノイズ関数をつかったフラクタルににた地形。

平準化と標準化

生成した地形はさらに平準化(Smooth)や標準化(Normalize)が可能。アルゴリズム系の地形はそのままだと不自然なので後処理も必要になる。

Erode

侵食をシミュレートした平準化を行う。選択可能なロジックは次の通り。

名前 内容
Thermal
Hydraulic
Tidal
Wind

Texture

複数のテクスチャを標高や傾きに応じて自動的に塗り分ける機能。
低地や高地、崖などを自動的に適用できる。

テクスチャのApplyは何度でも実行できるので調整しながら実行するとよい。