【レポート】クライアントエンジニアが語る、ゲーム開発技術勉強会! - KLab TECH Meetup #2 -
リズムゲームのためのパフォーマンスチューニング
最後の登壇は中島さんです。
中島将浩(なかじま・まさひろ)/KLab株式会社 クライアントエンジニア。大学で数学を専攻し、のちにゲーム系の専門学校へ。2016年に新卒でKLabへ入社。音ゲー好き。
中島さんは自身が担当したリズムゲームのチューニング事例を紹介しました。
「今回のチューニングの目標は、『リズムゲームパートにおいてサポート機種の全てで60fpsをキープすること』でした。
60fpsを保つには当然のことながら、1フレームあたりの処理は16.66…msec以内に収める必要があります。ところが、初期の状態では66msecもかかっていたんです」(中島さん)
まず中島さんは「CPU編」として、チューニングの基本方針を下記の通り定めます。
- 重い処理、回数の多い処理を発見する
- 原因に関する仮設の提示
- 仮説の検証
- 対応方針の検討
この方針にそってチューニングした例として、中島さんは下記の2つを挙げました。
・Animator
「『Animator』の処理に14msecかかっていることを発見しました。まず、シーンの中に動いている必要がない『Animator』がたくさんあるので遅いと仮設を立て、検証を行いました。その結果、実に183個もの『Animator』が動作していました。
試しに全ての『Animator』の『enabled』を切ってみたところ、処理の時間は1msec以下になりました。
本番では全てを切るわけにはいきませんが、必要なものだけ動かすことで、全体として66msecかかっていたものが53msec前後まで改善しました」(中島さん)
・GC対策
「プロファイラーを見ていると、『GC.Collect』という処理でたまに1フレームだけで40msec以上かかっていたんです。これはゲームをプレイしていてもラグと感じてしまうほどのものなので、リアルタイム性の強いリズムゲームでは致命傷です。
『GC』とは解放されなかったメモリのゴミなのですが、これが発生しないように『C#』の『Ling』は初期化でのみ使ったり、作業用変数を『new』で生成しないようにしたり、『Generics』を使わないという3つの対策を実施しました」(中島さん)
続いて中島さんは、レンダリングに関連したGPU周りのチューニングを紹介します。
この「GPU編」のポイントを「とにかくサボること」だと話す中島さんは、下記2つの例を挙げました。
・ドローコールと描画パスの削減
「描画パスを削減するには必要のないカメラを切ったり、カメラの数を減らすことが必要です。低スペックな端末では、カメラが1台増えるだけで数msec持って行かれることもめずらしくありません。
例えばポップアップのカメラは基本的にオフにして、ポップアップが出てきた時だけオンに設定するようにしました。ポップアップが出ているときはポーズ状態なので、パフォーマンスはあまり気にする必要がありません。
もうひとつはドローコールの削減です。『Unity』が提供する「バッチング」という機能があります。これは複数のメッシュを統合して、一回のドローコールでまとめて描画する機能で、ドローコール削減の肝となります。
バッチングを効かせやすくするためには、同一『Material』のメッシュが連続して描画されるようにしたり、同一『Material』のテクスチャを同じアトラスに入るようにするといった工夫が有効です。
その他に、カメラの『Clear』フラグを適切に設定したり、『Render Texture』を活用することも重要です」(中島さん)
・Render Texture活用
「『Render Texture』は、描画の結果を画面ではなくテクスチャに書き込む機能です。これはテクスチャですから、別のポリゴンに貼り付けて再利用することができるんです。
全く同じ結果になる描画パスは『Render Texture』を活用することで、2フレーム目以降に描画パスもドローコールも削減することが可能です」(中島さん)
最後に中島さんは、タップの入力からタップ音の再生までをできる限り短くした試みの意図について、
「快適なプレイ体験を目指して音声の再生フローを検証しました。『InputManager』では遅延が起こりうることがわかったので、プラグインを作成して改善しています。
これは実行速度には関係ありませんが、自分でもデバック中にプレイ体験がよくなっているのを実感しています。チューニングとは処理動作を向上させることだけではないという知見が得られました」とまとめました。
懇親会の模様
5名の講演が終了した後は懇親会です!
ピザをつまみにリラックスした雰囲気で時間が流れます。
スタートから講演終了まで2時間ノンストップでしたが、参加者のみなさんはまだまだ興味が尽きないようで、懇親会中も多くの参加者が登壇者に質問をなげかけていました。
第3回の開催も楽しみにお待ちしています!