基于光照的物理模型(一)
吸收与散射(透明与半透明)
当光线在非均匀介质或半透明材质中传播时,光线可以被吸收或者散射:
● 通过吸收,光的强度由于它转换成另外一种形式的能量(通过是热能)而变小,它的颜色也会因为对不同波长光的吸收不同而发生改变,但是光线的方向不发生改变。
● 通过散射,光线的方向随机发生改变,偏差的大小 取决于材质。散射随机改变光的方向但是并不会改变强度。耳朵是一个很好的例子,因为耳朵很薄(吸收少),所以你可以看到散射的光从耳朵背后射出。如果没有散射而吸收又很少,那么光线可以直接穿过诸如玻璃的表面。比如,你在一个池子里面游泳,希望它是干净的,那么当你打开双眼时,你会在干净的水中看很远的距离。然而,让我们假设在同一个池子中,但是不很脏,水中的小颗粒会散射光,这样水的能见度就会低很多。
漫反射和高光反射
高光反射是在表面被反射的光,就如我们在光线部分讨论的。光线经反射离开表面并且沿一个不同的方向传播。它遵循反射定律,在一个完全光滑的表面,反射角等于入射角。然而,大多数表面是不规则的并且反射的方向会根据表面的粗糙度来随机改变,知道这一点很重要。它改变了光的方向,但是光的强度并没有改变。
粗糙的表面会有一个较大且较暗的高光。光滑的表面会保持高光聚集,这样在特定的角度下它看上去会更亮或者说更强。然而两种情况下都是同等数量的光能被反射,如图1所示。
图01 越粗糙的表面有越大、越暗的高光
漫反射是经过折射的光。光线从一种介质传输到另外一种介质并且在物体内部散射了多次。然后它又被折射离开物体进入原来的介质里面,并且位置跟第一次进入时的位置差不多是同一个点,如果图02所示。
图02
漫反射材质是很能吸收的,这意味着如果折射的光线在材质里面传输过长的 话,它很有可能被完全吸收。这意味着光线不会从材质里面出来,它可能并没有传输多少的 距离。这就是为什么进入和离开表面的点之间的距离可以忽略不计。在传统着色系统中一直用于漫反射计算的Lambertian模型,不会计入表面粗糙度的影响,但是也有考虑粗糙度影响的Oren-Nayar模型。
同时拥有高散射率和低吸收率的材质有时候被称为参与介质(participating media)或者半透明材质。比如烟、牛奶、皮肤、翡翠、大理石。使用额外的次表面散射模型来渲染后三种物体是可能的,该模型会把光线进入和出射的点的距离计算进去。精确渲染如烟和雾此类变化多端的低散射率和吸收率的介质需要诸如蒙特卡罗模拟等更复杂的算法。
微表面理论
理论上,漫反射和高光反射都依赖于光线相交表面的不规则程度,粗糙度对于漫反射的影响比较小因为散射发生在材质内部。因此出射方向基本上跟表面的粗糙度和入射方向无关。最深用的漫反射模型(Lambertian)完全忽略它。
在这个文档里,我们把表面的不规则程度叫做粗糙度。实际上,它也有几个其它的名字,比如粗糙度、光滑程度、光泽度或者微表面,跟使用基于物理渲染工作流程有关,但是它们都是说的表面的同一个方面,它就是子纹素(sub-texel)几何细节。
表面的不规则程序表现在粗糙度或者光泽度贴图中,这取决于你使用的工作流程。一个基材物理的双向反射分布函数(BRDF)是基于微表面理论的,它假设表面是由所谓的不同方向的微小细节表面组成。每一个微小的平面都会根据它的法线方向在一个方向上反射光线,如图03所示。
图03
表面法线朝向光源方向和视线方向中间的微表面会反射可见光。然而,不是所有的表面法线和半角法线(half normal)相等的微表面都会反射光线,因为其中有些被遮挡(光源方向)或者掩蔽如上图03所示。
在微观层面上不规则的表面会造成光的漫反射。例如,模糊的反射是由于光线的散射造成的。反射的光线并不平等,因此我们收到的高光反射是模糊的,如图04所示。
图04在微观层面上不规则的表面会造成光的漫反射
颜色
表面的颜色(我们人眼看到的颜色)是由于光源发射出的波长和它被 物体吸收以及反射的漫反射和高光所决定的。剩下的被反射的波长的光就是我们看到的颜色。
例如,一个苹果的表面大部分反射红色的光线。只有波长为红色的光被散射回表面,其它的均被吸收了。如图05所示
图05
它也有跟光源颜色相同的高光,因为像苹果这样的绝缘体的表面的材质高光反射几乎是独立于波长的。因此,这种材质的高光反射是基本是都是没有被修改过颜色的(跟光源的颜色相同)我们会在接下来的章节中讨论不同材质(金属和非金属)。
双向反射分布函数(BRDF)
双向反射分布函数简单来说就是一个描述表面反射属性的一个函数。在计算机图形学中,有很多的不同的BRDF的模型,其中一些并不是基于物理的。一个BRDF要满足基于物理的特性,它必须是能量守恒的且相互的。对于相互的,我是指亥姆霍兹倒易律,它表明入射和出射光线可以在不影响BRDF值的情况下相互交换。
Substance使用的基于物理渲染的着色器(shaders)是基于迪斯尼的理论反射模型的(虚幻引擎的也是基于这个理论修改简化而来),它是基于GGX微表面分布。GGX在高光分布上要比其它方案好,它有一个较短的高光峰值和在衰减的部分有一个较长的尾部,这样它看上去就比较真实。如图06所示。
图06补充:GGX
直观来说GGX最大的特点就是高光周围有很漂亮的拖尾效果,请看现实世界中的高光反射
从真实拍摄的照片可以看出,高光反射部分呈现出中间小区域亮度极高,周围有一圈拖尾效果,GGX最重要的地方就是捕捉到了这种视觉现象,所谓Everything getsBetter With it也是指这一点,可以与GGX之前常用的Beckmann分布做比较,红色的是Beckmann分布,绿色的是GGX分布
Beckmann分布基本来自于高斯正态分布,所以顶部比较平滑,到边缘的过度也比较短,GGX分布有个尖锐的顶部和更宽的分布
能量守恒
能量守恒在基于物理渲染的解决方案中扮演着关键的角色。它表明被表面重新发射的光的总能量(反射和散射回来的)是小于它接收到的能量的总数的。换句话说就是,经过反射离开表面的光不会比到达表面的光的强度更强。作为美术,我们没有必要担心如何控制能量 守恒。这是基于物理渲染的最好的一个方面,能量守恒通过 着色器(shader)来强制保证。它是基于物理模型的一部分,这样我们就可以花更多的时间在如何制作出好的效果上而不是关注于物理实现上。
菲涅尔效果(Fresnel Effect)
菲涅尔反射因子作为BRDF的一个系数在基于物理渲染中也是一个非常重要的角色。由法国物理学家Augustin-Jean Fresnel发现的菲涅尔效果声明你从一个表面看到的反射光线的数量取决于你接收它时的观察角度。
比如,假设有一池水,如果你垂直于水的表面直接向下看,你可以很清楚的看到底部(假设水比较清澈)。以这种方式来观 察水的表面基本上为0度或者说是沿法线入射,法线是指表面的法线。现在,如果你以一个切线入射方向来观察水的表面,尽量平行于水面,那么你会看到水面上的高光反射变得更强,并且你可能完全看不到水底的样子。
基于物理渲染的菲涅尔效果并不像我们在传统着色模型中使用的那样。再次重申一次,它是基于物理渲染的着色器处理的另外一个物理特性。当在一个切线入射角观察表面时,所有光滑的表面在入射角为90度时会成为一个百分百的反射器。
对于粗糙表面来说,反射中高光部分会更多,但是不会达到百分百的高光反射。这个时候起决定作用的是微表面的法线和光线的夹角而不是宏观表面的法线和光线的夹角。因此光线被分散到不同的方向,反射会变得更柔和、更暗。在一个宏观层次上,你看到的效果可能 是微表面所有 菲涅尔效果的一个平均效果。
F0 (在0度角的时候菲涅尔反射值)
当光源垂直(0度角)到达表面时,其中一部分光作为高光反射回来。使用表面的折射率(IOR),你可以推导出反射回来的数量,这个值就被称为F0(Fresnel 0),如图09所示。被折射进入表面的光源的数量被称为1-F0。
图06对于粗糙表面来说,反射中高光部分会更多,但是不会达到百分百的高光反射
对于普通的绝缘体来说,F0的值一般在0.02到0.05之间,而对于导体来说F0的范围一般在0.5到1.0之间。因此 ,表面的反射能力是由下面的折射率公式决定的,如图7所示,它来自于Sebasien Lagarde's "Feeding a Physically-based Shading Model"这篇博文。
图7
F0的反射值是我们需要在制作贴图的过程中需要关注的。非金属(电介质/绝缘体)一般是一个灰度值,而金属(导体)会有一个RGB值。关于基于物理的渲染且从一个美术的角度来解释反射,我们可以说对于 普通的光滑绝缘体表面,F0会反射2%到5%的光线,而在切线角时会反射百分百的光线,如图06所示。
基于光照的物理模型(一)相关推荐
- 基于光照的物理模型(一)_使用基于物理的阴影:一种实用方法
基于光照的物理模型(一) Throughout the development of Unity 5, we've used our Viking Village project internally ...
- 深度学习阅读导航 | 05 基于光照感知深度神经网络的多光谱数据融合行人检测
文章目录 摘要 一.引言 二.相关研究 2.1 可见光和热感行人检测 2.2 多光谱行人检测 三.我们的方法 3.1 建议模型概述 3.2 光照全连接神经网络(IFCNN) 3.3 光照感知双流深度卷 ...
- 【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法...
光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...
- 基于物理着色:BRDF
知乎上难得的好文章,来自大牛,循序渐进,而且全,收藏! 作者:Maple 链接:https://zhuanlan.zhihu.com/p/21376124 来源:知乎 著作权归作者所有.商业转载请联系 ...
- (转)光照图的理论和实践
转自:http://www.cnblogs.com/minggoddess/archive/2012/12/03/2800133.html 光照图的理论和实践 这是我翻译的一篇文章,不知道哪年翻译的, ...
- 基于物理的渲染-用真实的环境光照亮物体
目前,在游戏引擎中用于照亮物体的光源非常丰富.其中,比较常用的有:平行方向光.点光源.聚光灯以及体积光等,但它们都是对真实光源的近似,并不能很好地模拟真实世界中的复杂光照情况.为了增加光照效果的真实感 ...
- UE4移动平台上基于物理的着色
Brian Karis 在 2014/09/10 21:41:17 | 功能 教程 程序 美术 Share on Facebook Share on Twitter Share on Googl ...
- 【光照感知子场:差分感知融合模块与中间融合策略相结合】
PIAFusion: A progressive infrared and visible image fusion network based on illumination aware 本文提出了 ...
- matlab人脸识别开题报告,基于人脸识别的出勤点名系统中特征提取算法研究开题报告...
基于人脸识别的出勤点名系统中特征提取算法研究 一.本课题研究的目的,意义 人脸识别是一项既有科学研究价值,又有广泛应用前景的研究课题.国际上大量研究人员几十年的研究取得了丰硕的研究成果,自动人脸识别技 ...
最新文章
- C#快速整理代码格式
- PHP的CURL报错的排查记录:短连接的成本真的很高啊
- pyqt设置按钮可用
- java构造方法嵌套,laravel查询构建器中的嵌套查询
- Spring MVC 4.1 支持jsonp
- python中Dict与OrderedDict
- 视觉测试_视觉设计流行测验
- java创建临时文件_用Java创建一个临时文件
- [软技能] 请说说使用iconfont图标的优点和缺点
- mybatis-plus主键配置、全局配置
- Telnet 爆破 kail_【UZI|SN输给DWG后,AD选手被爆破,弹幕刷了半小时Uzi】英雄联盟S10于10月31日终于正式落幕了_科技资讯...
- BZOJ4358: permu(带撤销并查集 不删除莫队)
- 分布式系统关注点(2)——烦人的数据不一致问题到底怎么解决?——通过“共识”达成数据一致性...
- nux 平台的 libpcap 源代码分析
- C#程序关闭时怎么关闭子线程
- 05.日志框架与Spring Boot日志全篇
- 【读书笔记】-《软件测试的艺术》
- jrtplib linux编译,jrtplib+jthread 交叉编译
- pascal语言入门
- Nginx不解析PHP,无法打开PHP文件
热门文章
- LeetCode 35.搜索插入位置
- JS中的作用域(一)-详谈
- linux svn更换数据仓库,Linux环境下SVN数据仓库迁移
- 机器学习概念 — 监督学习、无监督学习、半监督学习、强化学习、欠拟合、过拟合、后向传播、损失和优化函数、计算图、正向传播、反向传播
- 为什么不记录慢速查询?
- undefined reference to 'pthread_create'问题解决(转)
- ORB_SLAM2中的Sim3变换
- OpenCV 相机校正过程中,calibrateCamera函数projectPoints函数的重投影误差的分析
- usaco Feed Ratios
- 图像特征点—SIFT特征点