Unity3D Half Lambert光照模型

Half Lambert光照模型

说到Half Lambert ,就不得不说反恐精英了,在制作反恐精英的过程中,为了防止物体的背面光丢失而显得太过平面化,就用了这个称之为half lambert的技术

。但是这个half lambert的光照模型是没有任何特殊物理原理,仅仅是增强玩家视觉的一个简单的光照模型例子。

具体的介绍可以参见Valve的wiki:

https://developer.valvesoftware.com/wiki/Half_Lambert

左边是普通的Lambert光照模型效果,右边就是我们说到的HalfLambert。

通过点乘的曲线图,我们可以看到使用HalfLambert的光照模型值是要高一半的。

那么我们怎么来实现呢,下面就动手吧。基于【Unity3D ShaderLab 自定义光照模型】的Shader代码我们继续改。

以上的31行下面添加关键代码>>float halfLight=difLight*0.5+0.5;

再把col.rgb的赋值处的difLight替换为halfLight。这就完成了。

下面是效果图,场景的灯光为0.2。我们可以看出左侧使用halfLambert光照模型的方块背光面没有右侧的默认Lambert光照模型那么暗。

总结而来,Half Lambert的实现原理就是把漫反射的光照值范围分成2半,然后再加上固定的0.5。那么我们通过推算,光照值为0,half算得值依然为0.5,而普通的lambert就会是0,

所以有了上面的HalfLambert光照曲线图。Blue的曲线总是比Red曲线要高出一半。这就保证了在光照很差的场景中,我们依然不会看不清物体的背光面。

时间: 2024-10-01 06:35:09

Unity3D Half Lambert光照模型的相关文章

Lambert光照模型

lambert光照模型只考虑环境光和漫反射光的影响. 因此在计算的时候,你只需要知道光源的位置和物体上受光点法线的方向即可,而无需知道视点在哪里. 通常来说,lambert光照的最终颜色为:ambient_color*ambient_factor+diffuse_color*diffuse_factor*Diffuse_intensity 光照强度跟物体表面的受光点到光源防线的向量,与物体表面法线的夹角有关.夹角越小,越亮,反之,越暗. 由Lambert渲染出来的物体表面没有最亮的那一点光斑.

Unity3D ShaderLab 自定义光照模型

接着上一篇BasicMyDiffuse来说,这次要说明的就是自定义的光照模型. 1.>//#pragma surface surf Lambert::这个是默认的光照模型 2.>#pragma surface surf CusDiffuse //自己定义的光照模型CusDiffuse; 3.>在SubShader 中加入光照模型函数: inline float4 LightingCusDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten)

Lambert 光照模型

漫反射 光线照射到粗糙物体表面,向各个方向等强度地反射光,因此从各个视角出发,物体表面呈现相同的亮度,所看到的物体表面某点的明暗程度不随观测者的位置变化的,这种等同地向各个方向散射的现象称为光的漫反射. Lambert光照模型 漫反射光的强度近似地服从于Lambert定律,即漫反射光的光强仅与入射光的方向和反射点处表面法向夹角的余弦成正比. Lambert漫反射模型: 简介 Lambert 光照模型,是光源照射到物体时产生的漫反射效果,没有高光.如下图:这个时顶点函数处理后的该光照模型,因此看起

Unity3d中BlinnPhong光照模型注解

[狗刨学习网] /** 版本:0.1 最后修改:2012-08-10 撰写:李现民 Unity3D中主要用到的shader(着色器)有三种,除了常规的vertex shader与fragment shader外,还有一类称为surface shader.Unity3D自带文档中关于surface shader的介绍非常少,除了有一些示例外,surface shader的结构定义,调用时机,参数的含义都被略了,对我等初学者而言,这无疑加大了学习难度. 前两天在网上查相关资料时,偶然发现了一篇文章,

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

本文首发地址:http://98jy.net/article/24 更多文章,请入传送门 ---------------------------------------------- Half Lambert光照模型是Valve公司在制作"半条命"游戏时发明的,用来给在比较暗的区域显示物体.总体来说,该光照模型提高了物体表面的漫反射光.下图是Valve的示例,左手边是Lambert模型,右手边是Half Lambert模型. 使用我们原来的基础的shader,我们把LightingBa

【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)——自定义光照模式

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://hpw123.net/plus/view.php?aid=183 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] QQ交流群:330595914 更多文章尽在:http://www.hpw123.net 本文主要讲解了Unity中SurfaceShader的自定义光照模式的写法. 上篇文章中我们已经说到,表面着色器将分为两次讲解,上

【译】Unity3D Shader 新手教程(1/6)

刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散,这也造成初学者对Unity3D Shader编程望而却步.该系列教程的第一篇文章(译者注:即本文,后续还有5篇文章)详细介绍了Unity3D中的表面着色器(Surface Shader)的,为学习更复杂的Shader编程打下基础. 动机 如果你是刚刚接触Shader编程的新手,你可能不知道从何开始踏出Shader编程的第一步.本教程将带你一步步完成一个表面着色器(Surface Shader)和片段着色器(Fra

Unity3D游戏开发从零单排(九) - 进击的Shader

提要 今天要学习的是一些Shader 的例子,从简单到难.Let's go. 一大波例子来袭 还是用上一篇用到的工程.点我下载 红色的螃蟹 Test1.shader Shader "Custom/Test1" { SubShader { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf Lambert struct Input { float4 color : COLO

转 猫都能学会的Unity3D Shader入门指南(二)

猫都能学会的Unity3D Shader入门指南(二) 关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果您在Shader开发上有所心得,很欢迎并恳请您指出文中纰漏,我会尽快改正.在之前的开篇中介绍了一些Shader的基本知识,包括ShaderLab的基本结构和语法,以及简单逐句地讲解了一个基本的shader.在具有这些基础知识后,阅读简单的sha