作者:Jeff Russell
翻译:吉祥
如果不对之处请指正。
基于物理渲染模式(PBR)是一股令人兴奋的实时渲染界的最新潮流。到处都有人在谈论PBR,以至于经常让人们迷惑它究竟意味着什么。一个简短的回答是:“意味着许多东西”,以及“看具体情况”。这个回答并不能让人满意,所以我试着从自己的观点,用更详细一点的描述解释PBR是什么,以及它和传统的渲染方式有什么区别。这篇文章是为非工程师(大部分情况下是3D设计师和美工)准备的,并且不会包含任何的代码和数学原理。
基于物理渲染模型和传统渲染方式最大的不同在于它能够更精确地描述和绘制光线和物体表面的交互。目前着色器已经足够高级,因此一些传统的着色方式现在可以被安全地抛弃,同时抛弃的还有一些传统的三维艺术制作方式。这意味着工程师和美工都应该理解这些变化背后的原因和原理。
Diffusion & Reflection
Diffusion(漫反射)和Reflection(镜面反射)——有时也被称为diffuse(漫反射光)和specular(镜面反射光)——是两个描述最基本的光和表面交互区别的词汇。大部分人知道怎么使用这两个参数,但是可能不知道它们在物理上的真正区别。
当光线击中物体表面边缘时,一部分光线会从表面反射——也就是反弹回去——并按照表面法线射往另一个方面。这种特征很像是将一个球扔向一面墙——它会以一个相反的角度反弹回来。在一个光滑的表面上,这会使得表面看起来像一面镜子。术语“Specular”(镜面反射)就经常用于描述这种效果,这个词从拉丁语的“镜子”中派生出来,似乎听起来比“mirrorness”更专业一点。
但是,并不是所有的光线都从表面反射。通常有些光线会透入被照明物体的内部。在这种情况下,这些光线要么被物体吸收(通常转换为热量),要么在物体内被散射。有一些被散射的光线有可能会返回到表面,并被眼球或者相机捕捉到。这就是被熟知的“Diffuse Light”(漫反射光),”Diffuse“或者”Subsurface Scattering(次表面散射)“——它们描述的都是同一个现象。
取决于材质,吸收的那部分光和散射的那部分光通常拥有不同的波长,因此部分光被吸收,使得物体具有了颜色(比如,如果一个物体吸收了除了蓝色光以外的大部分光,那它就会呈现蓝色)。散射通常是方向随机的,可以说从各个方向看都是一样的(各向同性)——这和镜面反射十分不同!利用这个近似(将漫反射看成各向同性),一个着色器只需要一个输入:“albedo(反照率)”,也就是一个颜色,用来描述哪一种色光是最容易被散射回的。
Translucency & Transparency
在某些情况下漫反射会变得更复杂——在具有更长的散射距离的材质,比如皮肤、蜡、翡翠等材料里。在这种情况下一个简单的颜色通常不能决定一切,着色系统必须要考虑物体的形状和厚度。如果这些物体足够薄,这些物体通常会有一些光从一个表面入射以后一直散射,并从另一面射出,这个现象被称为透射(Translucent)。如果散射强度更低(比如玻璃),以至于散射的部分几乎可以忽略不计,那么物体另一侧的风景可以直接透过物体,进入人眼。这种现象和典型的“在表面附近”的漫反射差得十分远,因此通常需要专门的着色器来模拟它们。
Energy Conservation
基于上面这些谈论,我们现在可以得出一个重要的结论:镜面反射和漫反射是互相排斥的。这是因为,如果一个光线想要漫反射,它必须先透射进材质里,也就是说,没有被镜面反射。这在着色语言中被称为“Energy Conservation(能量守恒)”,意思是一束光线在射出表面以后绝对不会比射入表面时更亮。
这个理论在着色系统中很好实现:只需要在漫反射被计算前从光线强度中减掉被镜面反射着色器处理的部分。这意味着高镜面反射率的物体只会显示出很少的漫反射光(也就是镜子不会有颜色,只会反射周围环境的颜色),因为只有很少量的光进入了物体里面,大部分光都被直接反射了。反面也一样:如果一个物体有很强的漫反射光,那么它将几乎不会看起来有镜面反射。
(图中的五个球有相同的颜色,但随着镜面反射强度增加,其本身颜色将越来越不明显,而环境颜色的影响越来越大)
这种类型的能量保证是PBR渲染的重要方面。这让美工在处理漫反射和镜面反射参数时不会无意间违背物理定律,或者在不同的光线条件下表现得差异过大。
金属
由于一些原因,在这里我们有必要提及一下导电材料,尤其是金属。
首先,它们一般比绝缘体(非导体)有更高的反射率。导体的反射率通常会高达60-90%,而绝缘体一般会低得多,在0-20%的范围内。这些高反射率使得大部分光线不能到达内部并散射,从而使金属拥有十分“耀眼”的外观。
其次,导体的反射率有时会在可见光谱范围内变化(对不同波长光线的反射率不一致),这意味着它们的反射光出现颜色。这种反射光具有颜色的特质即使在金属中也是很罕见的,但它确实发生在某些日常材料(例如金,铜和黄铜)中。绝缘体一般来说并不表现出这样的效果,它们的反射光是均匀而无色的。
最后,导体通常会吸收而不是散射穿透表面的任何光。这意味着在理论上,导体将不会具有任何漫反射光。然而,在实际情况下,在金属表面上通常存在氧化物或其它污渍,其将散射出少量的漫反射光。
正是金属与其它一切物质在这一点上的不同,导致一些渲染系统使用“metalness(金属性)”通道作为一个直接输入通道。在这样的系统中,设计师指定材料表现为金属的程度,而不是仅指定albedo和reflectivity通道。这有时候被认为是更容易创建PBR材质的一种方法,但这并不是PBR渲染的典型特征。
菲涅尔材质
奥古斯丁·让·菲涅尔(Augustin-Jean Fresnel)似乎是我们不太可能忘记的那些人之一,主要是因为他的名字被用于称呼一系列被他第一个准确描述的现象上。在没有他的名字出现的情况下,很难讨论光的反射。
在计算机图形学中,名词“菲涅尔(Fresnel)”被用于表达在入射角不同时,物体表面产生的不同反射情况。具体来说,相比垂直于表面入射的光线,贴着表面入射的光线更有可能被反射。这意味着使用合适的菲涅尔效果渲染的物体会在边角出显示出更强的反射。我们大多数人已经相当熟悉菲涅尔材质了,而且它在计算机图形学方面的存在也很久了。然而,PBR着色器在处理菲涅耳公式时做了一些已经被大家接受的重要修正。
第一个修正是,对于任何材质,当光线贴着表面入射时,将完全被反射——也就是在任何光滑的物体上,不管材质的反射率如何,在“边”处的材质会看起来像是镜子一样(没有颜色)。对,如果一个物体是光滑的,并且选择好合适的观察角度,那么任何的物质都可以表现得像是完美的镜子!这可能是违背常理的,但在物理上是可以清晰论证的。
第二个关于菲涅尔属性的发现是,在不同的材质上,菲涅尔曲线的变化并不是很大。金属具有最不一样的曲线,但是它们也可以被统一到分析曲线里。
这意味着,如果要做到真实的渲染效果,我们应该减少美工对菲涅尔参数的控制能力,而不是增加。或者至少,我们现在知道设置默认参数为多少了!
这是一个好消息,因为这样一来我们可以简化材质的制作流程。现在着色系统几乎可以完全自己处理菲涅尔效果;它只需要参照两个预先定义好的材质参数,比如Glossness和Reflectivity。
(图中展现了两种不同材质的菲涅尔曲线,可以看到,不管其基本反射率如何,曲线的形状都十分相似,因此可以用同一条曲线拟合)
一个PBR工作流程使美工可以通过一种方式指定“基本反射率(Base Reflectivities)”。这提供了反射光的最小值和颜色。一旦渲染了菲涅尔效果,将在艺术家指定值之上增加反射率,直到在边角处达到100%(白色)。本质上,输入的数值描述了基础反射,菲涅尔的方程从那里接收基础值,使得表面在需要时按照角度变化增加反射光。
微观表面
上面关于漫反射和全反射的讨论还取决于物体表面的朝向。在宏观层面来说,这个朝向取决于被渲染的模型的形状,有时候这个模型也会添加一张法线贴图来更好地描述其表面细节。一旦提供了这些信息,任何的渲染系统都可以处理它们,并高质量地渲染漫反射和全反射。
但是,还有一个问题没有解决。大部分真实世界的物体表面都有肉眼不可见的极小的缺陷:小槽,裂纹和凸起,这些缺陷即使对于法线贴图来说也太小以至于无法表达出来。虽然这些微观细节不能被裸眼观察到,但它们却会影响到光线的漫反射和全反射。
微观表面细节对反射的影响最大(但是对次表面反射的影响并不大,因此之后的讨论都不包括次表面反射)。在上图中,你可以清楚地看到,由于每一束入射光接触的表面朝向都不一样,平行射入的光在粗糙的表面变得分散。如果继续拿球撞墙的例子来说的话,可以想象球碰到的是一个自然环境下的悬崖壁,或者是一个不平整的表面:球仍然会反弹,但是反弹的方向很难预测。简单来说,表面越粗糙,反射光就会越分散或者显得”边缘模糊“。
不幸的是,在着色阶段去分析微观表面特征在艺术生产特点、内存和计算开销的衡量下是不可行的。那么我们该怎么办?我们发现,如果我们放弃直接讨论微观细节,而是使用”粗糙度“这一个宏观上的测量尺度去衡量,那么我们可以写出相当精确的着色器,并给出差不多的渲染效果。这个衡量标准有时候也被称为”光泽度(Gloss)“,”光滑度(Smoothness)“或者”粗糙度(Roughness)“。对于给定的材质来说,它可以被指定为一个常量,或者一张灰度贴图。
对于任何材质来说,微观细节都是一个十分重要的特征,因为这个真实世界中的材料微观细节十分普遍而不同。光泽度贴图并不是一个新的概念,但是由于微观细节在光线反射中至关重要,因此光泽度也在PBR材质中扮演一个重要角色。我们将很快看到,PBR着色系统在处理微观细节时对性能的改进的一些考量。
Energy Conservation (Again)
根据我们的假设,着色系统可以将微观细节考虑进去,并正确地处理反射光的分散,那么我们就需要重新认真考虑正确的反射光线总量。遗憾的是,很多旧的渲染系统都没能正确处理这一点,基于微观粗糙度反射了太多或者太少的光。
当等式被正确平衡以后,一个渲染器应该将粗糙表面的高光绘制得更大范围,同时比光滑表面更昏暗一点,而后者则有一个更小而锐利的高光。这个明显的亮度差别是关键:两个材质都反射相同数量的光(因为反射率相同),但是粗糙表面的材质将光线分散得很厉害,而光滑表面则反射了很集中的”电磁波“。
现在我们在漫反射/全反射的能量守恒之外,必须考虑第二个能量守恒。正确处理这个能量守恒是”基于物理“渲染技术更重要的一个方面。
ALL HAIL MICROSURFACE
正是在上述知识的基础上,我们才真正认识到一个大问题:微观粗糙度直接影响到反射体现出来的亮度。这意味着艺术家可以直接在Gloss Map上绘制不同的灰度信息 - 划痕、凹痕、磨损、抛光,各种信息 - 然后一个PBR系统不仅会显示反射形状的改变,并且会使得反射的强度也改变。不需要特定的反射遮罩!
这十分重要,因为在真实世界里两个在物理上联系的属性——微观细节和反射率——现在第一次在美术资源创作和渲染流程中被联系在一起考虑。这和之前讨论过的漫反射/全反射平衡很相似:我们可以单独指定这两个数值,但由于他们是相关的,尝试将其单独考虑反而会使得任务变得更难。
同时,对于真实世界材质的调查指出,材质的反射率(reflectivity)差别并不是很大(参照之前关于传导率的章节。水面和泥土就是一个很好的例子:两者拥有几乎相同的反射率,但由于泥土十分粗糙,而水面通常十分光滑,在反射上两者相差十分大。一个创建类似的PBR场景的艺术家会将两者的Gloss Map或者Roughness Map调得相差很大,而不是去调反射率,如下所示:
微观细节在其它方面对反射也有细微的影响。比如,在粗糙表面上,导致”边缘更亮“的菲涅尔效果会减少(粗糙表面的混沌性质”散射“了菲涅尔效应,因此观察者不能清晰地分辨出来)。同时,大而凹的微观表面可以阻碍光线——使得光线在两个表面间反射多次,增加了光线的吸收率并降低了亮度。不同的渲染系统通过不同的方式来处理这个细节到不同的精度,但是粗糙表面显得昏暗一点都是一样的。
结论
There is of course much more to say on the topic of physically-based rendering; this document has served only as a basic introduction. If you haven’t already, read Joe Wilson’s tutorial on creating PBR artwork. For those wanting more technical information, I could recommend several readings:
- John Hable’s excellent blog post: Everything Is Shiny
- John Hable’s even better blog post: Everything Has Fresnel
- Sébastien Lagarde’s summary of Rendering Remember Me
- Come to think of it, all of Sébastien Lagarde’s Blog is good stuff
- The SIGGRAPH 2010 course on PBR
- Always worth mentioning: The Importance of Being Linear
If there are any burning questions still left unanswered, I can usually be reached on twitter.
暂无关于此日志的评论。