軟陰影的實現

2022-07-13 06:27:13 字數 587 閱讀 4591

按照那篇英文文件的方法,實現了一邊軟陰影,做出來的還是有點問題,可能主要是集中在那個pcf上,使用的取周圍畫素陰影平均值的方法,但是很明顯,周圍的點的深度和當前點的深度並不一樣,而我們比較的陰影值仍然是使用的當前點的深度,因此會出現誤差,這個誤差我是自己調的,但是這樣不好。然後我們再把陰影用gussian filter 進行使用兩個一維卷積模糊一下,這樣可以消除些鋸齒,但是仍然不能完全消除,至於z fighting是無論咋樣也還是有,注意gussian filter的u,v的次數不能太多,不然會造成影象的偏移。現在說說主要過程。

1.渲染深度圖。

2.使用pcf將帶硬陰影的場景渲染出來。

3.對陰影圖進行guissian filter模糊

4.渲染最後的場景並將3中的深度因子加到我們的最後場景中去。

過程很簡單,但是實現起來確是非常麻煩,建議逐過程地測試效果。

這是做出來的效果圖。只加了個diffuse漫反射光。**很爛,沒有做任何優化工作,清理工作也沒做。/files/ttthink/mysoftshadow.rar

ShadowMap實現軟陰影,使用整數紋理

陰影貼圖技術一般都是使用浮點紋理,這樣有足夠的精度來儲存深度值,不過,為了在不支援浮點紋理的顯示卡上使用陰影貼圖 比如很多整合顯示卡 就只好使用整數紋理,對效果的影響不是很大.於是,使用a8r8g8b8格式的紋理來儲存深度值,將深度值壓縮進rgba通道,方法如下 float4 floor fdept...

遊戲技術詞彙解析 軟陰影

原文 陰影體積 shadow volumes 是一種基於幾何形體的技術,需要幾何體在一定方向的燈光下的輪廓去產生乙個封閉的容積,然後通過光線的投射就可以決定場景的陰影部分。shadow volumes是畫素精確的,不會產生任何的鋸齒現象。在很多場合下,shadow volumes是高效的,但是其侷限...

WebGL 陰影的實現

原理 根據光源與物體之間的距離 也就是物體在光源座標系下的深度z值 來決定物體是否可見。如下圖,同一條光線上有兩個點p1 p2,由於p2的z值大於p1,所以p2在陰影中。需要使用兩對著色器 1 一對著色器用來計算光源到物體的距離 2 另一對根據 1 中計算出的距離繪製場景。2 如何使用 1 中的距離...