今回はUnityのTerrain(地形)に関する話題で
Terrainに草をみっしりと生やして美しい草原を作る方法
をご紹介するという内容になっております。
Unityでオープンワールドゲーム等の3Dゲームを作る際はほぼ確実にTerrainという地形制作機能を使うことになると思います。このとき地形の見た目の美しさを大きく左右するのが「草」や「花」といったディテールオブジェクトなのですが、よくある悩みとして
- Terrainに草をみっしり生やしたいのに草の密度が薄くてスカスカになってしまう
- 草をたくさん生やそうとするとゲームが重くなってしまう
といった問題が出てくる場合があります。
ただしこれらの問題は設定次第でかなり改善でき、きちんと最適化すれば大量の草を生やしても十分な処理速度を得ることが可能です。
そこでここではTerrainに草をたくさん生やして美しい草原を作る方法や、草をたくさん生やしても重くなりにくくするための最適化手法を丁寧にご紹介しますね。
Terrainに草をたくさん生やした場合のサンプル
まずはじめに、私がいま開発中のゲームにおいてTerrainに草をみっしりと生やした際のサンプル画像をご覧ください。
なかなかきれいな風景でしょう?しかもこれだけ草を生やしてもBatchesは180程度であり、フレームレートは私のミドルクラスのPCで200fps前後とかなり健闘しています。これならもう少しローエンドのPCでも問題なく動きそうです。
ちなみに草の描画を切った場合と草の密度を減らした場合は下記のようになります。
どちらも先ほどとは全然印象が違ってなんかショボく見えますよね…。このように草などのディテールオブジェクトはゲームの地形の見映えをかなり大きく左右することが分かります。
Terrainに草をたくさん生やす方法
さてサンプル画像をご覧頂いたところで本題に入ります。まずはTerrainに草をたくさん生やす方法についてです。
草をたくさん生やすためのTerrainの設定
Terrainに草をたくさん生やし、その密度を高めるためには設定の変更が必要です。Terrainの設定タブを開き、「ディテールの解像度」をデフォルトの「1024」から「2048」に変更しましょう。
これでより多くの草を生やせるようになります。ただしこのままだと草と草の間隔が広めでスカスカな印象になってしまいます。そこで「ディティール散布モード」をデフォルトの「Coverage Mode」から「Instance Count Mode」に変更しましょう。
これで草の密度が高くなり草がみっしりと生えるようになります。
無料アセット「Vegetation Spawner」を活用しよう
ところで、草をたくさん生やせるようになったのはいいのですがここで問題があります。それは
手作業でTerrainに草をみっしり生やすのはめちゃくちゃ面倒くさい
ということです。私は以前2km四方のTerrainに手作業で草を生やしたことがあったのですが、あまりに大変すぎて途中で嫌になってそのゲームの開発を放棄しそうになりました。
ではどうすればいいのかというと実は草を生やすのにとても便利な無料アセットがあります。それが「Vegetation Spawner」です。潔くこれを活用させて頂きましょう。
これはTerrainに木や草を自動で生やしてくれる神アセット。あまりに便利すぎて手作業で草を生やしていたのがバカバカしくなってくるレベルでとてもオススメです。
このアセットの詳しい使い方は本題ではないのでここでは省略させていただきますが、端的に言うと草を登録して生やすルールを設定し「Respawn grass」ボタンを押すだけです。草の密度(Density)を「2」とかにしておけばあっという間に密度の高い草原がTerrainに出現します。
Terrainに草をたくさん生やしてもゲームが重くなりにくくするための最適化手法
では次に、Terrainに草をたくさん生やしてもゲームが重くならないようにするための最適化手法をいくつかご紹介します。どれもTerrainの設定を少し変更するだけなのでぜひ試してみてください。
- 草はメッシュではなくビルボードにする
- 草の描画範囲を短めにする
- 「インスタンスを描画」オプションを有効にする
草はメッシュではなくビルボードにする
まず、Terrainの草にはメッシュとテクスチャのどちらかを登録することができます。しかしできればメッシュではなくテクスチャを登録しハリボテのビルボードの草を使うようにしましょう。
メッシュの草だとリアルな見た目になり見映えは格段に良くなりますが草をたくさん生やす場合はかなり描画処理が重くなってしまいます。一方でビルボードの草は少数だと貧相な見た目になりますが大量に生やすことができ、高密度で描画することでパフォーマンスをある程度確保しつつ見映えの悪さをカバーすることが可能です。なので今回のように大量に草を生やすならビルボードのほうがオススメです。
それからビルボードの草の場合は「正面をカメラの方向に自動的に向ける」という機能があるのですが、大量に草を生やすならこれはOFFにしておいたほうがいいです。というのもこの機能はパフォーマンスに影響しますし、場合によっては草が気持ち悪い動きになってしまうこともあるからです。草を大量に生やす場合は方向がバラバラでも全く気にならないので今回のような場合はこの機能は不要でしょう。
草の描画範囲を短めにする
お次はもし可能なら草の描画範囲を短めにするとパフォーマンスが向上します。描画の最大距離は「ディテール距離」スライダーで指定することが可能です。
私のゲームの場合は見映え優先で「200」としましたが、パフォーマンスが気になるなら「100」などもっと小さい値でいいと思います。
「インスタンスを描画」オプションを有効にする
最後はTerrainの「インスタンスを描画」オプションを有効にすることです。
これを有効化するとTerrainにGPUインスタンシングが適用されて描画処理の効率がよくなります。
特に今回のように草をたくさん生やしたTerrainの場合はこのオプションは効果的です。実際、私のゲームではこれを有効化するとBatchesの値が半分程度になったのでいかに描画が効率化されたかが分かります。
おわりに
以上、UnityのTerrainに草をたくさん生やすための方法をご紹介しました。この方法を使えばゲームに美しい草原を実装することができてわくわくするので、ぜひ皆さんも試してみてください。
この記事がUnityでのゲーム開発のお役に立てば幸いです。