博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lambert(朗伯)光照模型 和Half Lambert的区别
阅读量:6870 次
发布时间:2019-06-26

本文共 1032 字,大约阅读时间需要 3 分钟。

Lambert-它不包括任何任何镜面属性,对粗糙来说,这项属性是非常有用的,它不会反射出周围的环境。Lambert材质可以是透明的,在光线追踪渲染中发生折射,但是如果没有镜面属性,该类型就不会发生折射。平坦的磨光效果可以用于砖或混凝土表面。它多用于不光滑的表面,是一种自然材质,常用来表现的材质,如:木头、岩石等。

  

http://www.cnblogs.com/mavaL/archive/2010/11/01/1866451.html

 

Half Lambert模型

Half Lambert光照模型是Valve公司在制作”半条命“游戏时发明的,用来给在比较暗的区域显示物体。总体来说,该光照模型提高了物体表面的漫反射光。下图是Valve的示例,左手边是Lambert模型,右手边是Half Lambert模型。

使用我们原来的基础的shader,我们把LightingBasicDiffuse()方法改成如下:

1
2
3
4
5
6
7
8
9
10
11
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

本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/6136737.html如需转载请自行联系原作者

jiahuafu

你可能感兴趣的文章
su: user tomcat does not exist
查看>>
java 签名类 Signature
查看>>
非常详细的/etc/passwd解释
查看>>
解决Xcode在debug时不在断点处停止的方法<转>
查看>>
令人眼前一亮的动态规划入门教程
查看>>
[Memcached] telnet命令
查看>>
CodeChef Little Elephant and Movies [DP 排列]
查看>>
【Java集合的详细研究3】Arrays类常用方法
查看>>
Linux下随机生成密码的命令总结
查看>>
Linux 网络子系统之网络协议接口层(一)
查看>>
Nginx配置小结
查看>>
学习一点Markdown的基本知识
查看>>
程序史记:从巴贝奇、爱达到图灵
查看>>
Solidworks工程图如何使用,替换图纸格式模板文件
查看>>
系统重装 如何转换GPT的磁盘格式为MBR或者反过来
查看>>
Window Location对象
查看>>
【Java面试题】44 java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?...
查看>>
Win10系列:JavaScript动画4
查看>>
A Deep Compositional Framework for Human-like Language Acquisition in Virtual Environment
查看>>
C#.NET的TabControl如何隐藏和显示页面
查看>>