Lambert(朗伯)光照模型 和Half Lambert的區別


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM