「不気味かわいい」フォトサファリゲームは、快適に遊べてこそ真価を発揮します。本記事では、Penko Park を 14 FPS から滑らかな 60 FPS へと引き上げつつ、世界観とビジュアルを損なわずに最適化した道のりを詳しく解説します。

私について

こんにちは、Ghostbutter LLC(東京拠点)の開発者兼アーティスト、Konstantin と申します。
未知の世界を探検し、恐怖に立ち向かうゲームづくりに情熱を注いでいます。

PC 版で幾つもの賞を受賞した Penko Park ですが、2022 年に挑んだ Switch への移植は試練の連続でした。

最初のビルド、最初のクラッシュ

Nintendoが数日で開発者申請を承認してくれた時は興奮しましたが、厳しい現実が待っていました:ハードウェアが到着してすべてが接続されると、最初のSwitch版をビルドし、実行ボタンを押すと、ゲームは即座にクラッシュしました。メモリ不足エラー、不足するシェーダー、タイトル画面前にハードフォルト。

クラッシュログとプロファイラートレースに埋もれて1週間過ごしました。最終的に、ゲームは最初のレベルに到達しました。進歩ですが、カウンターは14 FPSを示し、視覚的には悲惨な状態でした。

Switchハードウェアでの最初の成功したブート Penko Parkが初めて正常にブートした瞬間 — シェーダー設定ミスによる視覚的グリッチで痛々しい14 FPSで動作

真のモンスターをプロファイリング

ゲームをブートさせるのは簡単な部分でした。本当の作業は、パフォーマンスが完全に悪いと気づいた時に始まりました。推測ではなく数字が必要だったので、数ヶ月間エンジンのGPUプロファイラー、オーバードロー表示、フレームデバッガーの中で生活しました。データは、私たちがほぼ完全にGPU制限であることを示しました — フレームあたり約45 ms — CPUには余裕がありました。

キャプチャが明らかにしたもの:

アルファフォリッジ — 私たちの木は主に半透明のクワッド/スプライトの束でした。それらすべての重複ピクセルは総GPU時間の約3分の1を消費していました。

重いオーバードロー可視化 Unityのオーバードロー表示がパフォーマンスの悪夢を明らかに — 透明なフォリッジ要素からの大量のピクセルオーバードロー

地形の草 — Unityの地形システムは数万の小さな透明な刃を生成しました。大量のオーバードローとドローコールオーバーヘッド。

デカールオーバードロー地獄 Unityエディター表示で地形の草とデカール要素の圧倒的な密度を示す — パフォーマンス問題を引き起こす数千の透明オブジェクト

描画距離 — レール上のカメラはプレイヤーの視界外の遠くの風景を描画していました。ほとんどのPCでは無視できる影響ですが、コンソールでは致命的でした。

ボリュメトリックフォグと動的デカール — 美しいエフェクトですが、GPUにフレームあたり多すぎる作業を要求していました。

テクスチャ形式 — 非圧縮または不適切に圧縮されたテクスチャがメモリを埋め、フレームごとにキャッシュをフラッシュしていました。

パフォーマンスの悪役が特定され、ついに最適化のロードマップができました。

グラフィックス探検

フォリッジと木

半透明のスプライトベースの葉のビルボードを、ベイクされた法線を持つ低ポリの不透明な葉メッシュに変換しました。これによりパフォーマンスが劇的に改善されました。

初期の木の最適化作業 透明なスプライトベースの木を最適化された不透明メッシュジオメトリに変換する初期プロトタイプ

完成した最適化された木 最終的な最適化された木メッシュ — 視覚的品質を維持しながら高価な透明度オーバードローを排除

地形と草

Unityの組み込み地形はボトルネックで、避けられない大きなベースライン性能ペナルティがありました。そこで、高さフィールドを静的メッシュにベイクし、オン/オフできるチャンクにカットして置き換えました。

地形メッシュ変換 Unity地形システムを最適化された静的メッシュに変換する作業中の状態

木の再作業により、地形の詳細を最適化する同じ戦略を使用できました:大量に使用される透明な草のクワッドをすべて、インスタンス化された不透明メッシュに置き換えました。

植生最適化の進行 植生最適化の3段階の進行:高価な透明スプライト(左)からワイヤーフレーム分析(中央)から最終的な最適化された不透明ジオメトリ(右)

ポストプロセッシング

私たちのポストプロセッシングエフェクトの多く、例えばブルームやフォグも性能に悪く、一部のエリアで60 FPSを下回る原因となっていました。そこで解決策を見つける必要がありました:

  • マルチパスではなく、よりシンプルで軽量なブルームを使用
  • ボリュメトリックフォグをシングルパスシェーダーに書き直し、コストなしで雰囲気を保持
  • デカールをアトラス化されたテクスチャにベイクしてVRAM使用量を最小化

結果:GPUフレーム時間は、性能と美学のバランスを慎重に見つけることでさらに改善されました。

CPU改善

GPUが最も大きな問題でしたが、プロセッサー側でも可能な限りFPSを向上させたいと思いました。ゲームプレイは既に比較的高速なECS内で動作していましたが、簡単な監査で無駄なサイクルが明らかになりました:

非重要システムをスロットリング。 環境音のキューやシンプルなAIチェックなどのシステムは、毎フレームではなく低い更新レートに移動されました。

プレイヤー制御のトリガーボックスで巨大なレベルの部分をトグル。 各レベルにプレイヤーが見ている場所や移動に基づいて、ジオメトリ、エフェクト、システムのセクション全体をアクティブ化/非アクティブ化する不可視のトリガーボリュームを配置しました。これにより、現在のゲームプレイの瞬間に実際に関連するものだけを処理しました。

トリガー最適化システム 性能最適化に使用されるトリガーボリュームネットワークを示すレベルエディター表示

オブジェクトプーリングを拡張。 弾丸、パーティクルエミッター、UIポップアップは現在リサイクルし、ガベージコレクションを静かに保つために割り当てません。

これらの調整後、メインスレッドは最も重いシーンでも快適に5 ms未満を維持しました。

より効率的な写真アルバム

Penko Parkはプレイヤーがアルバムに配置するすべてのスナップショットを保存します。それはセーブゲームあたり数百の画像です。スクリーンショットをオフスレッドで圧縮し、カスタムコンテナにパックし、バッチで非同期に書き込むスレッド化パイプラインを構築しました。セーブとロード時間は80パーセント減少し、ファイルサイズはSwitchで問題を引き起こさないほど縮小されました。

Penko Park写真アルバムシステム 数百のプレイヤースクリーンショットを示すゲーム内写真アルバム — それぞれが効率的な圧縮とストレージ最適化を必要とする

パンデミック中の移植

移植の途中でベルリンから東京に移動しました — ビザ書類と段ボール箱に包まれたパンデミック移住。8時間のタイムゾーンシフトにより、ヨーロッパが目覚める前の静かな朝に最適化を行い、夕方にチームと同期する時間ができました。デスクトップは6ヶ月間貨物船で運ばれたので、老朽化したラップトップと借りたモニターでビルドをプッシュし、コンパイラーがビルドを次々と出力するのを待ちました。迂回は速度を落としましたが、焦点を鋭くしました:ゲームを安定した60 FPSにすること。

実験的な木の最適化 初期の実験的な木の最適化試行 — 一部はグリッチして壊れていましたが、各失敗は何が機能し、何が機能しないかについて貴重な教訓を教えてくれました

プラットフォーム固有のアセット作成

移植はコード最適化だけではありません — Nintendo eShopとSwitchエコシステム専用の完全に新しいマーケティングアセット、カプセル、スクリーンショット、プロモーション素材が必要です。各プラットフォームには異なる要件、アスペクト比、ガイドラインがあります。

Switchアセット作成作業 広範囲なアセット作成プロセス — 新しいカプセル、バナー、プロモーションスクリーンショット、プラットフォーム固有のマーケティング素材

移植をしながら新しいコンテンツをリリース

移植作業とパフォーマンス調整をしながら、チームと無料のShivering Cryptsアップデートをリリースしました:新しいレベル(Ancient Penki Village)、多くの新しいクリーチャー、追加のメカニクス、秘密など、さらに多くのコンテンツ。

Switch開発の進歩 フレームレート最適化で着実な進歩を遂げる

パフォーマンス目標の達成

数ヶ月の最適化作業の後、ついに目標を達成しました:ゲーム全体で安定した60 FPSパフォーマンス。

マイルストーンモーメント:Penko Parkが安定した60 FPSを達成

共有する価値のある教訓

14 FPSでのクラッシュから一貫した60 FPS(GPUフレーム時間45 ms → 16 ms、ロード35%高速、セーブファイル70%小さく、まだ25%メモリ余裕)まで、Penko Parkの移植は、ほとんどのパフォーマンス勝利が小さな修正の反復と大量の測定(推測ではなく)から来ることを示しました。

  • 常に最初に測定。 プロファイラーは直感に勝る。
  • 透明度は高価。 オーバードローは殺す;可能な限りピクセルを不透明に保つ。
  • 地形は無料ではない。 静的メッシュに変換し、ベイクして最適化。
  • ポストエフェクトにはフレーム予算が必要。 雰囲気とミリ秒のバランスを取る。
  • テクスチャ形式を賢く選択。 サイズと圧縮がメモリと速度の両方を駆動する。
  • メモリフットプリントに注意。 メモリ不足クラッシュの原因を追跡するのに数日を無駄にする。

パフォーマンスプロファイリングスプレッドシート 2021年からの私の最適化追跡スプレッドシート — ボトルネックを特定するための細心のパフォーマンスプロファイリングが鍵でした

勝利の瞬間

数ヶ月の最適化、デバッグ、微調整の後、Penko ParkはついにNintendo Switchでリリースされました。eShopでライブで動作し、安定した60 FPSで動作するのを見ることは、すべての技術的作業の究極の検証でした。

Nintendo Switch eShopでライブのPenko Park 勝利の瞬間 — Penko ParkがNintendo Switch eShopで正常にリリースされ、最適化されて世界中のプレイヤーの準備完了

骸骨のピーター 技術的課題でも喜ばしい結果が得られることを思い出させる骸骨

最終結果

すべてのこの最適化作業が何を達成したか興味があれば、Penko Parkが滑らかな60 FPSで動作し、すべての視覚的ポリッシュを維持しているNintendo Switchトレーラーをご覧ください。かろうじて機能する最初のビルドからこの洗練された体験まで — このトレーラーのすべてのフレームは、数ヶ月の技術的反復と最適化作業を表しています。

Penko Park Nintendo Switchトレーラー — 広範囲な最適化作業の集大成


Nintendo Switch 2にゲームを持ってきたいですか?

Nintendo Switch 2用のパフォーマンス最適化された移植を制作します