Frustum Culling (視錐台カリング / フラストラム・カリング) は、カメラの視野を表す四角錐の空間(視錐台 / View Frustum)の外側に完全に位置しているオブジェクトを、レンダリングの初期段階で排除して描画コマンドの発行をスキップする、最も基礎的かつ強力な最適化システムです。
現実世界での例え:演劇の『舞台裏スタッフ』による徹底的な手抜き
Frustum Cullingの動作は、「演劇のステージにおいて、観客(カメラ)から見えない『舞台裏(視野外)』の省略効率化」に例えることができます。
- 従来(カリングなし): ステージ上で演者が動く際、観客から見えている表舞台はもちろん、見えない舞台の袖や完全に壁の裏(カメラの視野外)に待機している全役者に対しても、常に本番用の完璧なメイク直しや衣装のアイロンがけ(不要なレンダリング計算)を休むことなく全力で施し続けています。これでは、バックステージのスタッフ(GPU)が過労で破綻してしまいます。
- Frustum Cullingによる解決: カメラマン(観客)が向いている「レンズの画角の範囲(視錐台)」だけを確認します。カメラの視界に1ミリも入らない場所にいるオブジェクトは、最初からメイクも着替えも一切スキップ(GPU転送と計算の完全除外)し、カメラがその方向を向いた(視界に入った)瞬間に初めて処理を再開します。これにより、どれだけ広大なシーンでも、常に見えている部分だけの最小コストで描画できます。
図:カメラ視錐台の外側のオブジェクトを瞬時に描画リストから排除するカリング処理のインフォグラフィック
仕組みと動作原理
Unityは、シーン上の各レンダラー(Mesh Renderer、Particle Systemなど)が持つ「Bounds(境界ボックス)」の3D座標情報を保持しています。カメラがレンダリングを開始する際、CPUはカメラの6つのクリッピング平面(Near, Far, Left, Right, Top, Bottom)によって作られる視錐台コーンと、各Boundsの衝突判定を行います。交差が「ゼロ」と判定されたレンダラーは、ドローコールを発行するレンダーリストから即座に除外(カリング)されます。