关于漫反射

光打到凹凸不平的平面上,光线会被反射到四面八方,被称为漫反射

关于这种模型,由于光线由于分散,所以进入人眼的光线强度和观察角度没有区别

在A点和B点接收到的光线强度是一样的

在漫反射下,光线强度只和光的入射角度有关

关于法线和叉乘

法线,是指始终垂直于某平面的虚线,这是在二维平面下的法线

叉乘是求一条垂直于平面的向量

可以用叉乘求出物体的法线

关于点乘

点乘表示A在B方向上的投影与B方向的乘机,反映了两个向量在方向上的相似度

计算公式为:

兰伯特光照模型(Lambert Lighting)

diffuse = I*cosθ

其中I为入射光强度

cosθ为光源方向和顶点法线的余弦,也就是两者的点乘,这个值越大,则cosθ越大

但是如果光在物体背面,则这个值为负数,于是就归为0就可以了

然后再乘上材质的颜色就是最后的颜色值了,也就是下面的完全公式

Diffuse = 直射光颜色 *材质颜色 * max(0,cos夹角(光和法线的夹角))

在辐射度量学之前,图形学一直处于一个想当然的境地

这个公式是在1760年提出来的,这个公式完全是经验公式,看起来像那么回事就可以了

但是兰伯特光照模型有个弊端,就是在物体打不着光的一面完全是黑色的,会“不那么好看”

于是就有了半兰伯特光照模型

半兰伯特光照模型(Half-Lanbert)

在1998的《半条命》的游戏引擎中,使用了半兰伯特的光照模型

这是Valve官方开发者文档上的原句

"Half Lambert" lighting is a technique first developed in the original Half-Life.

Half Lambert - Valve Developer Community (valvesoftware.com)

在半兰伯特光照模型公式中

Diffuse = 直射光颜色 * 材质颜色 * (dot(光源方向, 法线方向) * 0.5 + 0.5)

在光在物体的背面的时候,最后的计算结果也会有明暗变化

这样物体就会”好看多了“

兰伯特光照模型(Lambert Lighting)和半兰伯特光照模型(Half-Lanbert)相关推荐

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

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

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

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

  3. 兰伯特(Lambert)光照模型总结

    兰伯特光照模型是经验模型,主要用来模拟粗糙物体表面的光照现象,即漫反射. 漫反射特点 1:反射强度与观察者的角度没有关系 2:反射强度与光线的入射角度有关系 漫反射光照符合兰伯特定律(Lambert' ...

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

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

  5. 标准光照模型-半兰伯特模型

    Valve公司在<半条命>中提出了一种技术,叫做半兰伯特光照模型 通过这个方式,可以把点积的结果从[-1,1]到[0,1]范围内,也就是说,对于模型的背光面,从原模型中点积结果会映射到同一 ...

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

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

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

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

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

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

  9. 漫反射:兰伯特和半兰伯特

    兰伯特定律(Lambert is law); 反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比: 漫反射公式:C diffuse=(C light * M diffuse)max(0, < ...

最新文章

  1. c语言中 允许函数重载么,简述C++语言支持函数重载问题介绍
  2. delphi SAP
  3. MyBatisPLus3.x中代码生成器自定义数据库表字段类型转换
  4. Kettle使用_18 分组组件计算百分位数
  5. 小便利——免密钥简单写法
  6. 3d vision可以卸载吗_金属粉末可以用于3D打印,但这些知识你了解吗?
  7. zabbix监控suse linux,SuSE 系统之部署 Zabbix 监控服务
  8. 解决maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2
  9. python上网行为分析_python实战练手项目---获取谷歌浏览器的历史记录,分析一个人的上网行为...
  10. javascript动画系列第二篇——磁性吸附
  11. 勤哲excel服务器端口协议,用勤哲Excel服务器实现管理完整.doc
  12. 程序员转实施工程师_实施工程师到底做什么的?我认为比程序员接触面更广
  13. qrc路径_Qt中的qrc文件
  14. 黑客是怎么攻击网站的(网站渗透入侵全部教程)
  15. BP神经网络算法及Matlab实现
  16. three.js中正交和透视投影相机的应用
  17. 银行家算法02--申请资源 (操作系统)
  18. 手机淘宝——flexible.js 移动端自适应方案
  19. iOS 打开第三方应用
  20. 小米手机MIUI关闭广告

热门文章

  1. C语言qsort多种用法
  2. 干货|我的剪辑软件使用经历
  3. 数据库常见面试题——索引
  4. Domain Adaptive SiamRPN++ for Object Tracking in the Wild
  5. 2019滴滴前端面试总结(一面)
  6. Android App活动页面
  7. 超级计算机计算山东下雨,山东还有暴雨吗?超级计算机:急流略南调,大暴雨会出现在这里...
  8. 1项开源3篇顶会,漫游阿里妈妈外投广告预估模型优化之路
  9. 数据挖掘中所需的概率论与数理统计知识,上
  10. C++多线程以及线程池