ゲーム動作が重い際の対処法†
ゲームの動作が重くなる原因は、ゲームエンジン(この場合Bakin)の特性や実行するPC環境、ゲーム内の素材の作りといった複数の要素が複雑に絡み合っているため、特定が難しい場合があります。
またグラフィックボードのドライバーなどが影響する可能性もあります。(!)ドライバーは常に最新の状態に更新することをお勧めします。
そして、ゲームの作り方によっても動作が重くなることがあります。
本項では、ゲーム作成時に考慮すべき工夫についてご紹介します。
ただし、「これをすれば確実に改善する」という特効薬はありません。
「このゲームにおいて大事なものは何か」を把握し、地道に調整や修正を重ねることが重要です。
「ゲーム動作が重い」とは†
「ゲーム動作が重い」という場合、主に以下の2つのパターンがあり、それぞれ原因と対処法が異なります。
- ゲーム処理の遅延
描画がスムーズでない、操作がカクつくなどのケースは、ゲーム処理に時間がかかっています。
主にCPUやGPUに高い負荷がかかっている状態であり、これらの性能が直接的な影響を与えます。
- ローディングの遅延
起動に時間がかかる、マップ間のローディングが長いなどのケースは、ローディングに時間がかかっています。
主にストレージやメモリに負荷がかかっている状態であり、ストレージがHDDであったり、メモリ容量が不足していると、ローディングに時間がかかりやすくなります。
考え方の基本†
- 不要なものを削減・間引く=重要な要素を見極める
以下の要素を削減・間引くことで、負荷を軽減できます。
・画面にほとんど表示されないもの、遠くにしか表示されないもの、小さくしか表示されないもの
・ゲーム中、プレイヤーが接触しないもの
・頻繁なチェックが必要ないイベント
つまり、「ゲームプレイにおいて重要な要素は何か」を見極め、それ以外の要素を減らすことが基本となります。
- まとめられるものはまとめる
以下の要素は、まとめて1つのアセットにすることで負荷を軽減できます。
例えば
・「テーブルの上に散らばる小物」や「多数の茂み」など、個別に配置する必要がないものは、モデルを統合する。
・ウィンドウの「枠」と「装飾」など、個別に画像として管理する必要がないものは、1つの画像にまとめ、レイアウトパーツを削減する。
これらの作業は、グラフィックやモデルの加工を伴うため、やや高度な作業となります。
しかし、例えばVroid StudioからVRMモデルをエクスポートする際にマテリアル数を適切な数に調整する、といった工夫は出来るかと思います。
そしてゲーム制作中、常にこれらの点を考慮しながら作業するのは難しいかもしれません。
カメラの動きやオブジェクトの配置が変われば、「何が不要か」「何がまとめられるか」も変化するためです。
しかし、ゲーム内容が概ね固まった段階で、負荷軽減のためにゲームの作りの見直しを行うことをお勧めします。
負荷軽減を行う際には、パフォーマンスメーターをご活用ください。
- 本当に見直しが必要か?
負荷の見直しをする際に、まずゲームをプレイしてフレームレートがどの程度出ているかご確認ください。
ご自身が考えられているフレームレートと同等の速度が出ているならば、見直し作業をする必要はないかもしれません。
見直しに伴う修正作業の手間と見直した結果による効果を天秤にかけて作業時間をどう振り分けるのか検討してください。
ミニメーターの「FPS」か、デバッグウィンドウの右肩に表示されているフレームレート表示を確認することをお勧めします。
マップ上の配置物の見直し†
- 不要な物の削減
画面に表示されないオブジェクトは削除しましょう。また、表示されるとしても不要と思われるオブジェクトは削減しましょう。
例えば、「茂み」のスタンプを多数配置している箇所がある場合は、間引いてみることを検討すると良いでしょう。
(!)サブグラフィックを使用して複数のスタンプを1つのスタンプにまとめても、負荷は軽減されません。
- パーティクルのPrewarm設定の見直し
パーティクルのPrewarmは、マップ読み込み時に設定された時間分の処理を実行します。
例えば、5秒と設定した場合、5秒 x 60フレーム = 300回分の処理が実行されます。
この値を適切に設定することで、マップ移動時の負荷を軽減できます。
Prewarmについては、パーティクルをご覧ください。
- 不要なイベントの物体化
「イベント」のコリジョンは、「物体」のコリジョンよりも負荷が高くなります。不要なイベントは物体に変更することで負荷を下げることができます。
マップ上で侵入してほしくない箇所を塞ぐ際、コリジョンのみを持つ透明なイベントを多数配置している場合は、以下を試してください。
透明なFBXモデルを作成し、リソース>3Dスタンプでグラフィックにそのモデルを指定したスタンプを作成し、壁として配置する。
リソース>地形のプロパティーで「通行可能」をNOに設定した地形を作成し、侵入してほしくない箇所の地形を置き換える。
通行不可の地形の上に配置された3Dスタンプのプロパティーで、「通行不可地形を無視する」がONになっていると、その物体の上を通行可能になるため注意してください。
- 「物体」のコリジョンを簡易なものに変更する
リソース>3Dスタンプのプロパティーで、簡易コリジョン設定が「Mesh」になっているものを「Box」などの単純な形状に変更します。
プロジェクトを新規作成した際に含まれる3Dスタンプの中には、「Mesh」設定になっているものが多くあります。
これらのスタンプには、簡素なコリジョン用モデルが別途割り当てられていますが、より単純な形状で問題ない場合も多いと考えられます。
その場合は、必要に応じてコリジョンを「Box」などの簡易な形状に変更してください。
リソース>物理設定で単純なコリジョンを組み合わせたコリジョン用モデルを作成することもできます。
作成したモデルは、リソース>3Dスタンプで「正確なコリジョン設定」をONにした上で割り当ててください。
- 「コリジョン不要な場所に配置する「物体」のコリジョンを削除する
例えば、一本道の両脇にプレイヤーが侵入できない森が広がっている風景の「木々」や、街の通りから奥にある風景として配置されている「建物」などは、コリジョンが不要です。
このような場所には、コリジョンのない「物体」を用意して配置します。
リソース>3Dスタンプで「正確なコリジョン設定」をONにした上でコリジョンモデルを割り当てないことで、コリジョンのない「物体」を作成できます。
- レンダリング設定の見直し
ポストエフェクトは描画負荷が高いため、レンダリング設定を見直すことで負荷を軽減できる可能性があります。
レンダリング設定の見直しには、プロファイラーをご活用ください。
- マップサイズの削減
マップサイズが不必要に大きくないか検討すると良いでしょう。
マップが広くなると、マップに配置するオブジェクトも多くなりがちです。
- カメラと配置物の位置調整
カメラワークや壁、遮蔽物の位置を調整して、画面に一度に表示されるオブジェクトを減らすことができないか検討してください。
イベントの見直し†
- 衝突設定の最適化
イベントシートの衝突判定設定で「プレイヤーとぶつかる」「他のイベントとぶつかる」を有効にしていると、物理演算が必要となり処理負荷が増加します。
本当に衝突判定が必要なイベントか、再検討することをお勧めします。
例えば、プレイヤー以外が接触しないスイッチイベントは、「他のイベントとぶつかる」を無効にすべきです。
また、イベントシートを分割し、条件によって衝突判定の有効/無効を切り替えることも有効です。
- 並列イベントの最適化
並列実行イベントや、並列して繰り返し実行されるイベントは、毎フレーム動作するため、多数存在すると処理負荷が継続的に発生します。
例えば、プレイヤーに特定の「状態」が付与されているかをチェックする並列イベントは、毎フレームチェックする必要はないと考えられます。
このようなイベントの冒頭に「指定した時間待つ」パネルを「0秒」で1つ配置することで、チェック頻度を2フレームに1回に減らすことができます。
また、イベント条件を適切に設定することで、同時に動作する並列イベントの数を削減することも可能です。
レイアウトの見直し†
- レイアウトパーツの削減
例えば、ウィンドウを「枠」「装飾A」「装飾B」の3つのレイアウトパーツに分割している場合、画像素材を1つに統合して1つのレイアウトパーツで表示することで、負荷を軽減できます。
また、1つの画面に表示する情報量が適切であるか検討することも有効です。
プロファイラーの「メニュー(UI)更新」の項目を参照してください。
イベントを使用して複数のレイアウトを同時に表示すると、表示するレイアウトパーツの数が増加することに注意して調整してください。
- 特殊書式の削減
特殊書式を使用するパーツは、処理負荷が高くなります。
例えば、30個のアイテムを一度に表示するアイテムリストを、10個ずつ3ページに分割するなどの工夫により、負荷を軽減できます。
素材の見直し†
- 内部フォーマットの採用
ゲーム定義>プロジェクト設定で「内部フォーマットを使用する」を有効にすると、テクスチャやモデルがBakinに最適化された形式に変換されます。
この機能により、ローディング時の負荷を軽減できます。
詳しくは、プロジェクト設定>内部フォーマットの設定を参照してください。
- 使用する素材の軽量化
画面内で小さくしか表示されないオブジェクトに大きなテクスチャを使用していたり、多数のメッシュを使用している場合は、素材自体を調整し、適切なサイズに変更することで負荷を軽減できます。
- マテリアルの統合
1つのモデルに複数のマテリアルが設定されている場合、それらを統合して数を減らすことで、負荷を軽減できます。
- 透明部分の削減
透明・半透明なオブジェクトは、描画負荷が増加します。シェーダーの見直しや、画像の余白を減らすことで負荷を軽減できます。
詳しくは、プロファイラーの「半透明マテリアル描画」の項目を参照してください。
- 画像の統合
複数のパーツに分割されている画像を1つの画像に統合することで、レイアウトパーツや「イメージを表示する」パネルを減らし、負荷を軽減できます。