UnityApplyLinearShadowBias -- Unity中計算陰影bias的方法
作用:
偏移片元在光源空間下的裁剪座標,用於解決shadow acne(陰影失真)的問題。
原理:
通過減少光源到物體的深度圖的數值(距離越遠數值越小),從而使光源到物體表面片元的距離數值增加,在比較物體片元到攝像機的距離和到光源的距離時,到光源的距離比真實數值更遠一點,通過距離比較之後,把處於邊界值的片元都當作被光源照射到。
如下圖,如果不啟用bias,ad片元能被照射到,而bc片元則不能被照射到。詳細說明:https://blog.csdn.net/lawest/article/details/106364935
原始碼:
float4 UnityApplyLinearShadowBias(float4 clipPos)
{
#if defined(UNITY_REVERSED_Z)
// We use max/min instead of clamp to ensure proper handling of the rare case
// where both numerator and denominator are zero and the fraction becomes NaN.
// Direct3D11-like
clipPos.z += max(-1, min(unity_LightShadowBias.x / clipPos.w, 0));
float clamped = min(clipPos.z, clipPos.w*UNITY_NEAR_CLIP_VALUE);
#else
// Direct3D9-like OpenGL-like
clipPos.z += saturate(unity_LightShadowBias.x/clipPos.w); //
float clamped = max(clipPos.z, clipPos.w*UNITY_NEAR_CLIP_VALUE);
#endif
clipPos.z = lerp(clipPos.z, clamped, unity_LightShadowBias.y);
return clipPos;
}
原始碼分析:(本人並不確定,望指教)
clipPos.z += saturate(unity_LightShadowBias.x/clipPos.w);:
clipPos是裁剪空間下的齊次座標:(N * x, N * y, az + b, -z), 其中x,y,z分別是相機空間下的座標數值
unity_LightShadowBias.x是一個負數,預設一般是-0.0005,除以clipPos.w也就是除以相機空間下的-z,可以知道為了補償透視投影,這裡除以clipPos.w之後片元距離光源越遠偏移量越小。近大遠小?至於數學層面的分析本人還不清楚。
float clamped = max(clipPos.z, clipPos.w*UNITY_NEAR_CLIP_VALUE);:
UNITY_NEAR_CLIP_VALUE是NDC空間下z的最小值。這行程式碼就是當clipPos.z比近裁切面還要小的時候取近裁切面的值
clipPos.z = lerp(clipPos.z, clamped, unity_LightShadowBias.y);:
unity_LightShadowBias.y, 當光源是平行光的時候該值為1,其他光源為0,當是平行光時最後clipPos直接取clamped的值,這是為了避免在平行光原點背面的片元的深度也保持在0~1,當然平行光並沒有原點,這裡這是方便計算。當不是平行光的時候該值為0,相當於直接取上面偏移bias之後的clipPos的值。
相關文章
- unity陰影(一)烘焙和Quality中Shadows的設定Unity
- 遊戲中的陰影實現遊戲
- css圖片陰影、文字陰影CSS
- WPS文件如何給標題加陰影?WPS文件給標題加陰影的方法教程
- 假陰影,低開銷的陰影實現方式
- 陰影進階,實現更加的立體的陰影效果!
- boder 陰影
- CSS 陰影進階,實現更加的立體的陰影效果!CSS
- Android開發中陰影效果的實現Android
- Shadow Map(陰影貼圖)跟Soft Shadows(軟陰影)
- Unity Texture Setting 中 Filter Mode的影響UnityFilter
- 灰色產業的陰影中,CDKey成了罪魁禍首產業
- 【CSS】曲線陰影CSS
- 簡單陰影分析
- 簡單好用的陰影庫 ShadowLayout
- 部落格中圖片邊緣陰影問題
- 利用著色器在WPF中實現陰影特效特效
- HyperWorks中的Size and bias 子皮膚
- Unity中的光源型別(向前渲染路徑進行光照計算)Unity型別
- WPF 實現陰影效果
- canvas設定陰影效果Canvas
- box-shadow(盒子陰影)
- 立體感的邊框陰影效果
- CardView改變陰影顏色View
- Android Material Design 陰影實現AndroidMaterial Design
- CSS陰影效果三劍客CSS
- 手機中的計算攝影:超廣角畸變校正
- 超讚的 CSS 陰影技巧與細節CSS
- 僅用 CSS 實現多彩、智慧的陰影CSS
- 【Bias 05】Representation Learning with Statistical Independence to Mitigate BiasMIT
- CSS圖片邊框陰影效果CSS
- 變形元素旋轉css陰影CSS
- CSS3筆記(二)陰影CSSS3筆記
- WebGL實踐之半透陰影Web
- js中浮點數計算常用方法JS
- 複習Vue中的方法,計算和偵聽者Vue
- word公式怎麼計算 word公式計算的方法公式
- CSS3-陰影引數基礎CSSS3