最初に、本ゲームは屋内で対戦するオンラインFPSゲームであることや、対戦する建物のマップを自動生成すること、建物内のほとんど全ての壁や床を壊せることなど、本ゲームでの要件や、ComputeShaderやオクルージョンカリングなど今回のセッションに必要な基礎知識を説明します。
次に、Unityのオクルージョンカリングはベイクが必要で自動生成とは相性が悪いことや、ゲーム中にオブジェクトを削除すると描画がおかしくなるなど、Unityデフォルトの問題点と、ComputeShaderによる独自実装によってそれらを解決できることを説明します。
また、OcclusionQueryや階層的Zバッファなどの今回採用しなかった手法と、今回採用したComputeShaderとバウンディングボックスとレイによる可視判定を行うオクルージョンカリングシステムについて、それぞれのメリットとデメリットを表にまとめてわかりやすく説明し、採用した理由を説明します。
そして、実際に実装したコードについて解説を行います。全体的な設計や、OccluderやOccludeなどocclusion cullingを実装する上で必要な概念、主要なコード部分について解説します。今回実装したコードは、整理をしたうえでGithub上でMITライセンスで公開を予定していますので、聴講者はそれを見ながら講演を聞くこともできます。
最後に、このシステムについて「描画が正常にされないことがある」などのデメリットと、エディタ拡張でそれを解決する方法について説明します。
講演者プロフィール
佐藤克海
北海道情報大学に在籍しながら株式会社Fractal GamesにてFPSゲーム開発に従事。
アンチチートシステムの実装やグラフィック周りの最適化や機能開発の実装を行いました。
また個人ゲーム開発も実施しており、クラウドファンディングやSteamでのリリースを実施しています。
これらの経験を生かしてビジネス分野での知見の提供も行っています。
並行してSuishow株式会社のメタバース開発にてテックリードとして従事。他メンバーの育成やアーキテクチャ設計、プロジェクトマネジメントなどを実施しました。
《講演者からのメッセージ》
私達がゲームを開発する上で直面するのは数々の課題ですが、その中でもパフォーマンスの維持は一段と重要な課題となります。
今回の私のセッションでは、そんなパフォーマンス最適化の一部としてComputeShaderを用いたOcclusionCullingの実装について深く掘り下げます。これらを実装する際に必要となるアルゴリズムの知識やノウハウを共有し、皆様に具体的なイメージをお持ちいただければと思います。
また、私が説明するコードは公開いたしますので、セッション中にすぐ理解できない部分があっても問題ありません。お帰りになってから、自分のペースで動かし、じっくりと理解していただければと思います。
私のセッションを通じて、皆様が新しい最適化の手法に触れ、それが新たな知見やアイディアの種になることを願っています。