GPU Driven Rendering (GPU駆動レンダリング / GPU Driven)は、ゲームグラフィックスのレンダリングや最適化(テクニカルアート)において極めて重要となる技術用語です。CPUが行っていたオブジェクトのカリング(視錐台カリング、遮蔽オクルージョン)や描画命令の生成を、GPUのCompute Shaderへ完全に移譲し、CPUのドローコール負荷を極限までゼロにする次世代のレンダリングアーキテクチャの解説。
現実世界での例え:本社の社長(CPU)が、現場の何万件の配達物(3Dモデル)を1個ずつ自らチェックして配送伝票(ドローコール)を毎朝手書きで発行するのを完全にやめ、すべての配送伝票の束を現場の超高速ロボット(GPU)に丸投げして現場で自律発送させる配送工場のDX化
GPU駆動レンダリングは、「これまでCPUが不眠不休で行っていた『何万個ものオブジェクトがカメラの画面に入っているかの判定(視錐台カリング)』や『描画の準備と命令(ドローコール発行)』の仕事を、GPU自身にまるごと独占移譲する、レンダリング工場の次世代DX化(自動化)プロジェクト」です。CPUはゲームの起動時に「ここにあるオブジェクトの位置データリスト」をGPUの共有バッファに一度放り投げるだけ。あとはGPUが自分自身で「自分の中から画面に入っている奴だけを、自分自身でドローコールを自律発行して超並列で一括描画する(Indirect Drawing)」ため、CPUのドローコール関連負荷がほぼ完全に「ゼロ」になり、画面全体の情報密度を従来の10倍以上に激増させることができます。
図:GPU Driven Rendering (GPU駆動レンダリング / GPU Driven)の基本的な処理フローと仕組みを日本語表記で分かりやすく図解したインフォグラフィック
詳細な仕組みと動作原理
Unity 6以降で「GPU Resident Drawer」などの「GPU Driven Rendering」機能を有効化し、オブジェクトの位置リストをStructured BufferとしてGPUに一括アップロードした上で、カリングから描画命令(DrawProceduralIndirect)の生成までをGPUの超並列Compute Shader内で完全に完結させます。