地形を作ろうとしたときに真っ先に思い浮かぶのはTerrainですが、致命的な難点として重いということが挙げられます。
下は適当に高さだけ作ったテラインですが、
下のようにかなり描画コストのかかるオブジェクトになっています。
こんなとき、テラインをメッシュオブジェクトに出力しつつ、頂点数や三角形を減らして描画コストを下げる方法をご紹介します。
「このアセットのテラインそのまま使いたいんだけど重いなあ…」
というときに便利(かも)。
TerrainObjExporterで地形をobj出力
Terrainをobj形式の3Dモデルとして出力するスクリプトが有志から提供されています。
http://wiki.unity3d.com/index.php?title=TerrainObjExporter
ありがたく使わせていただきましょう。
UnityプロジェクトのAssetsフォルダの下にEditorという名前のスクリプトを作り、リンク先のExportTerrain.jsかExportTerrain.csのどちらかをコピーして貼り付けましょう。
作成したTerrainをシーン内で選択した状態でメニューの
Terrain > Export To Obj..
と選択。
出力用のダイアログが出ます。
ダイアログのResolutionでFull以外を選ぶと、出力する頂点数を減らすことができます。
Exportを押し、出力先を選ぶと、obj形式の3Dモデルとして出力されます。(下画像のモデルにはマテリアルを適用済み)
Resolution=Fullでの出力後の描画コストは下。
うーむ、Batchesは劇的に下がりましたが、Tris, Vertsは逆に激増していますね。
原因を探りたいところですが、とりあえず先に進みます。
出力したメッシュに手を加える
このままだと描画コストが下がったとは言えないですね。
この後の方向性として、オブジェクトのクオリティを下げると下げないとで二つ探って見ます。
クオリティをなるべく下げずに使いたい場合
メッシュを分割し、オクルージョンカリングやLODを設定することで、近くの地形のクオリティを下げないまま、全体の描画コストは下げることを考えてみます。
出力したTerrainは広大なオブジェクト(2km四方)なので、何ブロックかに分割し、オクルージョンカリングとLODを設定します。
メッシュ分割はMeshCutterなどアセットを使ったり、自力でスクリプト組めばできます。
LODを使いたい場合はSimpleLODが便利です。
クオリティが下がってもいいけど一個のオブジェクトにしたい場合
頂点数を減らすしかないので、TerrainObjExporterでの出力時にResolutionを下げます。
実機とにらめっこしながら適度な解像度をがんばって探しましょう。
草やWindZoneを使いたい場合
Terrainコンポーネントの設定でBase TerrainのDrwaチェックボックスを外せば、草を残しつつ地形だけ消せます。
WindZoneもばっちり効く。