關於nividia顯卡的硬件PCF

兩年多沒更新博客了,想想自己真的夠懶的。還是抽點空寫寫吧,自己積累的同時也share給別人,何樂而不爲。

 

早就知道nv的顯卡支持硬件的shadow map比較,同時還附帶2x2的PCF。但一直沒有深究到底是如何使用的。今天翻了一下nv的例子,發現還是

很簡單的。

只要shadow map使用D24S8 D24X8 D16等depth buffer格式,寫shader時滿足一定的條件即可。即:

 

sampler2D shadowmap;

 

float4 depth; // 當前像素在燈光空間中的齊次座標

// 注意這個座標的xy在除w後的範圍是(0, 1)

 

float shadow = tex2Dproj(shadowmap, depth);

這裏得到的shadow就是經過深度比較的,2x2PCF後的陰影值了。

 

值得一提的是這裏就產生了另外一個問題,當我們在做後處理,或延遲光照的時候,我們需要的就是深度值,而不是比較後的陰影時怎麼辦呢。

這時就不能用以上這些深度緩衝buffer了,因爲就是用tex2D採出來的也是不對的。方法也很簡單,用其他格式的buffer做深度緩衝,如INTZ。

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