兰伯特余弦定理(Lambert)

1.漫反射,是投射在粗糙表面上的光向各个方向反射的现象。当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”。这种反射的光称为漫射光。很多物体,如植物、墙壁、衣服等,其表面粗看起来似乎是平滑,但用放大镜仔细观察,就会看到其表面是凹凸不平的,所以本来是平行的太阳光被这些表面反射后,弥漫地射向不同方向(https://blog.csdn.net/qq_34552886/article/details/79537166)。

2. 关于光照强烈度的思考
垂直照向平面的线比从侧面照向平面的线更加强烈(见下图)。

假设有一块很小的区域dA。当法线向量n与光照向量L平行时,区域dA受到的光线照射最多。随着n和L之间的夹角θ逐渐增大,区域dA受到的光线照射量会越来越少 (因为很多光线都无法照射到dA表面上了)。

3. 推导兰伯特(Lambert)余弦定理
们可以从这个概念中推导出一个函数,根据顶点法线和光照向量之间的夹角返回不同的光照强度。(注意,光照向量是从表面指向光源的向量;也就是,它与线的传播方向正好相反。)当顶点法线与照向量完全重叠时(即,它们的角度为0º时),该函数返回最大强度值;随着顶点法线与照向量之间的夹角逐渐增大,该函数返回的强度值会越来越小。当θ>90º时,说明光线照射的是物体背面,此时我们应该将强度设置为0。兰伯特(Lambert)余弦定理给出了上述函数的定义:
f(θ) = max(cosθ,0) = max(L•n,0)

其中,L和n是单位向量。下图是f(θ)的曲线图。我们可以看到,随着θ的变化,强度在0.0到1.0(即,0%到100%)之间变化。

(当−2≤θ≤ 2时,函数f(θ) = max(cosθ,0) = max(L•n,0)的曲线图。注意,π/2≈1.57。)
来源:https://blog.csdn.net/sinat_24229853/article/details/48865037

兰伯特余弦定理(Lambert)的更多相关文章

  1. 求解轨道力学二体意义下的Lambert方程(兰伯特方程)的Fortran程序

    轨道力学中二体问题下求解兰伯特方程. 老外写的Matlab程序,我把它转成了Fortran程序. !************************************************** ...

  2. Lambert (兰伯特)光照模型

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

  3. shader之半兰伯特漫反射

    看很多人实现shader都用插件shader force,那我还学shader干X!!!??? 好了,废话不多说,学习shader去.... 漫反射在shader里算是最基础的知识了.入手shader ...

  4. Unity shader学习之半兰伯特光照模型

    半兰伯特光照模型,为Valve公司在开发游戏<半条命>时提出的一种技术,用于解决漫反射光无法到达区域无任凭明暗变化,丢失模型细节表现的问题. 其公式如下: Cdiffuse = Cligh ...

  5. 【Unity Shader学习笔记】Unity光照基础-半兰伯特光照

    在光照无法达到的区域,模型的外观通常是全黑的,没有任何明暗变化,这会使模型的背光区域看起来就像一个平面. 使用半兰伯特光照可以解决这个问题. 逐顶点光照技术也被称为兰伯特光照模型.因为它符合兰伯特定律 ...

  6. Unity3D Shader 半兰伯特光照模型

    //效果预览 //Shader代码 Shader "Unlit/HalfLambert" { Properties { _MainTex ("Texture", ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第八章:光照

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第八章:光照 代码工程地址: https://github.com/j ...

  8. Lyft押重注于苹果编程语言Swift

    Lyft押重注于苹果编程语言Swift 1年后获得丰厚回报BI中文站 8月22日报道 一年多以前,打车应用Lyft做出重大决定,决心押重注于苹果开发的编程语言Swift,用这种编程语言重写其所有iPh ...

  9. Unity shader学习之逐像素漫反射光照模型

    shader如下: Shader "Custom/Diffuse Fragment-Level" { Properties { _Diffuse (,,,) } SubShader ...

随机推荐

  1. Effective.Java第45-55条(规范相关)

    45.  明智谨慎地使用Stream 46.  优先考虑流中无副作用的函数 47.  优先使用Collection而不是Stream作为方法的返回类型 48.  谨慎使用流并行 49.  检查参数有效 ...

  2. Reliable Multicast Programming(PGM)协议

    Reliable Multicast Programming (PGM)实际通用可靠多播协议,在某种程度上保证多播的可靠性.是IP上层协议,和TCP还有UDP同级,工作在传输层. 在组播传输视频项目中 ...

  3. es+logstash+kibana搭建

    1.简介 ELK(elasticsearch+logstash+kibana)是目前比较常用的日志分析系统,包括日志收集(logstash),日志存储搜索(elasticsearch),展示查询(ki ...

  4. 【LeetCode】48. Rotate Image

    Difficulty:medium  More:[目录]LeetCode Java实现 Description https://leetcode.com/problems/rotate-image/ ...

  5. 小结 python 实战中遇到的几种需要化名的情境

    笑来在<自学是门手艺>的<2.4.3 化名与匿名>中,讲到了函数的化名.经过几个月的实战,我发现,实际上化名无处不在.我有时也会称之为"别称",意思一样.函 ...

  6. pycharm_python_flask相关学习心得逐步更新

    2019-10-30: Pycharm的interpreter配置问题对于安装第三方库,如果能够在配置的可视化界面安装成功更好.如果不能可视化安装,则在pycharm的terri..仿cmd下用pip ...

  7. 阿里云RDS数据库sql server 导入数据并添加作业小结

    在阿里云购买ECS服务器和RDS数据库时,要注意网络类型要一致,最好都是VPC,否则ECS不能在内网访问RDS,只能从外网访问:在RDS控制台左侧,数据库安全性的IP白名单中添加ECS外网IP:在数据 ...

  8. 简单的C#日志记录和弹出提示

    记录这个博客的想法只有两点, 一,在使用webserver的时候如果你不好调用本地server端,那么你可以启用日志来查看异常.当然也可以调用本地的server端.这里简单说一下.不是本文的重点. 发 ...

  9. Matlab桥接模式

    桥接模式(Bridge)是一种结构型设计模式.它是用组合关系代替继承关系来实现,可以处理多维度变化的场景(https://blog.csdn.net/qq_31156277/article/detai ...

  10. toString()和Object.prototype.toString.call() 不一样

    var arr=[1,2,3];arr.toString()//输出“1,2,3”Object.prototype.toString.call(arr)//输出 "[object Array ...