漫反射 逐畫素光照(半蘭伯特)

2021-07-24 12:21:46 字數 800 閱讀 7678

shader "custom/testshader"

subshader

pass

;struct v2f

;v2f vert(a2v v)

fixed4 frag(v2f i):sv_target           //計算漫反射光照模型

【說明】

1. 頂點著色器不需要計算光照模型,只需要把世界空間下的法線傳遞給片元著色器即可。

2. 在光線無法達到的區域,模型的外觀是黑色的,解決背光面明暗問題,提出了半蘭伯特模型

在逐畫素光照上只需改變如下:

3. 半蘭伯特模型原理:

half lambert技術實現的是原理是把漫反射光照值的範圍分成兩半,然後加上0.5。基本意思就是如果光照值是1,對半開後就是0.5,然後再加0.5回去,將會再得到1。如果你對0進行操作,那麼你會得到0.5,因此我們將0~1之間的值重新對映到區間0.5~1。

下圖展示了漫反射的值經過half lambert計算後的函式曲線圖。

漫反射 蘭伯特和半蘭伯特

蘭伯特定律 lambert is law 反射光線的強度與表面法線和光源方向之間夾角的余弦值成正比 漫反射公式 c diffuse c light m diffuse max 0,入射光線 的顏色和強度 材質 的漫反射係數 max 0,表面法線 光源方向的點積 弊端就是在模型光照無法達到的區域通常是...

漫反射著色 建立半蘭伯特光照模型

shader halflambert subshader 層次細節 200 lod 200 cg cgprogram 預處理指令 su ce surf 指定此為suface型別的shader,渲染函式為surf halflambert 指定所使用的光照模型為自定義半蘭伯特光照模型 pragma su...

Unity shader學習之逐畫素漫反射光照模型

shader如下 shader custom diffuse fragment level subshader lod 100pass 只有設定了正確的lightmode,才能訪問一些unity提供的內建變數,如 lightcolor0 cgprogram pragma vertex vert pr...