見出し画像

ゲームでの処理の最適化について

ゲームは短い時間に多くの処理をしないといけません

ゲームでは秒間60フレーム(60FPS)や30フレーム(30FPS)と言った形で、多くの処理を 1/60秒や1/30秒の間に収めなければなりません。
もし時間内に収まらず 0.1秒もかかってしまった場合、秒間に10フレームしか出ないことになります。
そうすると、ゲーム画面がカクついているといった形でゲームのユーザー体験は著しく落ちます。

※フレームの概念については桜井さんのコチラの動画がわかりやすいです

他にもメモリ使用量などにも気をつけないと、アプリケーションがメモリ不足で落ちてしまい、ゲームを進行できないなどの問題に陥ってしまいます。
またロード時間が長いと、ユーザーの体験は良くないので、長すぎるロード時間も何とかしたいものです。

そういった形で処理速度が間に合っていない・ロードが重い・メモリが足りないなどの状況では、ゲームを世に出すことが難しいので、最適化という形でフレームレートの向上やメモリ使用量の削減、ロード時間の短縮をしなければなりません。

■継続的に実機上で確認を・・・

この処理速度が間に合わない・メモリが足りないという問題は、作業用のPC環境で作っていると中々表面化しません。
しかし、スマホ向けのゲームをいざスマホで動かそうとしたら動かない、スペックの低いスマホだと動かない・・・WebGLにしたら…処理が重くて動かない…
こんなことが実際にプロジェクトの最後の方で起きたりする現場もあります。

このままではゲームを完成させられないので、開発の最後の方で問題になっているところを対処しようという話にもなったりしますが・・・

開発の最後でなんとかしようとしても、
「3Dのデータを作り直ししないとそもそもどうしようもない・・・」
「プログラムを大きく変えないと難しい」
などなど大きな問題になります。
特に、目標としている処理速度・メモリの使用量と現実が大きくかけ離れているほど大きな問題となります。

実例:

※作り込みをしまくった花瓶が描画負荷がとても高い状況で、せっかく作り込んだ内容を捨てないと、どうしようもないなど大問題になっているケースも実際あります・・・。

そういう状況に陥らないためにも定期的にターゲット端末上で動かして、処理速度やメモリ使用量に問題がないかを定期的に確認する必要があります。

実機上でパフォーマンス等が問題になっていないうちは気にする必要はないですが、問題になり始めたら対処を考えておかないといけません。
「あとでどうにかする」は、大体の場合で「あとで地獄を見る」もしくは「どうにもならない…」となります…。

■手を動かす前にボトルネックを知ろう

最適化を行うときに、闇雲に手を動かす前に現状を知ることはとても大切です。

これには以下のような理由があります。
・まず現状を知らないまま弄っても、手を動かした結果がどの程度出たのか全く把握できません。最悪結果が悪い場合でも気づけない可能性もあり得ます。
・処理時間が短い所をどんなに早くしても効果が限定的。
 0.1ミリ秒かかっている処理を半分に縮めても 0.05ミリ秒ですが、4ミリ秒かかっている処理を 25%でも縮めれば1ミリ秒早くなる

イメージとしては、貯金をするためには家計簿をつけるべし‥と言うのに近い感覚です。何故か貯金が出来ないんだよね‥と言う人いると思います。(私もそうです)
毎月の食費に2万円しかかけておらず、趣味に10万円突っ込んでいるみたいに、まずはお金の使い方を把握しましょう。それから、それからどこ減らそう…。食費かなり少ないのに食費削ってもあまり効果は出ません…。

■劇的な魔法は基本ない

最適化をしていると…
最初の内は、大きな無駄な部分を見つけることが出来て劇的な処理速度やメモリ使用量の削減と言った効果が得られます…。
また無駄以外にも適切ではないアルゴリズム・データ構造だったものを見直すことでもそういった効果が見られます。

それで目標となる数値を達成できると良いですが…。大体そうはうまくいきません。

そして、大きいものをつぶしたあとは、そこまで劇的な改善はそうそうありません。あとはひたすら地道に削っていく作業です。泥試合です。

まとめ

・定期的にターゲットにしている実機上で動かして確認しましょう
・手を動かす前にProfilingしてボトルネックを調べてから対策しましょう
・魔法みたいなのに期待してはいけません、基本泥試合です

と言う事だけ言いたかくて、本noteを書きました。
あと、Android端末って本当にピンキリなんで、ちゃんと対象端末が手元にあると良いです。↓参考


この記事が気に入ったらサポートをしてみませんか?