Lambert-它不包括任何任何鏡面屬性,對粗糙物體來說,這項屬性是非常有用的,它不會反射出周圍的環境。Lambert材質可以是透明的,在光線追蹤渲染中發生折射,但是如果沒有鏡面屬性,該類型就不會發生折射。平坦的磨光效果可以用於磚或混凝土表面。它多用於不光滑的表面,是一種自然材質,常用來表現自然界的物體材質,如:木頭、岩石等。
http://www.cnblogs.com/mavaL/archive/2010/11/01/1866451.html
Half Lambert模型
Half Lambert光照模型是Valve公司在制作”半條命“游戲時發明的,用來給在比較暗的區域顯示物體。總體來說,該光照模型提高了物體表面的漫反射光。下圖是Valve的示例,左手邊是Lambert模型,右手邊是Half Lambert模型。
使用我們原來的基礎的shader,我們把LightingBasicDiffuse()方法改成如下:
inline float4 LightingBasicDiffuse (SurfaceOutput s, fixed3 lightDir, fixed atten) { float difLight = dot (s.Normal, lightDir); float hLambert = difLight * 0.5 + 0.5; float4 col; col.rgb = s.Albedo * _LightColor0.rgb * (hLambert * atten * 2); col.a = s.Alpha; return col; }
保存shader后,我們回到Unity。
如果你沒有對場景中的物體進行任何的改動,你可以發現現在物體整體表現比原來亮了。這個原因是因為代碼
float hLambert = difLight * 0.5 + 0.5;
difLight在范圍因為dot()方法的關系,在[0, 1]范圍,因此, hLambert的范圍在[0.5, 1]。這個算法把范圍0~1映射到了范圍0.5~1中,整體就提高了最后的數值。
http://www.98jy.net/article/24