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

2021-04-19 00:36:57 字數 637 閱讀 1464

陰影貼圖技術一般都是使用浮點紋理,這樣有足夠的精度來儲存深度值, 不過,為了在不支援浮點紋理的顯示卡上使用陰影貼圖(比如很多整合顯示卡),  就只好使用整數紋理, 對效果的影響不是很大.

於是, 使用a8r8g8b8格式的紋理來儲存深度值, 將深度值壓縮進rgba通道, 方法如下:

float4( floor( fdepth ) / 256.0f,  frac( fdepth ),  frac( fdepth ),  frac( fdepth ) );

將深度值的整數部分壓縮進 r 通道, 小數部分儲存在 g  通道.

通過把frac( fdepth )寫進藍色和alpha通道, 我們可以節省一條畫素shader指令, mov r2.gba,  r0.g

這種壓縮方法簡單, 而且精度也較高, 要從紋理中取出深度值只需要取出顏色值再點乘乙個解碼的向量, 即vunpack( 256.0f,  1.0f,  0.0f,  0.0f)

軟陰影的實現方法: 靠近百分比過濾完全不能實現柔和的陰影,   還是只能把陰影做模糊處理,  除了shadowmap使用的一張紋理之外,  再準備3張視口大小一半的紋理. 渲染陰影值到一張紋理,   另外兩張用於模糊,  搞定...

遊戲裡的動態陰影 ShadowMap實現原理

shadowmap是比較流行的實時陰影實現方案,原理比較簡單,但真正實現起來還是會遇到很多問題的,我這裡主要記錄下實現方式 先看效果 實現原理 shadowmap技術是從燈光空間用相機渲染一張rendertexture,把深度值寫入其中所以稱之為深度圖,在把接受陰影的物體從模型空間轉換到燈光空間中,...

軟陰影的實現

按照那篇英文文件的方法,實現了一邊軟陰影,做出來的還是有點問題,可能主要是集中在那個pcf上,使用的取周圍畫素陰影平均值的方法,但是很明顯,周圍的點的深度和當前點的深度並不一樣,而我們比較的陰影值仍然是使用的當前點的深度,因此會出現誤差,這個誤差我是自己調的,但是這樣不好。然後我們再把陰影用guss...

ShadowMap渲染陰影方法及問題

shadowmap基於的原理 sm演算法是乙個2 pass繪製演算法,第一pass從光源視點繪製場景,生成sm紋理,第2pass從視點檢視按常規方法繪製場景 從光源的位置觀察場景,這時候我們看不到的地方就是該有陰影的地方,於是可以使用比較畫素到光源距離的方法來確定某個畫素是否在陰影之中。於是我們需要...