Unityでオープンワールドゲームを作るときなど、広大な地形を扱う場合はほぼ確実にTerrain(テレイン)機能を使うことになると思います。好きな地形をUnityエディタ上で手軽に作れるのはとても便利ですよね。
しかし、Terrainの大きなデメリットとして「何も考えずに使うと描画処理が重くなってしまう」という点があります。せっかくTerrainで綺麗な地形を作ったのに、それを使ったらゲームの動作がモッサリしてしまった…なんてことはなるべく避けたいものです。
そこで今回はTerrainを少しでも軽くするための方法(=最適化)について書きます。紹介するやり方は主に次の2つです。
- 設定でTerrainを軽くする方法
- 作り方によってTerrainを軽くする方法
Terrainを最適化するための設定方法
では、まずは設定によって重いTerrainの描画コストを下げる方法を紹介します。ヒエラルキーでTerrainを選択して設定タブ(下図)を開きましょう。
ずらっと並んだ項目の中で、主にTerrainの描画コストに関係する項目は次のとおりです。
- ピクセル許容誤差
- ベースマップ距離
- ディテール表示距離
- ディテールオブオブジェクト密度
- 樹木表示距離
- ビルボード開始距離
- メッシュの最大樹木数
- 横幅、奥行き、高さ
- パッチごとのディテール解像度
- ハイトマップ解像度
各設定項目の詳細
ピクセル許容誤差
ピクセル許容誤差は、簡単に言えば「遠くの地形を正確に描画するかどうか」を決める設定です。この値が大きいほど遠くの地形の描画が雑になりますが、その分描画が高速になります。
デフォルトの値「5」はあまりにも正確すぎるので、軽さ重視したければかなり大きめの値を設定してしまってOKです。私はいつも「25」~「50」くらいに設定しています。
ベースマップ距離
ベースマップ距離は、指定した距離まで「テクスチャを最大解像度で表示」します。例えばこの値が500なら、
- 500mまではテクスチャをくっきりと綺麗に表示する
- 500m以降はボヤけた雑なテクスチャを表示する
ということです。
当然ながらテクスチャは雑に描画するほど処理が軽くなるため、この値を小さくすればその分だけ描画が早くなります。ただしテクスチャはTerrainの見た目に大きく影響するので、その辺はうまく調整しましょう。
ディテール表示距離
ここで設定した距離まで草を表示します。表示距離が短いほど描画コストが下がります。ただし草が全くない場合は関係ないです。
ディテールオブオブジェクト密度
草の密度を指定します。値が小さいほど軽くなります。こちらも草を生やさない場合は関係ありません。
樹木表示距離
指定した距離まで木を表示させます。デフォルトだとかなり遠くの木も見えるようになっているので、もっと小さい値にしておくことをオススメします。ただし木を生やさない場合は無関係です。
ビルボード開始距離
木をビルボード表示(=メッシュではなく、ハリボテみたいに表示)する距離です。ここの値よりも遠くの木はビルボード表示されるようになります。
ビルボード表示は木を普通に表示するよりも軽いのでこの値が小さいほど軽いです。こちらも木を生やさない場合は無関係。
メッシュの最大樹木数
木を普通に表示(つまりメッシュとして表示)する数。「ビルボード開始距離」より近い木であっても、ここで設定した数を超えた分はビルボード表示されるようになります。当然ながら値が少ないほど高速です。ただし木を生やさない場合は関係ありません。
横幅、奥行き、高さ
Terrainのサイズです。もちろん値が小さいほど軽くなるので、必要以上に大きくしない方が無難だと思います。
なおこの設定項目は必ず最初に設定してください。地形を編集してからここの値を変更すると、せっかく作った地形がゆがんでしまう場合があります。注意しましょう。
パッチごとのディテール解像度
1回のドローコールで描画される範囲のサイズです。値は8~128の間で設定可能で、大きいほど描画コストが下がります。
ハイトマップ解像度
ハイトマップ解像度は、ザックリ言えばTerrainのメッシュの細かさです。値が小さいほどメッシュが大きくなります。メッシュが大きいと地形の凸凹を大まかにしか表現できませんが、その分描画が高速になります。
33~4097までの値のうち「2のべき乗+1」の値が設定可能です(例えば257、513など)。凸凹の少ない地形であれば129とかにしても全然問題ないと思います。
ちなみにこの設定項目も最初に設定しておくことをオススメします。
設定項目まとめ
以上をまとめると、次のように設定すればTerrainが軽くなります。
- ピクセル許容誤差を上げる
- ベースマップ距離を下げる
- ディテール表示距離を下げる
- ディテールオブオブジェクト密度を下げる
- 樹木表示距離を下げる
- ビルボード開始距離を下げる
- メッシュの最大樹木数を下げる
- 横幅、奥行き、高さを小さくする
- パッチごとのディテール解像度を上げる
- ハイトマップ解像度を下げる
軽いTerrainにするための地形の作り方
さて、次は地形の作り方によってTerrainを軽くする方法です。Terrainを少しでも軽くするための地形の作り方は次の2つです。
- なるべく平坦な地形にする
- 木や草を生やしすぎない
なるべく平坦な部分を多くする
まず1つ目はなるべく平坦な部分を多くするということです。Terrainで凸凹部分を作ると、その周辺はポリゴン数が多くなります。したがって平坦な部分が多いほど処理が軽くなるというわけです。
木や草を生やしすぎない
次に2つ目は、当たり前かもしれませんが木や草を生やしすぎないのも大きなポイントです。
デフォルト設定だとどうしてもモッサリと木や草を生やしてしまいがちですが、生やし方を少しまばらにするだけでも違ってくると思います。特に木は生やしすぎると描画負荷がとんでもない値になるので気を付けたほうが良いでしょう。
おわりに:設定・作り方次第でTerrainは軽くなる
以上、Terrainを少しでも軽くするための方法をご紹介しました。
何かとTerrainは重いと言われがちですが、設定や作り方次第ではゲームの動作に支障ない程度には軽くなります。「Terrain使ったらゲームが重くなった…」とお困りだった方は、ぜひその辺を見直していただければと思います。