Order-independent transparency (OIT) is a class of techniques in rasterisational computer graphics for rendering transparency in a 3D scene, which do not require rendering geometry in sorted order for alpha compositing.
需求:因爲對於一個複雜的場景,透明渲染幾何間的按順序排序是非常困難且耗時的,這時候就需要設計一種方法來避免幾何間按順序排序。再有如果某個幾何體出現自交叉的情況,那麼就無法進行正確排序,也會導致渲染效果不正確問題。
思路:
使用排序後的片元列表來重新排序光柵化之後的片元,然後在片元着色器中完成融混操作。
鏈表的每個元素都記錄一個對最終像素顏色有貢獻的片元值。屏幕的每個像素都會產生一個獨立的鏈表,其中包含所有對這個像素有貢獻的透明片元項。
總結主要功能:
我們要保存所有光柵化片元數據,使用一個原子計數器用來分配鏈表元素,分配一個與幀緩存大小相同的2d圖像,用來存儲每個像素的片元列表的head指針。
實驗效果:
未進行排序前的渲染結果:
排序後的渲染結果:
完整源碼文件:
https://t.zsxq.com/RBe2zFa