lightmode為shadowcaster的pass是用來渲染陰影對映紋理。該shader如果沒有定義lightmode為shadowcaster的pass,則會去fallback指定的shader繼續尋找。如果沒有找到,該物體無法向其他物體投射陰影,但能接收來自其他物體投射的陰影(螢幕空間的對映陰影接收和投射則都需要設定shadowcaster)。
1.實時渲染中,使用的是shadowmap技術,原理是把攝像機的位置放在與光源重合位置上,攝像機看不到的地方就是該光源的陰影區。在前向渲染中,當最重要的平行光開啟了陰影,unity會為這光源計算出它的陰影對映紋理(深度圖),記錄的是該光源的位置能看到的場景中距離它最近的表面位置(深度資訊)。呼叫lightmode為shadowcaster的pass得到陰影對映紋理。
2.當使用了螢幕空間的陰影對映技術,是延遲渲染中產出陰影的方法。呼叫lightmode為shadowcaster的pass得到可投射陰影的光源的陰影對映紋理和攝像機的深度紋理。然後根據這兩張紋理得到螢幕空間的陰影圖。
判斷該點是否在陰影下
把頂點轉換到光源空間下,用xy分量取樣陰影對映紋理得到該位置的深度資訊,然後與z分量進行比較,如果z分量大於深度資訊,則該點位於陰影下。
投射陰影
1.投射自己的陰影
2.把自己的陰影資訊放入陰影對映紋理中
接收陰影
對陰影對映紋理(包括螢幕空間的陰影圖)進行取樣,把取樣的結果和最後的光照結果相乘得到陰影效果。
對陰影對映紋理取樣:把頂點座標轉換到光源空間中,用xy分量取樣陰影對映紋理
對螢幕空間的陰影圖取樣:把頂點座標轉換到螢幕空間中,用xy分量取樣螢幕空間的陰影圖
on:開啟陰影
off:關閉陰影
twoside:雙面都計算陰影
castshadow還需要通過執行lightmode為shadowcaster的pass實現
receiveshadow 是否勾選代表是否接收陰影
內建巨集shadow_coords,transfer_shadow,shadow_attenuation計算陰影,unity_light_attenuation統一計算光照衰減和陰影,把計算的陰影和最終的光照結果進行相乘。
螢幕空間的對映陰影
傳統的shadowmap
Unity Shader入門精要
學習資料 unity shader入門精要 時長 乙個月 計畫 1 2天完成一章,預計乙個月內完成 幾何階段 gpu實現,輸出螢幕空間的二位點座標,深度,著色資訊,傳送給光柵化階段 光柵化階段 gpu實現,決定每個渲染圖元哪些畫素應該被繪製在螢幕上,將幾何階段傳來的頂點資料進行插值 頂點v法線的獲取...
筆記 《Unity Shader入門精要》
應用階段 輸出渲染圖元 rendering primitives 包括 準備場景資料 相機 場景模型 光源 粗粒度剔除 culling 把不可見的物體剔除 渲染狀態 材質 紋理,使用的shader等。光柵化階段 每個渲染圖元的哪些畫素應該被繪製在螢幕上,包括 三角形設定 三角形遍歷 片元著色器 逐片...
《Unity Shader入門精要》自學筆記(一)
shader custom zhudingdian subshader cgprogram float4 diffuse 取用設定中的顏色資訊 pragma vertex vert pragma fragment frag include lighting.cginc struct a2v stru...