Lambert (兰伯特)光照模型

  是光源照射到物体表面后,向四面八方反射,产生的漫反射效果。这是一种理想的漫反射光照模型。如下图:这个是顶点函数处理后的该光照模型,因此看起来像素不够平滑。

漫反射

  是投射在粗糙表面上的光向各个方向反射的现象。当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”。这种反射的光称为漫射光。

Lambert光照模型计算方法

  漫反射光的强度近似地服从于Lambert定律,即漫反射光的光强仅与入射光的方向和反射点处表面法向夹角的余弦成正比。

  原理公式:diffuse = I*cosθ;

    diffuse:反射光线的的光强;

    I:入射光线的光强,方向如上图所示;

    cosθ:入射光线和该顶点法线的余弦,如上图所示;cosθ = L*N;

  所以,最后的数学表达式为:diffuse = I*(L*N);

Shader程序

 1 /*******************************************2 Lambert(兰伯特)光照模型3     1. 理想的漫反射;4     2. 计算都在顶点着色器,因此像素不会平滑过渡;5 *******************************************/6 Shader "JQM/Lambert"7 {8     Properties9     {
10         _Color("Color", color) = (1.0,1.0,1.0,1.0)
11     }
12     SubShader{
13         Pass{
14
15             Tags { "LightMode" = "ForwardBase"}
16
17             CGPROGRAM
18             #pragma vertex vert
19             #pragma fragment frag
20
21             //使用自定义变量
22             uniform float4 _Color;
23
24             //使用Unity定义的变量
25             uniform float4 _LightColor0;
26
27             struct vertexInput{
28                 float4 vertex:POSITION;
29                 float3 normal:NORMAL;
30             };
31
32             struct vertexOutput{
33                 float4 pos:SV_POSITION;
34                 float4 col:COLOR;
35             };
36
37             //顶点程序
38             vertexOutput vert(vertexInput v)
39             {
40                 vertexOutput o;
41
42                 float3 normalDirection = normalize( mul(float4(v.normal,0.0),_World2Object).xyz);//将模型空间的法线转到世界空间
43                 float3 lightDirection;
44                 float atten = 1.0;
45
46                 lightDirection = normalize(_WorldSpaceLightPos0.xyz);//灯光方向
47                 float3 diffuseReflection = atten * _LightColor0.xyz *  max(0.0, dot(normalDirection,lightDirection));//计算兰伯特漫反射
48                 float3 lightFinal = diffuseReflection + UNITY_LIGHTMODEL_AMBIENT.xyz;//与环境光结合
49
50                 o.col = float4(lightFinal*_Color.rgb,1.0);
51                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
52                 return o;
53             }
54
55             //片段程序
56             float4 frag(vertexOutput i):COLOR
57             {
58                 return i.col;
59             }
60
61             ENDCG
62         }
63     }
64
65 }

效果图

物体在空间中 受到 光源 环境光 和 自身材质(颜色,贴图) 的综合因素的影响,形成的效果。

Lambert (兰伯特)光照模型相关推荐

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

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

  2. shader基础学习摘要(二) 兰伯特光照模型

    在第6.4节中,书中给出了计算基本光照模型中漫反射光部分的计算公式分别表示为: 目录 漫反射模型 逐像素光照(逐顶点光照改进版) 逐顶点光照(兰伯特原版) 半兰伯特光照模型 漫反射模型 兰伯特定律:反 ...

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

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

  4. 庄懂老师TA学习笔记 - 半兰伯特光照模型

    先看一下兰伯特光照模型的公式 Max(0, nDir ·lDir) 通过公式我们知道,当法线方向和光照方向的反方向的角度大于90度时,点乘就会出现负数的结果,所以我们使用与0取最大值来排除掉这些没有实 ...

  5. 光照模型-兰伯特光照模型

    兰伯特光照模型理论基础

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

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

  7. 伪兰伯特光照模型处理阴影过渡

    默认shader的光照过渡太明显,不够柔和,使用伪兰伯特光照模型进行处理 伪兰伯特 默认材质 Shader "Custom/SimulateLambert" {Properties ...

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

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

  9. lambert(兰伯特)投影 应用工具_全息投影技术,在哪些场地可以用到

    全息投影技术,也称为虚拟成像技术,应该是大家都熟悉的.它不仅能产生立体的空中视觉,还能使视觉与人互动,产生震撼的效果.它有广泛的应用场景,可以根据不同的应用环境灵活改变,新起典给你介绍全息投影技术在哪 ...

  10. python语言描述兰伯特pdf_数据结构PYTHON语言描述 [美] Kenneth A. Lambert 兰伯特

    第1章 Python编程基础 1 1.1 基本程序要素 1 1.1.1 程序和模块 1 1.1.2 Python程序示例:猜数字 1 1.1.3 编辑.编译并运行 Python程序 2 1.1.4 程 ...

最新文章

  1. 2022-2028年现代农业背景下中国家庭农场深度调研及投资前景预测报告
  2. Console-算法-一个偶数总能表示为两个素数之和
  3. DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.Net2.0(ver 3.0.9Beta)
  4. java实验3 2020.4.6
  5. 微信小程序,引用扩展组件提示“没有找到可以构建的NPM包”
  6. instagram技术_Instagram9位科技女孩进行技术采访的主要技巧
  7. c语言程序设计k.r,【答题】C语言程序设计问题与解释实验
  8. Ios开发之定位CLLocationManager
  9. python爬虫入门四:BeautifulSoup库(转)
  10. 微信公众平台开发(一) 配置接口
  11. DELPHI 获取本月 的第一天 和 最后一天
  12. 南阳理工acm449 不再爱你……
  13. 用VFP实现一个网盘软件,上传,下载,删除一个不少
  14. 学JS必读,《JavaScript高级程序设计(第3版)》
  15. 散户真的能战胜大庄家么?股市庄家的赚钱手法!
  16. 人工智能—— 产生式表示法
  17. JS Event Propagation (bubbling and capture)
  18. 计算机桌面有浮层,电脑桌面悬浮窗记事本有吗?有可以悬浮在电脑桌面上的便签软件吗...
  19. 物流管理APP软件开发公司 让货运变得更简单
  20. VideoReader Failed to init Ubuntu 18.04

热门文章

  1. 每天15分钟中度或快步走以燃烧100卡路里的热量
  2. 摇一摇周边:微信是这样连接线下商户的
  3. Incapsula-国外的免费的CDN内容分发服务
  4. 周易正易 p1-100
  5. 计算机网络(思科)章节测试总结
  6. 关于python搞笑段子精选_搞笑却有哲理的段子
  7. [bzoj2144]: 跳跳棋
  8. 这些程序员常用快捷键你了解吗?让你的双手在键盘上起舞
  9. 二十四.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例
  10. 华三防火墙安全策略配置