BATTROPICAの海を、遠くまで見渡せる景色にしたい。 そう思って表示する範囲を広げると、今度は描画の負荷が気になってきました。
そこで考えたのが、こんな方法です。
世界を丸くして、遠くの景色が水平線の向こうに隠れるようにすれば、見た目を良くしながら負荷も下げられないか?
今回は、平面だった海と島を、球面に曲げて表示するようにした開発の話です。
海の向こうに島があり、町があり、その先にも別の島がある。島を巡るゲームなので、そんな広がりを感じられる景色にしたいと思っています。
ただ、遠くの地形や建物まで表示しようとすると、そのぶん描画するものが増えます。表示距離を短くすれば負荷を抑えられますが、景色が途中で切れたり、近づいたときに急に現れたりする見え方も気になります。
遠くをどこまで描くかだけでなく、遠くがどう見えなくなるかも考えてみることにしました。
海と島を球面に沿って曲げると、遠くの地形ほど下がって見えるようになります。距離が離れれば、海岸や低い建物が手前の海に隠れ、高い部分だけが残る。水平線の向こうに、まだ世界が続いているような見え方を狙いました。
まずは、平面表示の全景です。
こちらが、球面表示にした全景です。
上の2枚は、現在の開発版でカメラの位置・向き・画角と場面を固定し、球面表示の有無だけを切り替えて撮影しています。
丸みの強さも調整し、現在は半径3,600mの設定にしています。高い場所から見渡す紹介シーンでは丸みが分かりやすく、船に近い目線では、もう少し穏やかな見え方になります。
今回変えたのは、画面に描くときの見た目です。
移動、当たり判定、海図、セーブデータに使う座標は、これまでの平面のままにしています。世界全体を、裏側まで歩いて一周できる球体に作り直したわけではありません。
一方で、見た目だけを曲げると、照準や頭上の吹き出しがずれてしまいます。そこで、画面上の目印やクリック位置も、曲げた景色に合うように調整しました。
現在の開発版では、航海中だけでなく、島の屋外や島を紹介する全景カットにも使っています。
途中では、島の地面が海に沈んで見える問題も出ました。
地面を大きな三角形で作っていたため、頂点を曲げても、その間は直線で結ばれます。一方、海面は細かく分割されているので、地面と海面の曲がり方に差ができてしまいました。
これは、描画用の地面を細かく分割し、曲面に沿えるようにして修正しました。島の輪郭や高さ、歩ける場所は変えずに、表示のずれを直しています。
近くでは透けていてほしい海も、水平線付近で同じように透明だと、隠したい町が水越しに見えてしまいます。浅瀬の透明感を残しつつ、遠景をきちんと隠すための調整も必要でした。
負荷を下げられないか、というのが出発点でしたが、球面にするだけで自動的に軽くなるわけではありませんでした。
画面で隠れたものの処理が、すべて省かれるとは限りません。さらに、景色を曲げたり、その表示を管理したりする処理が加わります。実際に測ると、球面表示の管理にも負荷がかかっていました。
そこで、毎フレーム調べる対象を、表示中のものがある移動グループに絞るなど、不要な更新を減らしました。球面表示を入れた当初からは改善できていますが、現時点で「平面表示より軽くなった」と言える結果にはなっていません。
見えなくなる景色の処理をどこまで省けるかと、曲げるために増える処理の両方を見る必要があります。
こちらは、現在の設定で撮影した航海の景色です。撮影モードでUIを隠しています。
負荷の悩みから始まった変更ですが、水平線ができたことで、海を進んでいるときの景色にも変化が出てきました。
見えるところと隠れるところを考えながら、広い海を感じられる景色と遊びやすさを両立できるよう、引き続き調整していきます。
フォローすると、開発ログや新作ゲームの公開が通知されます