Upgrade to Pro — share decks privately, control downloads, hide ads and more …

『プロジェクトセカイ カラフルステージ! feat. 初音ミク』3周年大型アップデートでのパフ...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for CyberAgent CyberAgent PRO
March 08, 2024
750

『プロジェクトセカイ カラフルステージ! feat. 初音ミク』3周年大型アップデートでのパフォーマンス最適化事例【CAGC2024】

『プロジェクトセカイ カラフルステージ! feat. 初音ミク』は2023年9月で3周年を迎えました。
3周年当日には、キャラクターが年齢を重ね「進級」したりアプリ全体のリニューアルを行うなど、リリース後最大規模のアップデートを行いました。
本セッションでは、3年間運用したタイトルの超大型アップデートをリリースするために行ったパフォーマンスの最適化に関して、ゲーム全体のUI刷新によるリニューアルと3Dグラフィックスのアップデートに関するトピックを中心に具体的な事例を紹介します。

https://cagc.cyberagent.co.jp/2024/session/index.html?id=nyp3j6dtd8

© SEGA/© CP/© CFM
Copyright © CyberAgent, Inc.

Avatar for CyberAgent

CyberAgent PRO

March 08, 2024
Tweet

More Decks by CyberAgent

Transcript

  1. 3 プロジェクトセカイ カラフルステージ! feat. 初音ミク ユーザー数 1000万人超 X(旧Twitter) フォロワー数 200万人

    公式YouTube チャンネル 登録者数 156万人 • 『初音ミク』と『人間』が織りなす新しい 物語・新しい展開 • 2D・3D・Live2D−− それぞれ描かれる魅力的な キャラクターたち • VOCALOID曲を中心に有名楽曲を多数収録した リズムゲーム • 数多の著名クリエイターから提供される楽曲・ クリエイティブ 魅力的なキャラクター(シナリオ・イラスト)× リズムゲーム
  2. 8 最適化をおこなう理由 快適に遊べるように最適化が必要! • ほぼ全てのモデルをアップデート • 全てのMVをアップデート • 全ての画面のUIをアップデート •

    キャラシェーダ、ポストプロセスの 開発 3Dアップデート UIリニューアル • グラフィックス表現の向上 大量のアセット改修 アセット管理が適切におこなわれていない ⇒アプリクラッシュに繋がる 処理負荷の増加 処理負荷を軽減していない ⇒ゲームが重くUXに影響
  3. 12 アセットのロード、アンロード処理 スパイクの軽減 ロード アンロード ・インゲームで扱うアセットを  全てロードする ・GC処理は停止する ・オブジェクトの参照関係を  事前に解決する

    ・インゲームに関わる処理のみ実行 ・インゲーム中のアセットは  すべて破棄 ・GCの再開 背景 演出が増え、MVごとに使用するアセットが増加した 対処 • 必要なアセットはMV再生前に事前ロードする • インゲーム中はGC止める • リズムゲーム中にロードやGCによる解放処理でスパイクが発生する可能性がある
  4. 14 演出機能の改修(DoF) “プロジェクトセカイ ワンダショちゃんねる 3周年スペシャル” より抜粋 定常負荷の削減 背景 前景が綺麗にボケてほしい、カメラ構造に従ったパラメータで調整したい ・Unity標準のBokeh

    DoFは採用できず(ミドル端末で60fps安定⇒40fpsまで低下) 対処 カスタムした、GaussianベースのDoF処理を採用 ⇒ 60fps安定することを確認 実装の詳細は Colorful Palette Advent Calendarに記載しています。
  5. 15 レンズフレア(新機能)の最適化 背景 オブジェクトとの遮蔽判定をもつフレアを表現したい • フレアごとの遮蔽判定処理、半透明描画をおこなう必要がある レンズフレアの最適化前  メッシュ...CPUで1フレアごとにMeshを生成し、Dynamic BatchingによりMeshを結合  遮蔽判定...Raycastを使用し、1フレアごとにRayをとばして判定する

    対処 ・深度バッファを使用した遮蔽判定により  Raycastで判定するための大量の  Collider判定処理が不要に ・DrawProceduralを使用し、  Meshの生成、結合処理を削減 ・ComputeShaderを用い、  RaycastによるCPU負荷を削減 定常負荷の削減 NEO / 星乃一歌 × 花里みのり × 小豆沢こはね × 天馬司 × 宵崎奏 × 初音ミク【3DMV】 参考:「IDOLY PRIDE」における描画最適化術
  6. 20 ShaderVariantの見直し メモリ使用量の削減 背景 ランタイム処理最適化のために機能ごとのShaderVariantを 定義していたが、量が多く、多くのメモリを消費していた ShaderVariantについて ・Shader内にKeywordを定義することで、  Keyword有効無効時の処理分岐を考慮した  Shaderを1ファイル内に記述することができる

    ・Keyword有効無効を考慮した全ての組み合わせを  網羅するShaderProgramがプリコンパイルされる  ため、Keywordを追加する度に指数関数的に消費  メモリが増加する 開発中のポストプロセスシェーダ消費メモリ ShaderVariant Keywordの定義と実行例 リズムゲーム中スパイクを発生させないように 全ての組み合わせをプリコンパイルする 7個のShaderKeywordを定義すると、2^7=128パターンのShaderファイルをコンパイルする必要がある 10個のShaderKeyword定義 … 2^10=1024パターンに...
  7. 21 ShaderVariantの見直し 対処 ShaderVariantを削減する • 計算負荷の低い処理は常時処理する • 分岐条件がUniform変数の場合、通常のif文で処理する(Static Uniform Branch)

    メモリ使用量の削減 ↓Variant削減後 最適化後のポストプロセスシェーダ消費メモリ 210.3MB ⇒ 471.7KBに削減 全てのピクセル処理で同じ分 岐を通る場合、分岐コストは 抑えられる コンパイル時分岐考慮済みの Shaderを実行するため、ラン タイム中の分岐コストは0 ピクセルごとに異なる分岐を通る場合、 分岐コストは高い
  8. 23 インゲーム中のシェーダのコンパイル回避 スパイクの軽減 対処 MVロード時ShaderVariant.Warmupによるプリコンパイルをおこなう • Keywordはマテリアル単位で定義し、Global定義は使用しない • インゲーム中使用するShaderと全ての組み合わせをShaderVariantCollectionに登録 MV再生開始

    ShaderName Normal <no keywords> Normal A Normal B Normal A B Keyword定義したシェーダ 全てのシェーダ、全ての Keywordの組み合わせを 登録する 楽曲選択 ロード ShaderVariantCollection.Warmup で登録した全組み合わせに対する Shaderのプリコンパイルをおこなう
  9. 24 圧縮形式 背景 1MVにロードするアセットが増え、 消費メモリに懸念が生じた 対処 役割ごとにテクスチャの圧縮サイズ(ASTC)を設定  実機上の見た目を最優先に考慮しつつ、  用途によって圧縮倍率を設定 例:

    Shaderでの計算処理用マップ…ASTC4x4 キャラクターやエフェクトのカラーマップ…ASTC6x6 メモリ使用量の削減 https://developer.nvidia.com/astc-texture-compression-for-game-assets NVIDIAが公開している 圧縮形式、サイズごとの視覚的評価