今回はUnityのTerrain Toolsについて見ていきたいと思います。
Terrain Toolsに関してはこの記事で見ていき、Terrain ToolsをインポートすることによってTerrainに追加された機能については次の記事、最後に簡単ではありますがTerrainを使って地形を作ってみる記事の3本建てでいきたいと思います。
Terrain Toolsはデフォルトでインポートされている地形を作成するTerrainに、ブラシや便利な機能を追加出来ます。
Terrain ToolsはUnity2019.1から使用出来ます。
今回この記事を書くにあたって使用したUnityのバージョンはUnity2021.1.26f1です。
Terrain Toolsのインポート
Terrain ToolsはUnityのバージョンによってはPackage Managerから直ぐにダウンロード&インポートが出来ますが、ない場合(Edit→Project Settings→Package ManagerのAdvanced SettingsのEnable Pre-release Packagesにチェックを入れると出てくる場合もあります)もあるのでUnityのアセットストアで「Terrain Tools Sample Asset Pack」で検索してダウンロード&インポートします。
アセットはUnity Technologiesが開発したものであることを確認してください。
インポートが完了したらAssets/Samples/Terrain Toolsフォルダ以下にTerrain用のブラシやテクスチャなどが出来ます。
Package Managerからプレビュー版パッケージをダウンロード&インポートしたい場合は自分でパッケージ名とバージョンを指定して該当するパッケージを使う事も出来ますが、Unityのバージョンに対応しているか確認してください。
やり方は以下の記事の「パッケージのインストール方法」の項目を参照してください。
Terrain Toolboxウインドウ
Terrain Toolsのインポートが完了するとUnityメニューのWindowからTerrain→Terrain Toolboxを選択することでTerrain Toolboxウインドウが開きます。
わたくしの場合は最初にインポートした時にTerrainメニューが出なく、再度インポートすることでメニューが出現したので、もし出なかった人は再度ダウンロード&インポートしてみてください。
Terrain Toolboxウインドウは以下のようになります。
タブが4つあるのでそれぞれ見ていきます。
Create New Terrain
まずはCreate New Terrainタブを見ていきます。
General
Total Terrain Widthは分割したTerrain全ての幅をメートルで指定します。正方形でTotal Terrain Widthが500で4分割のTerrainがあれば一つの幅は250mとなります。
Total Terrain Lengthは分割したTerrain全ての長さをメートルで指定します。
Terrain HeightはTerrainの高さをメートルで指定します。
Start PositionはTerrainのスタート位置を指定します。正方形で4分割にした場合は最初のTerrainのTransformのPositionのXYZが0になります。それ以外はそこから幅や長さによって位置を変えます。
Tiles X AxisはX方向のTerrainの分割数を指定します。
Tiles Z AxisはZ方向のTerrainの分割数を指定します。
Grouping IDは分割したTerrainをひとつのグループとして扱う際に使用するIDを指定します。Terrainが分割していてもGrouping IDが同じであれば同じ設定を使う事が出来ます。
Group Settings
Group SettingsはGroupの設定をすることが出来ます。
Pixel Errorは高さマップと生成されたTerrainの間のマッピングの精度を指定します。値が高いほど制度は低くなりますが、レンダリングのオーバーヘッドは低くなります。
Base Map DistanceはTerrainのテクスチャをフル解像度で表示する最大距離を指定します。この距離を超えたら低解像度のテクスチャを使用します。
Material OverrideはTerrainをレンダリングする為のマテリアルを上書きしたい場合に指定します。デフォルトのマテリアルを使用する場合はそのまま何も指定しません。
Tile Height ResolutionはTerrainのハイトマップのピクセル解像度を指定します。
Import Heightmap
Import Heightmapの左のチェックボックスにチェックを入れるとハイトマップのインポートをしてTerrainに適用出来ます。
ただ、ハイトマップをインポートし、Createボタンを押した時に、TerrainToolbox: Imported heightmap resolution is not power of two.というハイトマップの解像度が2の累乗ではないというエラーが出て、TerrainToolbox経由でハイトマップからTerrainを作成することが出来ない事がありました(解像度が2の累乗であったとしても)。
ただ急に出来たこともあるので出来ない時はUnityの再起動とかFlip Axisの変更を試すことで出来る事もあるかも?
Heightmap ModeはGlobal、Batch、Tilesがあります。
Global
Globalモードでは全てのTerrainで使用するハイトマップを一つ指定してインポート出来ます。
試しにGIMPで256×256の解像度のハイトマップを作成しインポートしてそこからTerrainを作成してみます。
わたくしが作成したハイトマップファイルで試したい方は以下のファイルをダウンロードして解凍して使用してください。
Import Heightmapの横のチェックをし、Globalタブを押してSelect Heightmap Fileの右端の3つの丸を押し、ハイトマップファイルであるterraintest.rawファイルを指定します。
ハイトマップファイルは256×256の解像度で作成したのでTile Height Resolutionは257としました。
Flip Axisは変える必要はないですが変更すると謎のエラーが出ずTerrainが作られるかもしれません(謎)。
インポートが完了したら下にあるCreateボタンを押すとハイトマップを利用したTerrainが作成されます。
Batch
BatchモードはハイトマップのリストをインポートしてTerrainのタイル(分割してある地形)ごとに一つのハイトマップを適用出来ます。
まずは4分割で2×2のTerrainを作成する為に4つのハイトマップファイルを用意し、1つのフォルダに入れます。
1つのフォルダに入れたら順番にファイル名を変更します。
ファイル名の最後はX軸とZ軸に沿った番号を付ける必要があり、今回の場合は以下のようにファイル名がなっています。
ファイル名の後に_(アンダーバー)を付けた後にX軸の番号、さらに_を付けその後にZ軸の番号を付けます。
ハイトマップファイルを入れたフォルダを指定し、Tiles X AxisとTiles Y Axisに2を入れ2×2のハイトマップと対応するようにします。
ハイトマップファイルの解像度は256×256で作成したのでTile Height Resolutionは257にし、下のCreateボタンを押します。
するとハイトマップファイルからTerrainが作成されます。
わたくしが作ったテスト用のハイトマップを使用したい方は以下のファイルをダウンロードして解凍して使用してください。
Tiles
Batchモードでは指定したフォルダにあるファイル名を元にTerrainを作成しましたが、Tilesモードではタイルに指定したいハイトマップを手動で指定してTerrainを作成することが出来ます。
各タイルに指定したいハイトマップを個々に選択出来ます。
指定したら後はCreateボタンを押すだけです。
Batchモードで指定したのと同じハイトマップファイルをそのまま使用しているので結果として同じTerrainが作成されました。
Import Heightmap共通の設定を見ていきます。
Tile Height ResolutionはTerrainのハイトマップ解像度を指定します。
Height Remapは高さのマップの0と1の値を最小と最大の高さに再マップします。
Flip Axisは軸をHorizontal(水平)かVeritcal(垂直)に反転するか、それともしないかです。
Import Heightmapの機能を使わない場合は名前の横のチェックを外しておかないとハイトマップを使ってTerrainを作ってしまうので気を付けてください。
ただUnity2021.2.0f1とTerrain Tools4.0.3で試した時はチェックを外すだけでハイトマップから生成されることはなかったです。
Gizmo
次はGizmoについて見ていきます。
Gizmoにチェックを入れると今作成しようとしているTerrainの領域をギズモで表示出来ます。
シーンビューで見ると以下のようになります。
このギズモはあくまで今作成しようとしているTerrainの領域に表示するギズモであり、作成済みのTerrainとは関係ありません(チェックを外すと消えます)。
Preset
PresetはTerrainを作成する時の設定ファイルを保存する事が出来ます。
Saveボタンを押すと新しく設定ファイルを作成する事が出来ます。
作成した設定ファイルをPresetで指定するとその設定ファイルが適用されます。
Save Asを押すと名前を付けてファイルに保存します。
Refreshを押すと設定ファイルから設定を読み込みます。
Options
Optionsでは作成するTerrainについてのオプションを設定出来ます。
TerrainData Directoryで指定したフォルダに作成したTerrainのTerrain Dataが保存されます。
TerrainData Name Enable Guidにチェックを入れるとTerrainの名前がユニーク(同じ名前にならない)になります。チェックを外すと単純な名前になります。
Replace Terrainsにチェックを入れると指定したGrouping IDで以前に作成したTerrainを新しいTerrainに置き換えます。ちょっとわかりにくいですが、以前に作成したTerrainと同じGrouping IDを設定し、Createボタンを押すと以前のTerrainに変わって新しい設定のTerrainが作られるという感じかもしれません。
Enable Auto Generate Lightingにチェックを入れるとライトが自動でベイク処理されます。
Create
Createボタンを押すと設定に基づいてTerrainを作成します。
Terrain Settings
次はTerrain Settingsタブを見ていきます。
Terrain Settingsを使用すると従来のTerrainの設定をタイル毎にする必要がなくなり複数のタイルの設定を一気にすることが出来ます。
またその設定ファイルの保存も出来ます。
Load Settings From
Load Settings Fromでは設定を読み込むことが出来ます。
Defaultタブはデフォルトの設定
Selected Terrainタブは選択しているTerrainの設定
PresetタブはPresetで指定したファイルの設定
それぞれのタブを選択した状態でLoadボタンを押すことで設定を読み込むことが出来ます。
Preset
PresetではTerrainの設定ファイルの指定が出来ます。
設定ファイルが指定されていない状態でSaveボタンを押すと新しいTerrainの設定ファイルを作成出来ます。
Save Asボタンを押すとTerrain設定ファイルを名前付きで保存できます。
Refreshボタンを押すと指定した設定ファイルの設定を読み込みます。
Terrain Settingsタブの他の設定はTerrainの通常の設定とほぼ同じなので割愛します。
Terrainの設定を変更したらヒエラルキーで選択したTerrainだけに設定を施すか(Apply to Selected Terrain(s))、シーンに存在するTerrain全てに設定を施すか(Apply to All Terrain(s) in Scene)を選択することが出来ます。
Terrain Utilities
Terrain Utilitiesタブを見ていきます。
画像が長いので各項目を折りたたんでいます。
Terrain Edit
Terrain EditではTerrainを一括で操作する時に便利な機能があります。
Duplicateボタンを押すと選択したTerrainを複製します。
Clean Removeでは選択したTerrainとそのTerrainDataをRemoveボタンを押すことで削除します。こちらを使うと便利なのが、ヒエラルキーのTerrainを削除してもTerrainDataがデフォルトでAsset/Terrainに残るのを防ぎTerrainDataも削除してくれます。
Splitでは選択したTerrainをTiles X AxisとTiles Z Axisで指定した数に分割してくれます。
Auto Update Terrain Settingsにチェックを入れると自動でTerrainの設定を更新します。
Keep Original Terrainにチェックを入れていると元のTerrainをそのまま残して、新しく分割したTerrainを作成します。
Splitボタンを押すことで実行します。
Terrain Layers
Terrain LayersではTerrainのレイヤーの管理に役立ちます。
Palette PresetではTerrainのレイヤーパレットファイルの設定や保存、読み込みが行えます。
レイヤーパレットファイルが設定されていない状態でSaveボタンを押すと新規設定ファイルを作成することが出来ます。
Save Asボタンは名前を付けて保存です。
Refreshボタンを押すと設定したファイルの設定を読み込みます。
Import From Terrainボタンを押すと選択したTerrainで使用しているTexture Layer Palletをインポートすることが出来ます。
Clear Existing Layersにチェックを入れるとTerrainにレイヤーパレットを設定する時にTerrainの既存のレイヤーを削除します。
All Terrains in Sceneにチェックを入れるとシーンにある全てのTerrainにレイヤーパレットを適用します。
Add to Terrainボタンを押すと選択したTerrainにレイヤーパレットを適用します。
Remove All Layersボタンを押すと選択したTerrainの全てのレイヤーを削除します。
少し試してみましょう。
Terrain ToolboxウインドウのCreate New Terrainタブで適当にTerrainを作成しておきます。
今回は2×2に分割したTerrainを作成しました。
次にTerrain ToolboxウインドウのTerrain UtilitiesのTerrain LayersのMaterial Layer Paletteの+を押して適当にテクスチャレイヤーを追加します。
今回はGrassHillAlbedo(Unityのスタンダードアセットに含まれている)とrock(TerrainToolsアセットに含まれている)を追加しました。
このレイヤーパレットを先ほど作成したTerrainの一つに反映させてみます。
4つのTerrainのうち1つを選択します。
All Terrains in Sceneのチェックを外し、Add to Terrain(s)ボタンを押してみます。
すると先ほど選択したTerrainのインスペクタのLayersにTerrain Toolboxウインドウで設定したパレットが反映されます。
Add to Terrain(s)もRemove All LayersボタンもAll Terrains in Sceneにチェックが入っていない場合は選択したTerrainで、チェックしていれば全てのTerrainに反映されます。
全てのTerrainで共通のレイヤーパレットを即座に反映出来るので便利です。
Terrain Splatmaps
Terrain SplatmapsはTerrainに色々なテクスチャを組み合わせて出来たテクスチャマップでこちらもレイヤーパレットと同じようにTerrainから取得出来ます。
Import from Selected Terrainボタンを押すと選択しているTerrainからスプラットマップを取得出来ます。
Preview Splatmapにチェックを入れると選択したTerrainのリストにあるスプラットマップがプレビューされます。
Adjust All Splatmapsにチェックを入れるとリスト内の全てのスプラットマップを調整出来ます。
Rotate AdjustmentのClockwiseで時計回り、Counterclockwiseで反時計回りの設定にしRotateで実際に90度回転させます。
Flip AdjustmentはHorizontalで水平方向、Verticalで垂直方向の設定にし、Flipボタンで反転させます。
Export to Terrain(s)ボタンを押すとTerrainにスプラットマップを出力します。
Reset Splatmapsを押すと選択したTerrainのスプラットマップをリセットします。
Export Splatmaps
Export Splatmapsはスプラットマップを出力することが出来ます。
Export Folder Pathでは出力するフォルダを指定します。
Splatmap Formatは保存するファイルの形式を指定します。TGAかPNG形式で保存出来ます。
Export Heightmaps
Export Heightmapsは選択したTerrainのハイトマップを出力することが出来ます。
Export Folder Pathは出力先のフォルダを指定します。
Heightmap Formatは出力するファイル形式で、PNG、TGA、RAWから選択出来ます。
Heightmap Depthは深さを選択出来、Bit 8、Bit 16から選択出来ます。
Heightmap Byte OrderはWindowsかMacを選択します。
Levels Correctionで高さの範囲を0~1の間で再マップします。
Flip Verticallyにチェックを入れると垂直に反転させます。
試しに使ってみましょう。
最初に作ったTerrainのインスペクタのTerrainでRaise or Lower Terrainを使って地形をデコボコにします。
4つのタイル全てを選択し、Terrain ToolboxウインドウのTerrain UtilitiesタブのExport HeightmapsのExport Heightmapsボタンを押します。
するとデフォルトではAssets/Heightmapsフォルダに4つのタイルのハイトマップが作成されます。
さらにこのハイトマップを使って同じTerrainを作成してみます。
Terrain ToolboxウインドウのCreate New Terrainタブを選択し、先ほど作ったTerrainとは違う位置に作る為Start PositionのXに500を入れ、Grouping IDを1にします。
Import Heightmapの横のチェックを入れ、Batchタブを選択して先ほどハイトマップを出力したフォルダを選択し下の方にあるCreateボタンを押します。
すると先ほどハイトマップを出力したTerrainと同じものがとなりに作られます。
Terrain Visualization
Terrain Visualizationタブでは作成したTerrainの高さに応じて色を変更した様子を視覚的に確認出来ます。
Visualization ModesをAltitude Heatmapにすると高さに応じて色を変えるメニューが表示されます。
Reference Spaceは元となる位置をローカルで判定するかワールドで判定するかの設定です。Terrainがなんらかのゲームオブジェクトの子にある場合でそのゲームオブジェクトを動かしてもLocal Spaceであれば表示は変わりませんがWorld Spaceだと変化します。
Measurement Unitは距離の単位をメートルかフィートで選べます。
Levelsは色分けを何段階に分けるかの設定でデフォルトだと5になります。1~8まで設定出来るようです。
その下は基点からの高さに応じて色を設定出来ます。
Presetを使うと設定を保存したり読み込んだりすることが出来ます。
設定ファイルを指定していない場合はSaveボタンを押すことで新しい設定ファイルを作成することが出来ます。
Save Asボタンで名前を付けて保存することが出来ます。
Refreshボタンを押すと指定した設定ファイルの設定が読み込まれます。
Terrain Visualizationを使ってみましょう。
Terrainにデコボコを付けた後にTerrain Visualizationの設定を以下のようにします。
シーンビューで見てみると以下のように高さに応じて色分けした様子を確認出来ます。
終わりに
Terrain Toolsを新たにインポートしなくても元のTerrainだけで別にいいや!って思っていたんですが、Terrain Toolsをインポートして地形を作成した方が簡単に高度なことが出来たり操作が便利ですね。
Unity Toolsをインポートすると既存のTerrainに機能が追加されるので、それはまた次の記事でやりたいと思います。(^^)/