上一回我們說到Cluster Based Lighting,將攝像機空間切成塊,使每一塊稜台都保持有一個自己的光照隊列,這樣的光照剔除方法有非常多的好處,其中最主要的好處在於其魯棒性高,比如既能支持Forward Pipeline,也可以支持Deferred Pipeline,無論是氣體渲染,液體渲染,透明固體渲染,粒子渲染等,都可以通過一個世界坐標獲取到當前的受光信息。但是僅僅如此是不夠的,因為Cluster Based Lighting也有其局限性,其中最致命的局限在於其光照剔除精度的不足。因為不依賴深度,所以在切割的時候必須將空間的Z軸切割成多段,譬如在MPipeline中,我們按照非線性近小遠大的規則將空間的Z軸切割成64份,因此在同樣的切割解析度下,其剔除消耗將會是TBDR的64倍。最終的結果就是光照的剔除精度必須做妥協,因此我們的XY軸切割解析度就大大的降低了,降低到了16 * 8。很顯然,將屏幕橫豎分為16 * 8這樣的剔除精度是遠遠不夠的,因此我們需要專門為光照運算的主要部分,也就是延遲管線渲染的物體做一個單獨的TBDR。
光照的剔除方法一般要考慮需求場景的目標光源的大致數量,而我們這裡場景管理考慮的是,在到攝像機裁面的一定距離內,如128米,192米或256米等,使用實時的燈光,即支持陰影,高光,物理衰減等高級光照運算。而超出一定距離後則使用LOD的切換,換成Light Volume直接使用GBuffer進行疊色,據悉GTAV使用的光照計算方法就是這樣的: