来源:《UNITY SHADER入门精要》

文章目录

  • 1、BRDF光照模型
  • 2、自发光和环境光
  • 3、漫反射
    • ①兰伯特光照模型
    • ②半兰伯特光照模型
  • 4、镜面反射
    • ①冯氏模型的镜面反射计算
    • ②Blinn-Phong光照算法
  • 5、光线的计算方式
  • 6、Blinn-Phong模型

1、BRDF光照模型

  BRDF模型(Bidirectional Relfectance Distribution Function,双向反射分布函数),在图形学中,BRDF大多用一个参数方程来表示,并提供一些可以调整材质属性的参数。当给定入射光线的方向和辐照度后,BRDF可以给出在某个出射方向上光照能量分布。

2、自发光和环境光

  自发光和环境光都很好计算。环境光(ambient),自发光(emissive):
c a m b i e n t = g a m b i e n t c e m i s s i v e = m e m i s s i v e c_{ambient}=g_{ambient} \\ c_{emissive}=m_{emissive} cambient​=gambient​cemissive​=memissive​

3、漫反射

①兰伯特光照模型

  漫反射中,视角的位置不重要,因为反射是完全随机的,我们认为在任何反射方向上的分部都是一样的。视角的位置不重要,只有入射光线的角度很重要。
  漫反射光照符合 兰伯特定律(Lambet’s law):
c d i f f u s e = ( c l i g h t ⋅ m d i f f u s e ) max ⁡ ( 0 , n ⋅ I ) \boldsymbol{c}_{diffuse}=\left( \boldsymbol{c}_{light}\cdot \boldsymbol{m}_{diffuse} \right) \max \left( 0, n\,\,\cdot \,\,I \right) cdiffuse​=(clight​⋅mdiffuse​)max(0,n⋅I)
  其中,n 是表面法线,I 是只想广元的单位矢量,$\boldsymbol{m}{diffuse} , , ,\boldsymbol{c}{light}$ 是光源颜色。需要注意的是,我们需要防止法线和光源方向点乘的结果为负值,为此,我们使用取最大值的函数来将其截取到0,这可以防止物体被从后面来的光源照亮。

②半兰伯特光照模型

  相比之前的公式,多了 α \alpha α 和 β \beta β 两个参数,绝大多数情况下,这两个参数值都是 0.5。所以被称为半兰伯特光照模型。
c d i f f u s e = ( c l i g h t ⋅ m d i f f u s e ) ( α ( 0 , n ^ ⋅ I ) + β ) \boldsymbol{c}_{diffuse}=\left( \boldsymbol{c}_{light}\cdot \boldsymbol{m}_{diffuse} \right) \left( \alpha \left( 0,\hat{n}\,\,\cdot \,\,\boldsymbol{I} \right) +\beta \right) cdiffuse​=(clight​⋅mdiffuse​)(α(0,n^⋅I)+β)

4、镜面反射

①冯氏模型的镜面反射计算

  计算镜面反射我们需要知道的信息就比较多了,比如:表面法线 n ^ \hat{n} n^ 、视角方向 v ^ \hat{v} v^ 、光源方向 I \boldsymbol{I} I 、反射方向 r \boldsymbol{r} r 。
  只要眼睛(摄像机)在反射光线周围都可以看得到高光,越靠近 r ^ \hat{r} r^ 反射光照强度越大。我们可以得出一条结论:高光反射和观察角度有关。phong模型中认为,高光反射的强度与反射光线 r ^ \hat{r} r^ 和观察角度 v ^ \hat{v} v^ 之间夹角的余弦值成正比。
  我们知道其中三个矢量,我们需要计算的是第四个矢量——反射方向。
r = 2 ( n ^ ⋅ I ) n ^ − I \boldsymbol{r}=2\left( \hat{n}\cdot \boldsymbol{I} \right) \hat{n}-\boldsymbol{I} r=2(n^⋅I)n^−I
  然后,我们利用 冯氏光照模型 来计算镜面反射:
c s p c u l a r = ( c l i g h t ⋅ m s p e c u l a r ) max ⁡ ( 0 , v ^ ⋅ r ) m g l o s s \boldsymbol{c}_{spcular}=\left( \boldsymbol{c}_{light}\cdot \boldsymbol{m}_{specular} \right) \max \left( 0, \hat{v}\,\,\cdot \,\,\boldsymbol{r} \right) ^{m_{gloss}} cspcular​=(clight​⋅mspecular​)max(0,v^⋅r)mgloss​
  其中 m g l o s s m_{gloss} mgloss​ 是材质的光泽度(gloss),也可称为反光度(shininess),它用于控制高光区域的“亮点”。 m g l o s s m_{gloss} mgloss​ 越大,亮点越小。
   m s p e c u l a r \boldsymbol{m}_{specular} mspecular​ 是材质的高光反射颜色,用于控制材质对高光反射的强度和颜色。
   c l i g h t \boldsymbol{c}_{light} clight​ 是光源的颜色和强度。
  同样,我们这里用 max() 来防止 v ^ ⋅ r \hat{v}\,\,\cdot \,\,\boldsymbol{r} v^⋅r 为负。

②Blinn-Phong光照算法

  相比Phong模型,此算法引入了一个新的矢量 h ^ \boldsymbol{\hat{h}} h^,称之为半程向量(bisecoter)。它是对 v ^ \hat{v} v^ 和 I ^ \hat{I} I^取平均,然后再归一化得到:
h ^ = v ^ + I ∣ v ^ + I ∣ \mathbf{\hat{h}}=\frac{\mathbf{\hat{v}}+\boldsymbol{I}}{|\mathbf{\hat{v}}+\boldsymbol{I}|} h^=∣v^+I∣v^+I​
  我们不再计算 v ^ \hat{v} v^ 和 r ^ \hat{r} r^ 之间的夹角,转而计算 n ^ \hat{n} n^ 和 h ^ \hat{h} h^ 之间的夹角:
c s p c u l a r = ( c l i g h t ⋅ m s p e c u l a r ) max ⁡ ( 0 , n ^ ⋅ h ^ ) m g l o s s \boldsymbol{c}_{spcular}=\left( \boldsymbol{c}_{light}\cdot \boldsymbol{m}_{specular} \right) \max \left( 0,\hat{n}\,\,\cdot \,\,\hat{h} \right) ^{m_{gloss}} cspcular​=(clight​⋅mspecular​)max(0,n^⋅h^)mgloss​
  在硬件实现时,如果摄像机和光源距离模型足够远的话,Blinn模型会快于Phong模型,这是因为,此时可以认为 v ^ \hat{v} v^ 和 I I I 都是定值,因此 h ^ \hat{h} h^ 是一个常量。但是, v ^ \hat{v} v^ 当或者 I I I 不是定值时,Phong模型可能反而更快一些。

5、光线的计算方式

  我们有两种计算方式,交给 顶点着色器 或者 片元着色器。顶点着色器中计算的过程叫做逐顶点光照(per-vertex lighting);片元着色器中计算的过程称之为逐像素光照(per-pixel lighting)
  逐顶点光照,也被称之为高洛德着色(Gouraud shading)。我们计算每个顶点上的光照,然后再渲染图元的内部进行现行差值,最后输出成像素颜色。计算量会小于逐像素点光照。但是,因为是线性插值计算,所以图元的内部颜色总是暗于顶点处的最高颜色值,有可能产生明显的棱角分明的现象。
  逐像素光照,我们以每个像素为基础,得到它的法线(可以对顶点法线插值得到,也可以从法线纹理中采样得到),然后通过每个像素的法线值来计算光照。

6、Blinn-Phong模型

  我们现在所采用的光照模型被称为Phong光照模型,因为是裴祥风(Bui Tuong Phong)首次使用 漫反射 和 镜面反射 来对光照进行建模。后面,由于Blinn的方法简化了计算,我们将这种模型称为Blinn-Phong光照模型
  当然,这种模型也有很多局限性。 比如,**菲涅尔反射(Fresnel reflection)无法展现出来。其次,Blinn-Phong模型是各项同性(isotropic)的,也就是说,当我们固定视角和光源方向旋转这个表面时,反射不会发生任何改变。但有些表面是具有各向异性(anisotropic)**反射性质的,例如拉丝金属、毛发等。

【图形学】16 光照模型(一、理论与公式)相关推荐

  1. 简单 局部 整体光照模型计算机图形学,计算机图形学北大光照模型.ppt

    计算机图形学北大光照模型 * 当来自光源和周围环境的入射光照射在景物表面上时,将有部分光被反射或透射: 在视线方向的反射或透射光,被观察者眼睛中的视觉细胞接收 人眼中的杆状及锥状细胞接收光线,产生视觉 ...

  2. 计算机图形学阴影的的分类,计算机图形学8_光照模型与阴影处理_.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp图形图像 计算机图形学8_光照模型与阴影处理_.pdf5页 本文 ...

  3. Excel中16进制递增、公式后加符号显示的方法

    Excel中16进制递增.公式后加符号显示的方法 2012年11月21日18:16:11 想做一张8086的中断向量表.用到了Excel中的进制转换函数.求商返回商整数部分的函数. 方法: 1.先用一 ...

  4. 真实图形学(光照模型)

    一 .颜色模型     真实感图形学,简单地说,就是希望用计算机生成像照相机拍的照片一样逼真的图形图像 .要实现这个目标,需要三部曲: 第一步:建立三维场景(建模): 第二步:消隐解决物体深度的显示及 ...

  5. 【图形学】光照模型-从最简单开始到BRDF实现

    不积跬步无以至千里,想要了解复杂的光照模型,就要从最简单的入手,看看他们是如何一步步"进化"成完善的样子.每天300字,看看能否在一个月能完结这个主题吧~ 首先从基本光照模型开始: ...

  6. 引导滤波算法理论及公式的推导

    高斯滤波考虑了像素间的距离关系,会模糊边缘: 双边滤波同时考虑了像素间的距离关系以及相似度关系,对于边缘有一定的保护(边缘同侧相速度高).引导滤波同样是保边滤波,由于直接判断梯度,细节的保护上比双边滤 ...

  7. 入门图形学:光照模型(四)

    紧接上一篇:https://blog.csdn.net/yinhun2012/article/details/80924102 上一篇我们用cg中比较常见的vertex fragment函数去实现了通 ...

  8. 自动驾驶基本理论——Ackerman公式

    在做控制算法,一直有Ackerman公式如何让在实际系统中应用不是很清晰.如下图所示,笔者绘制了下图,清晰阐述了Ackerman在实际工程中是如何应用的 tanθ=L/R L是轴距,R是弧半径.Θ弧夹 ...

  9. 入门图形学:光照模型(二)

    转载自: https://blog.csdn.net/yinhun2012/article/details/80912620 前面我们谈到了光照作用最终表面颜色公式,如下: 查看全文 http://w ...

最新文章

  1. Apache服务器的WSASocket failed to open the inherited socket错误
  2. ubuntu获取root权限_群辉 SSH 获取 root 权限
  3. Kaggle比赛源代码和讨论的收集整理
  4. 【CyberSecurityLearning 29】Linux下命令帮助、压缩、vim、软件安装
  5. 三年深入探索,网易云信让在线医疗做到技术“在线”
  6. 竟然能从一维空间变换为四维空间!?
  7. Android代码命名规范
  8. 数据挖掘基础学习一:VMware虚拟机Ubuntu上安装Python和IPython Notebook(Jupyter Notebook)完整步骤及需要注意的问题(以ubuntu-18.04.3为例)
  9. mac 如何安装ipython_Mac中如何快速安装Jenkins
  10. 视频编辑,4k播放,3D游戏, 阿里云图形工作站,了解一下?
  11. php正则表达式 包含特殊字符,php正则表达式的特殊字符含义
  12. [渝粤教育] 山东大学 日本历史与文化 参考 资料
  13. AI-终极算法-遗传算法
  14. ioswifi信号测试软件app,‎App Store 上的“Speedtest - 网络测速测量和wifi分析仪”...
  15. modelica练习
  16. 什么是单片机中的掉电复位(BOR)?如何防止错误掉电
  17. 魅族M9同步谷歌联系人
  18. logstash 日志_面试和书评:LogStash书,使日志管理变得容易
  19. MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法
  20. 极豆科技加入飞桨技术伙伴计划,共筑智能网联汽车新生态

热门文章

  1. 基于Android家教app计算机毕业设计
  2. 金蝶云星空与钉钉对接集成客户查询连通更新表单数据(宜搭)(basic-(新环境)更新客户)
  3. Mapbox的是最新中文API(一),www_ww_ww原创Mapbox Android SDK
  4. Zabbix监控SQL Server数据库
  5. 保单OCR识别技术介绍
  6. 湖北三本计算机排名2015,湖北三本大学排名2015.doc
  7. 安卓开发快速入门之 代码阅读技巧(二)
  8. 學習日記,java与写题目
  9. c语言解魔方程序,魔方程序C语言代码.doc
  10. 如何在keil5中新建.c和.h文件?