Unity Fine Prued Tiled Light (FPTL)

Fine Prued Tiled Light Lists

視頻講解:https://www.bilibili.com/video/av90517615


FPT是在Tile裁剪的基礎上在進行一次剔除
可用於Forward Render和Deferred Shading兩種渲染管線
利用了並行架構進行優化
將線程分爲線程組再分爲多個線程,Thread Group中線程可以同步,做到每個算法單元的同步(要考慮到硬件性能)。在指定線程組中的線程數量時,大小要小於等於1024,AMD中爲64的倍數,intel中爲32的倍數
CPU和GPU數據傳遞通過Computer Buffer(同步,需等待結束,在Editor中也可以使用,但是性能較差)
GPU和renderpipeline數據傳遞通過RWStructured Buffer(在GPU中傳遞)
一般步驟
對於每個相機
CPU端查找所有與視椎體相交的光源列表,並排序
GPU端計算在屏幕空間下光源的AABB
將屏幕分成16*16px per Tile
通過screenXY計算Tile的數量
那麼1個Tile=1個thread group=64個線程
計算depth-buffer中的最大與最小深度(與線程同步)
得到min,max後,將相交光源的index存入Light List
做fine prued裁剪(判斷是否在光源形狀中,檢查光源的類型,一條線程1個像素、一條線程4個光源,用Or操作最後儲存的位數據)
在最終的渲染中使用該光源
Tips
首先在HDRP中要開啓該功能(在Assets中)
因爲需要深度值,所以只能用於不透明物體
在deferred中強制開啓,透明物體使用clustered
在forward中選擇開啓,透明物體使用clustered
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章