基于物理渲染的理论基础

作者 Jeff Russell

基于物理的渲染(PBR)是近来实时渲染领域的趋势。PBR经常被提及,同时它的准确定义也经常被混淆。这里我们将来解释什么是PBR,它与之前的渲染模式区别在哪里?这篇文档的目标读者是非技术人员(主要是美术人员),文档中将不会出现任何数学公式或代码。
基于物理的着色(PBS)跟之前着色方式最大的区别在于PBS是建立在对光和物体表面行为准确推论的基础上的。当前硬件着色性能已经足够好使得一些老的基于节省性能考虑的近似处理完全可以丢弃,与之相关的老的美术产出流程也可以丢弃。这意味着技术人员和美术人员需要明白这些改变的背后理论依据。

Diffusion & Reflection

散射和反射——.也称为“漫反射”和“高光”,分别描述了物体表面和光的最基本的相互作用。可能大多数人实际工作中熟悉这些概念,但是可能并不知道“漫反射”和“高光”在物理层面上的区别。
当光线以电磁波的形式传播到物体表面时,会产生反射——光线朝物体表面法线的另一侧离开。这种行为跟一个球碰撞到地面发生弹射的行为一样。在光滑的表面,将产生完美的反射现象。“高光”经常用来描述这种现象。
并不是所有的光在物体表面都产生“高光”反射。还有一部分进入物体内部。这部分光要不被物体吸收(通常转化为热能),要不在物体内部散射,其中一部分会从物体表面散射出来而被重新看到。这种现象称为“漫反射光照”,“漫反射”,“次表面反射”。
基于物理渲染的理论基础_第1张图片
吸收或散射根据物体表面颜色不同而不同(比如,如果物体表面呈现蓝色,表示的是物体表面吸收蓝色以外所有的光,散射出蓝色波长的光)。通常散射方向具有相当的随机性,我们可以认为散射的方向是任何方向。通常着色程序用一个颜色变量称为“albedo”或“Diffuse color”来近似描述物体表面散射颜色。

Translucency & Transparency

某些材质的漫反射要复杂一些——比如那些具有很长散射距离的材质:皮肤、蜡等的散射,通常一个简单的颜色变量是不够的,着色系统还需要考虑这些被照射物体的形状和厚度,如果物体足够薄,可以看到光从其背后散射出来,物体呈现半透明状;如果漫反射非常的小——比如玻璃,几乎没法注意到散射现象,光线完整的从物体的一边穿透到另一边,物体呈现全透明状。不同物体的次表面散射不尽相同,通常需要专门的着色程序去模拟它。

Energy Conservation

根据上面的描述我们得到一个结论:漫反射和高光是互斥的。这是因为被物体散射的光线必须进入物体表面(那它就不能被高光反射了)。这个结论符合“能量守恒”,也就是说离开表面的光不可能比原始的入射光要亮。着色系统很容易做到这一点:假设1表示100%光能,用1减去高光反射的光,剩下的就属于漫反射部分。这意味着强烈高光的物体几乎没有漫反射现象,原因就是没有光进入到物体表面,大部分被镜面反射了。反之亦然。
基于物理渲染的理论基础_第2张图片
能量守恒是PBS的一个重要概念。它可以保证美术合适的设置材质的反射率和albedo值,而不破坏物理规则。虽然在着色系统中强制能量守恒的物理限制并不等价于最后好看的着色效果,但起码可以保证渲染效果不至于背离物理规则太远,使得在不同光照条件下物体的光照表现一致性。

Metals

金属作为最常见导电材质,有几点特性值得被特殊提及。
首先,金属大多比绝缘体更容易发生镜面反射。导体一般的镜面反射率高达60-90%,而绝缘体一般在0-20%的范围。这种高反射率阻止了大部分光到达其内部产生散射,使得金属看起来很闪亮。
其次,导体的反射率在可见光谱中呈现多样变化,使得它们的反射光具有颜色(白光照射下)。反射光具有颜色很奇怪,但确实在我们日常的材质中出现(比如,金、铜和黄铜)。绝缘体大部分情况下不会呈现出这种效果,它们的反射光的颜色是一般跟光源颜色一致。
最后,导体通常对进入其表面的光是吸收而不是散射。这意味着理论上导体不会表现出任何的漫反射,但实际中由于金属表面氧化等原因,还是会表现出部分散射效果。
根据金属的这些特性呢,一些着色系统用“metalness”作为输入来表示材料的金属程度,而不是albedo & reflectivity。

Fresnel

Augustin-Jean Fresnel 这个人应该是很难被我们遗忘的已故白人中的一位了,主要是因为他的名字被用于Fresnel现象冠名,他是第一位对这种现象做了精确描述的人。Fresnel现象是光照反射现象中不可或缺的部分。

计算机图形学中Fresnel用来定义不同角度下的不同的反射率——入射光方向越平行于物体表面,反射率越高。这意味着物体表面在Fresnel效果作用下,物体的边缘会更亮。我们中大部分人可能已经对Fresnel效果已经有所了解,并且Fresnel效果在计算机图形中也不是新东西,然而,PBR对Fresnel估算公式做了一些重要的纠正。
首先,入射光方向接近平行于物体表面时,一切光滑物体边缘表现为完美镜面反射,是的,只要它足够光滑并且在合适的观察角度(也接近平行于物体表面)下,任何材质物体都表现为完美镜面反射。这有点违反直觉,但物理现象就是如此。
其次对Fresnel属性的观察发现不同材质的随入射光角度变化得到的Fresnel变化曲线和梯度差异并不大。对我们来讲意味着:如果我们期望渲染更加真实,美术对Fresnel行为的控制应该被降低,而不是被放大,或者说,没必要暴露所谓Fresnel参数让美术直接去调节Fresnel效果。
少了参数控制,就简化了美术内容生成,这是个利好。着色系统从现有的一些已经存在的材质属性,比如光泽度和反射率就可以自动去计算合适的Fresnel效果。
基于物理渲染的理论基础_第3张图片
Fresnel效果会随着物体表面的光滑度变低快速的变弱,接下来的内容会介绍到这些。

Microsurface

散射和反射都依赖物体表面的朝向。宏观上来看,物体表面朝向由物体的网格形状决定,或者是网格的法线贴图决定。渲染系统根据法线信息已经可以很好的渲染散射和反射。
但是,真实世界的表面在微观世界是不完美的:小坑,小裂缝和小块,这些不会被肉眼看到,也不会在任何尺寸的法线贴图上表现出来。尽管在肉眼下不可见,这些微观世界下的表面特性对散射和反射仍产生巨大影响。
基于物理渲染的理论基础_第4张图片
上图中,平行的入射光线被粗糙的表面分散反射。因为光线发生碰撞的微表面的朝向各不相同,就像把球扔向凹凸不平的地面一样,球的弹射方向是不可预测的。简短的说,表面越粗糙,放射的光线越分散,呈现出“模糊”状。
不过,对每一个微表面进行反射估值在实时渲染计算中是不现实的,所以我们不直接描述微表面细节,而是通过指定一个粗糙度的概念,然后使用一个相当精确的着色程序得到接近的结果,这个通用的粗糙度叫做是“Gloss”, “Smoothness”, 或“Roughness”。在材质中可以是一张贴图或一个固定值。
材质中的微表面细节是非常重要的属性,它用来模拟真实世界中的各种各样的微表面特征。光泽度贴图不是一个新概念,但是它在基于物理的着色中占有关键的地位,因为它对光的反射效果有决定性的影响。接下来我们将会看到。

Energy Conservation (Again)

假设我们的着色系统已经考虑了微表面细节,反射多少入射光才是合适的是个值得研究的课题。遗憾的是,大部分老的渲染系统做的并不对,基于微表面的粗糙度得到的效果感觉是或多或少反射了入射光。
大块的高光反射比小块的高光反射要暗,光滑的表面会得到更加清楚的高光。这是符合能量守恒物理定律的:不同的材质反射了相同量级的入射光,但粗糙的表面反射的光线更加分散,看起来更模糊,而光滑的表面反射更加集中,看起来更清晰。
基于物理渲染的理论基础_第5张图片

All Hail Microsurface

基于上面的认识我们得到一个结论:物体微表面光泽度直接影响了表面的光照表现。这意味着美术可以只通过调整光泽贴图来得到物体表面的划痕、凹痕、磨损或抛光等效果(形状和强度),而不额外需要高光遮罩贴图或反射率这些设置。

微表面细节和反射率在物理上是相互联系的,就像之前描述的散射和反射一样,抛开它们之间联系的,而单独分离的去设置它们将有可能违背背后的光学物理规则。

还有,对真实世界观察发现,材质之间的反射率的差异并不明显(之前导体部分已介绍),比如水坑和泥巴,它们有非常相近的反射率,但泥巴非常粗糙,而水坑非常光滑,它们呈现出截然不同的反射表现。美术在PBR中创建这样的场景应该通过光泽度或粗糙度来做为主要差异设置项,而不是反射率,见下图:
基于物理渲染的理论基础_第6张图片

微表面属性对其他一些效果也有略微影响。比如,Fresnel 效果在粗糙表面上会变弱,还有,大或凹微表面会“捕获”更多的光线,导致光在表面出线多次反射,从而被吸收的光量增加,亮度降低。不同的渲染系统处理这些细节的方式可能有些不同,最后呈现的结果可能有些许不同,但总体还是遵守能量守恒的。

原文地址:https://www.marmoset.co/toolbag/learn/pbr-theory
本文地址:http://blog.csdn.net/bill2ccssddnn/article/details/51533380
附:在Unity中实现的Fresnel 效果
基于物理渲染的理论基础_第7张图片

你可能感兴趣的:(Unity,图形学,PBR)