兰伯特定律(Lambert is law);

反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比;

漫反射公式:C diffuse=(C light * M diffuse)max(0, <N*<L)

(入射光线 的颜色和强度 * 材质 的漫反射系数)max(0, 表面法线 *光源方向的点积)

弊端就是在模型光照无法达到的区域通常是全黑的,没有任何明暗变化。

半兰伯特光照模(Half Lambert);

C diffuse=(C light * M diffuse)(0.5( <N*<L)+0.5)

背面无光也可以有明暗变化

半兰伯特是没有任何物理依据的,他仅仅是一个视觉加强技术


shader "Unity Shader Book/Chapter6/HalfLambert"{
    properties{
        _Diffuse("Diffuse",Color) = (1,1,1,1)
    }
    SubShader{
            pass {
                Tags{"LightMode" = "ForwardBase"}

CGPROGRAM
#pragma vertex vert
#pragma fragment frag

#include "Lighting.cginc"
                    fixed4 _Diffuse;

struct a2v {
                    float4 vertex:POSITION;
                    float3 normal:NORMAL;
                };

struct v2f {
                    float4 pos:SV_POSITION;
                    float3 worldNormal:COLOR;
                };

v2f vert(a2v v) {
                    v2f o;
                    o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                    o.worldNormal = mul(v.normal, (float3x3)_World2Object);
                    return o;
                }

fixed4 frag(v2f i) :SV_Target{
                    fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
                    fixed worldNormal = normalize(i.worldNormal);
                    fixed worldLightDir = normalize(_WorldSpaceLightPos0.xyz);

//半兰伯特光照
                    fixed halfLambert = dot(worldNormal, worldLightDir)*0.5 + 0.5;
                    fixed3 diffuse = _LightColor0.rgb*_Diffuse.rgb*halfLambert;

fixed3 color = ambient + diffuse;
                    return fixed4(color, 1.0);
                }
                    ENDCG
            }
    }
}

漫反射:兰伯特和半兰伯特相关推荐

  1. Unity Shader漫反射光照模型与半兰伯特光照模型

    文章目录 一.基础光照模型中漫反射部分的计算公式 二.逐顶点光照实现 逐顶点代码 逐顶点效果图 三.逐像素光照模型实现 逐像素代码 逐像素效果图 四.半兰伯特光照模型实现 广义半兰伯特光照模型公式 半 ...

  2. 9.半兰伯特光照模型

    前情提要:前面一节的漫反射实际上是根据兰伯特光照模型来进行实现的 但这种做法有个缺点就是顶点法线和光的夹角大于90度的时候的成色是完全黑的这和我们生活中见到的事物是不一样的.所以就有了新的光照模型-- ...

  3. Shader学习3——半兰伯特

    半兰伯特其实就是把暗的地方提亮了一些,在数值上就是获取到的光源强度* 0.5 + 0.5,也就是原来是0的会变成0.5,原来是1的还是1. 半兰伯特:漫反射颜色 = 光源颜色 x 材质的漫反射颜色 x ...

  4. 兰伯特光照模型(Lambert Lighting)和半兰伯特光照模型(Half-Lanbert)

    关于漫反射 光打到凹凸不平的平面上,光线会被反射到四面八方,被称为漫反射 关于这种模型,由于光线由于分散,所以进入人眼的光线强度和观察角度没有区别 在A点和B点接收到的光线强度是一样的 在漫反射下,光 ...

  5. 【Unity Shader】(2)半兰伯特模型 构建光照

    在unity的Shader中使用半兰伯特模型来构建光照 在认识半兰伯特模型之前,建议查看一下我之前的兰伯特模型构建光照 兰伯特光照模型 半兰伯特光照模型 由于兰伯特模型的计算公式仅截取了[0,1]的光 ...

  6. 6.2 漫反射-半兰伯特

    //漫反射 半兰伯特 diffuse = (c.m)(0.5(n.i)+0.5) //模型背光面有可以有明暗变化 Shader "Unity shader book/Chapter 6/Ha ...

  7. Unity shader学习-漫反射-兰伯特光照模型和半兰伯特光照模型

    兰伯特漫反射公式:Diffuse = 直射光颜色 *物体颜色* max(0,cos夹角(光和法线的夹角) ) 下面给出顶点漫反射代码:   Shader "Unlit/005" { ...

  8. Unity shader 使用 半兰伯特 (Half-Lambert)漫反射会使得模型在没有直射光的情况下漆黑一片

    问题: Unity shader 使用 半兰伯特 (Half-Lambert)漫反射会使得模型在没有直射光的情况下漆黑一片,原因不得而知. 使用半兰伯特漫反射代码如下: *************** ...

  9. U3D Shader半兰伯特模型

    兰伯特光照模型--在平面某点漫反射光的光强与该反射点的法向量和入射光角度的余弦值成正比.逐像素光照可以得到更加哦平滑的光照效果.但是,即便使用了逐像素漫反射光照,有一个问题仍然存在.在光照无法达到的区 ...

最新文章

  1. 回归算法分类,常用回归算法解析
  2. java多线程之锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
  3. ORACLE 计算时间相减间隔
  4. [WPF]自定义鼠标指针
  5. Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?
  6. 【学术相关】IEEE TBD, 这个Trans刚被SCI收录,预计首个IF4
  7. Sqlserver别太信任SysComments表中的text字段
  8. 西南科技大学计算机综合大纲,2019年西南科技大学信息工程学院考研复试大纲...
  9. SQL将金额转换为汉子
  10. Qt实现 QQ好友列表QToolBox
  11. 教你破资深加密工具lockdir.exe加密后的文件
  12. 7216:Minecraft题解
  13. 第一周CorelDRAW课
  14. python爬取网页数据总结_pycharm爬取网页数据
  15. Win10系统怎么还原?Win10如何回到以前的系统
  16. electron通过注册表打开软件
  17. Postaman 报错:Could not get the lock, quitting
  18. HDU 4125 Moles 二叉排序树 树状数组 kmp
  19. 销售人员如何打电话?
  20. 无聊的农场 - vue小游戏

热门文章

  1. 键盘录入两个整数,分别赋值给int变量x,y然后比较x和y的大小
  2. 内存条坏了 一般会出现什么情况?
  3. Android常见内存泄漏及优化总结
  4. 听说这本RPA的书卖火了,你现在读还来得及
  5. busybox+交叉编译器源码制作根文件系统
  6. 南邮 OJ 1176 高斯求和
  7. 2018-2019 ACM-ICPC沈阳(C,J)
  8. Sql 查询学生成绩表中每个科目的最高分及对应科目和学生
  9. 石康,你别再让我越来越厌恶了,行不行
  10. python vlookup_多条件python中的Vlookup