sunarit’s blog

Unity開発の備忘録

Horizon[ON]

しばらく前にセールで購入していた「Horizon[ON](Asset Store)」を使用してみました。
このHorizon[ON]で何ができるのかと言うと、(若干語弊がありますが)地平線を作れるツールです。FPS系のレベルデザインにおいて、悩みどころのひとつが地平線の表現です。家の中や街の中など、壁やビル等のオブジェクトで囲めるところであればあまり問題にはなりませんが、Terrainで表現するような自然景観系では地平線をどう表現するかが問題になります。

解決策として、
1) 高い山で囲んで遠くまで見通せないようにする
2) プレイヤーの動ける範囲 + 視界よりも巨大な地形を作成する
3) ローポリ化した巨大地形を置き、背景として使用する
4) カメラ設定とFog設定で地平線をぼかす
5) Skyboxに直接描く、テクスチャーを置く
6) 距離に応じてブラーをかける
などなど色々な手法があります。
ただ、モバイルをターゲットにした場合、2)の巨大な地形を作成したり、6)のブラーをかけたりするのはスペック的に不利のため、あまり現実的とは言えません。また、1)の高い山などで視線を制限するのもレベルデザインの固定化につながりますし、4)のカメラ設定のClipping Planesの値を調整するのも、小さくしすぎると不自然に見えてしまいます。5)のテクスチャー化ですが、いわゆる書き割りなので上手く遠近感を出して描かないとやはり不自然に見えてしまいます。そして、残った3)のローポリ化した巨大地形を置く、を簡単に行ってくれるのがHorizon[ON]です。

下の画像はGaiaで作成したTerrainです。Terrainサイズは 2048、ほぼ中央にカメラを置き、Clipping Planes - Farは3,000です。軽量化のために、Terrainはローポリ化しています。完全に地形の端が見えています。低い場所のみプレイヤーが移動するなら問題ありませんが、高い所に登れるようだと、このように端が見えてしまいます。
f:id:sunarit:20151221044907p:plain

そして、次の下の画像は上のシーンにHorizon[ON]を適用してみた結果です。なんとなくいい感じになりましたが、Clipping Planes - Farの値が小さいために、まだ地形の端が切り取られたように見えている箇所があります。
f:id:sunarit:20151221045315p:plain

Clipping Planes - Farを16,000にしたのが下の画像です。
f:id:sunarit:20151221045100p:plain

こんな感じで地平線を簡単に作りだせるHorizon[ON]ですが、気になるのはパフォーマンスです。
実際にiPhone6上で動作させ、周辺を歩き回った際のXcode上での平均CPU使用率は、
Terrain(ローポリ化後) + FPSキャラクター: 約33%
Terrain(ローポリ化後) + Horizon[ON] + FPSキャラクター: 約35%
という感じでした。誤差範囲かもと思わせるくらい、Horizon[ON]は軽いものでした。今回はシェーダーや(Terrainのローポリ化以外の)メッシュの最適化は行っていませんので、さらに調整すればCPU使用率30%を切るか切らないかくらいまで下げることが可能かもしれません。
余談ですが、ローポリ化していないTerrainでのCPU使用率は以下のとおりでした。
Terrain(ローポリ化前) + FPSキャラクター: 約71%
Terrain(ローポリ化前) + Horizon[ON] + FPSキャラクター: 約73%
Horizon[ON]がCPUに与えている影響はかなり低いということが改めて分かります。

レベルデザイン時に地平線をどうするかでお悩みの方にオススメです。

追記: 偶然にも本日(12/22)の半額セールになってます。興味のある方はお早めに!

[Unity5対応]
Asset Store