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移動端動態陰影Unity
- unity陰影(一)烘焙和Quality中Shadows的設定Unity
- HTML中的盒子陰影HTML
- 騰訊與360戰爭背後的雲端計算陰影薦
- 遊戲中的陰影實現遊戲
- AKM專案趣事之計算心理陰影面積
- css圖片陰影、文字陰影CSS
- 假陰影,低開銷的陰影實現方式
- 陰影進階,實現更加的立體的陰影效果!
- boder 陰影
- 【譯】徹底理解 Android 中的陰影Android
- css去除ios中input和textarea的陰影CSSiOS
- CSS 陰影進階,實現更加的立體的陰影效果!CSS
- 逆向分析,計算機世界中的九陰真經計算機
- WPS文件如何給標題加陰影?WPS文件給標題加陰影的方法教程
- Android開發中陰影效果的實現Android
- 灰色產業的陰影中,CDKey成了罪魁禍首產業
- 電影中的計算機都是這樣的計算機
- 簡單陰影分析
- 【CSS】曲線陰影CSS
- view邊框陰影View
- Shadow Map(陰影貼圖)跟Soft Shadows(軟陰影)
- Unity Texture Setting 中 Filter Mode的影響UnityFilter
- 一個perfect 的解決 陰影拉伸的方法 shadow map strech
- 利用著色器在WPF中實現陰影特效特效
- view的陰影效果shadowColorView
- canvas設定陰影效果Canvas
- WPF 實現陰影效果
- HyperWorks中的Size and bias 子皮膚
- Unity中的光源型別(向前渲染路徑進行光照計算)Unity型別
- CardView改變陰影顏色View
- CSS陰影效果三劍客CSS
- CardView原始碼解析-View陰影View原始碼
- 超讚的 CSS 陰影技巧與細節CSS
- 簡單好用的陰影庫 ShadowLayout
- 僅用 CSS 實現多彩、智慧的陰影CSS
- 手機中的計算攝影:超廣角畸變校正
- 《Morkredd》:使用陰影構建遊戲玩法遊戲