码迷,mamicode.com
首页 > 编程语言 > 详细

Unity shader教程-第五课:自定义光照模型之Half Lambert模型

时间:2015-03-02 11:10:39      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:unity   shader   unity3d   

本文首发地址:http://98jy.net/article/24

更多文章,请入传送门

----------------------------------------------



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中,整体就提高了最后的数值。



技术分享


98教育原创,转载请注明出处(98jy.net),否则视为侵权。

Unity shader教程-第五课:自定义光照模型之Half Lambert模型

标签:unity   shader   unity3d   

原文地址:http://blog.csdn.net/tinyhum3d/article/details/44016075

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!