コイン的なものの実装や負荷検証など [ゲーム開発ログ 2020-11-09]

2020-11-09

大胆にカリング

  • モバイル向けのゲームで、中堅 Android でもそこそこのフレームレートが出るようにしたい
  • 画面内の描画するオブジェクト数が増えた時の描画負荷はネックになりやすい
  • カメラの描画距離を短め(50 m くらい)にして、大胆にカリングしてしまうことにした
  • 単に描画距離を短くするだけだと消え方が不格好なので、シェーダに手を入れてフッと消える感じに:

コインっぽいやつの実装(途中)

  • マップ歩きながらコイン的なものを拾っていきたい
  • とりあえず雰囲気だけ味わおうと思ってコインっぽいオブジェクトを雑に物理で置いてみた
  • 拾う処理を入れてないので、拾おうとするとこうなってウケる:
  • ピックアップアイテムってよく回ってるよね
    • どっち回りが多数派とかあるのかな…

コインのシェーダ

  • 標準のシェーダのロジックで、スペキュラとブルームでわりとそれらしい見た目になるのでこれでいいかな感
  • スペキュラの ON / OFF で SRP Batcher が切れるのには注意

シェーダや GameObject 数の負荷検証

  • 今のところまともな Android や iOS 端末では FPS 30 以上安定
    • iOS では普通に 60 出る、Android は DPI に気を使えば 60 近く出るという感じ
  • でもショボめの中堅 Android だとまだ FPS 20 台になるようなシーンがある
  • 中堅 Android (2017〜2018 頃に 4 万円くらいで売ってた Android)でも FPS 30 くらいは出るようにしておきたい
  • あと iOS も FPS 60 で動かすと(他の洗練されたゲームに比べて)ちょっと端末が熱持つ感じもあるので、 まだ負荷改善の余地がありそう

  • GameObject 数を変えたり、シェーダだけ差し替えたりしたシーンを色々作って実機で FPS を比較
  • URP の SRP Batcher を効かせるためにシェーダを 1 種類にまとめたりしていたのだが、 端末によっては Batch の恩恵よりもシェーダが複雑になって重くなることの負荷の方が大きい模様
  • シェーダを 1 種類にすることにこだわらず、地面とかの塗り面積が大きい部分には軽量のシェーダを当てる方が GPU 弱めの端末ではパフォーマンス稼げそう

広いマップ作って走ってみる

  • Scene 上の GameObject 数が増えるだけでも重くなるものかと思ってたんだけど、 ためしに素朴に広いマップを作って実機で動かしてみたら、狭いマップと比べて特に FPS が変わらなかった
    • (カメラの描画距離は短くしている前提)
    • ロード時間とかには影響するだろうけど、ランタイムの負荷がそんなに変わらなかったのはちょっと意外
  • ↑ の動画は単に全てのオブジェクトを Scene に置いてるだけで、動的に生成 / 消去とかはしていない
  • 静的オブジェクトに関しては素朴に広めのマップ作っても大丈夫そうだな。気が楽になった
    • えらいぞ Unity