GPU Gems1 - 11 阴影贴图反走样
這章介紹了如何通過鄰近百分比過濾方法(Percentage-Closer Filtering , PCF)有效減少陰影貼圖的反走樣,并描述了如何實現一個簡化版本,并對PCF方法進行了一定改進。關于陰影貼圖和PCF技術的一些鏈接
https://pubweb.eng.utah.edu/~cs5610/handouts/reeves87.pdf
https://gameinstitute.qq.com/community/detail/101354
首先介紹一下陰影貼圖技術。
陰影深度圖算法是一個2 pass算法。第一遍生成一張光照空間的深度圖。在第二遍,這張圖被用來比較每個像素在光照空間中的深度和在光照深度圖中的深度。
Pass1
在第一階段,將場景從光源的方向渲染到一個深度緩沖區。更具體地說,頂點著色器將幾何體變換到光照視圖空間。第一階段的最終結果是一個光照方向的場景深度緩存信息(陰影貼圖)。其可用于Pass 2,以確定從光源開始,哪些像素是被遮擋的
Pass2
在第二階段,頂點著色器對每個頂點變換2次。每個頂點變換到像機視空間(camera view)并作為位置(position)傳入像素著色器。每個頂點還由光源的視點-投影-紋理(view-projection-texture)矩陣變換并且作為紋理坐標(texture coordinate)傳入的像素著色器。view-projection-texture矩陣和Pass1中用來渲染場景的矩陣(view-projection)是相同的只是多了一個額外的變換(到texture空間的變化)。這個變換將點從視圖空間(XY在-1到1)變換到紋理空間(X為0到1,Y為1到?0)。
像素著色器獲得了插值后的位置(position)和紋理坐標(texture coordinate)。現在在紋理坐標中的一切都需要進行深度測試。通過紋理坐標的X和Y在pass1中的深度緩沖中進行索引,然后與位置坐標(position)的Z值比較來進行深度測試從而渲染陰影。
PCF軟陰影技術
傳統的陰影貼圖技術是先對陰影貼圖中的采樣點filter取平均值,然后再與該位置的z值相比較,返回0或1.例如下圖的例子:待渲染的像素點z值為49.8,陰影貼圖中的九個采樣點平均值為22.9,小于49.8,也就是說有比該渲染的像素離光源更近的像素,因此該像素點在陰影中,返回1.
PCF技術則是將filter和compare兩個操作的順序反轉,先compare進行深度測試得出0或1,再根據得到的結果進行filter。如下圖所示,先與待渲染像素的z值即49.8進行compare后得到各插值點的0或1值,再取平均值,即5/9 = 0.55。這解決了傳統的陰影貼圖技術只能返回0或1,陰影邊界走樣的問題,從而實現了軟陰影。
GEM這篇文章中,實現了簡化版的PCF,只是簡單的在各處使用一個4X4 texel(紋素)的樣本塊、這個塊應該大到能夠有效地減少走樣,但是不能達到要求大量樣本和隨機取樣的程度。如下圖。
可以看到3幅圖中的顯示效果區別很明顯,圖(c)中每像素取16個樣本,效果最為出色,達到了反走樣的預期。
?
【關鍵詞提煉】
反走樣/抗鋸齒(Antialiasing)
鄰近百分比過濾(Percentage-Closer Filtering , PCF)
透視陰影貼圖( perspective shadow maps)
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的GPU Gems1 - 11 阴影贴图反走样的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows实现内网IPMI端口转发
- 下一篇: 1. BeeGo 介绍与项目的创建,启动