PhysicalBasedRendering(一)物理篇

时间:2022-10-22 09:37:13

  很多人对PBR的理解是存在偏差的,跳不出传统渲染模型的思维圈子,把它理解成一种模拟效果更为精确的算法公式,虽然在某种程度上是对的,但没有看到PBR的本质。
  PBR是对光在真实世界中与环境交互的一种近似的物理模拟。当你看到它的某种实现时候,往往包含各种数学公式,这些公式背后都是对物理因子某种形式的模拟。所以对物理层面的一定了解,有助于我们后面去深入学习PBR的各种理论及理解对应的数学公式。

  对图形渲染有些了解的都知道, 渲染方程(Render Equation)中最重要的两大部分就是镜面反射和漫反射,PBR也一样,那就先说说镜面反射和漫反射背后的物理原理。

                PhysicalBasedRendering(一)物理篇

                   (图1:光与物质在介质表面的交互.来源:百度百科)

  学过初中物理肯定都能看的懂这张图,为什么会发生反射和折射就是我们接下来要讨论的。先提两个基本事实,光是一种电磁波,以及物质是由分子原子这些基本粒子构成的。

  由于光与物质的反应大多是由于它的电场部分引起的,所以一般只考虑光的电场部分。构成物体的基本粒子,无论是分子或者原子,我们想象一下,正常状态下,原子内部的原子核带正电,有一个正电荷中心。而核外电子带负电,有一个负电荷中心,通常正负电荷中心是重合在原子中心,当光线照射到物体表面的时候,在光电场的作用下产生位移,从而使原子的正负电荷中心产生偏离(如图2),原子变成了电偶极子,这个过程也称为极化(关于电偶极子和极化的概念,请自行查询).随着光电场的强度周期性变化,原子的负电荷中心也会围绕着正电荷中心进行周期性的震荡,这种震荡会激发出辐射到周围各方向的电磁波。这是一种散射现象,在纯净均匀的物质中,每个电偶极子都相当于一个新的波源,它们向周围辐射出的电磁波,即球面波,由于相干性,在绝大部分方向上,这些电子波会因相互干涉而抵消掉。但是在两个方向上是特殊的一个是反射方向一个是折射方向,可以通过惠更斯原理来解释为什么会出现这种现象(如图3),感兴趣的朋友请自行了解。

     PhysicalBasedRendering(一)物理篇

              (图2:原子在外电场作用下变为电偶极子.来源:网上PPT截图)

            PhysicalBasedRendering(一)物理篇

            (图3:惠更斯原理解释光在介质交界处的折射和反射。来源:果壳网)

  看到这里大家就要有一个认识,从光的波动性来理解折射和反射时,宏观上我们认为光照射到物体表面被反弹和射入,但微观上实际是光波被介质表面的粒子吸收能量并重新释放的过程。通过惠更斯原理只能说明光在物体表面的折射和反射方向关系,并没有解决反射和折射分量的多寡。这会受到很多因素的影响,其中有物质本身性质的影响,如磁导率,介电常数等,折射率就是由这些因子计算得来的一个量。但除了折射率以外光的入射角度也是影响的因素之一,这些因素综合起来也就形成了我们在PBR渲染中经常会提到的菲涅尔公式。这样一来就能知道光与介质在平面接触后反射和折射的方向和多寡了。其中在介质表面反射的那部分光也就是我们常说的高光,而对于折射进物体内部的光又会有怎么的命运呢?

  和我们前面讨论物体表面的情况类似,折射入物体内部的光也会对物体内部的粒子相互作用形成散射,但此时物体内部构成是否匀等因素就会影响粒子们激发出的次波间的相干作用,也就是影响了散射的结果。我们PBR中经常提到的次表面散射大体上就是这么一回事(如图4),我们说光与物质粒子相互作用,激发起次波继续传播,但这个过程是伴随着能量损失的,一部分能量会转变成内能(热能),经过不断的散射,耗散的能量越多,所以一般越薄的地方,光越容易经过散射后从表面射出,人的皮肤就是一个很好的例子(如图5)。

            PhysicalBasedRendering(一)物理篇

            (图4:入射光在物体内部的散射情况。来源:wiki)

               PhysicalBasedRendering(一)物理篇

                 (图5:皮肤的次表面散射。来源:网络)

  是不是以为光的命运这里就结束了呢?有个大的方向我们一直没提,那就是光的吸收。要理解光的吸收,我们先要回顾一下共振:任一个系统(物体)都倾向于以一种自己认为舒服的某个频率进行振动,把这个频率就叫作这个系统的固有频率(如图6)。当系统受到来自外界的驱动进行振动时,若外界驱动频率与系统固有频率不同,则系统不能有效的吸收外界的能量,它会在很短的时间内把它释放出去。反之两者相近,则系统会最大程度的吸收外界驱动的能量,增大自己的振幅。此时就发生了共振。回到光上面,当粒子(电偶极子)受光电场作用进行受迫振动,若粒子的振动频率与入射光频率相近,则此时粒子会最大程度的吸收掉入射光的能量增大振幅,之后会慢慢转化为内能,反之则粒子受迫振动后吸收光的能量,但会在极短时间内以次波的形式释放出去,这种情况正对应前面提到的散射。

            PhysicalBasedRendering(一)物理篇

                 (图6:共振曲线。来源:网络)

  在我们的日常生活中,自然光是多种频率光的混合体(赤橙黄绿青蓝紫,谁持彩练当空舞)。构成物体的不同粒子拥有不同的固有频率因而他们对不同频率光的吸收能力不同。除了固有频率,物体构成的空间结构不同,会影响光的散射和折射,导致看上去光好像是被吸收了一样。一个常见的例子就是金刚石和石墨,它们都是碳元素构成的单质,但是看上去完全是两种质感(如图7)。

              PhysicalBasedRendering(一)物理篇

                 (图7:金刚石和石墨的空间结构。来源:互联网)

  综上所述,也就引出是物质对光的选择性吸收的概念,这也是物体颜色的本质。图7展示一些金属对不同波长的吸收能力,图8则给出了常见的电磁波谱,注意其中的可见光部分。综合一看不难发现金属一般对可见光的吸收能力都较弱,所以大都是银白色的,而有些如铜,金(图中Cu,Au)这样的金属对一部分可见光吸收作用,所以就呈现出一定的颜色。

              PhysicalBasedRendering(一)物理篇

          (图7:一些金属对不同波长的吸收能力。来源:互联网)

      PhysicalBasedRendering(一)物理篇

                  (图8:电磁光谱。来源:互联网)

  估计看到这里,大家应该对光与物体交互的物理本质有基本的了解了。我们再来考虑一个问题:为什么金属看上去永远是亮亮,而塑料或是布料这样的材质就不那么亮。

  这其实与物体的导电能力是息息相关的,按照物体的导电能力,我们将其通常分成金属,电介质(上面的塑料和布料都属于这一类),半导体。我们都知道金属的导电能力是很强的,而电介质几乎都是绝缘的,半导体介于两者之间。之所以存在这样的差别是因为金属元素由于原子核半径较大及最外层电子较少等因素,导致其对核外电子的束缚能力很弱。这一金属中就充斥了大量的*电子,这些*电子在外部电场作用下就会进行定向移动产生电流,这就是为什么金属的导电性强,相反在电介质中一般粒子间是通过共价键结合形成稳定结构,对电子的束缚力很强,导电性就很差。而正是金属中的这些*电子导致了它与电介质外观上的区别,为了保证金属内部的电场平衡,这些*电子往往分布在金属表面,正是这些金属表面的大量*电子造成了对可见光频段高反射率。和我们一开始说的偶极子一样,这些*电子也会在光电场的作用下进行受迫振动,然后辐射次波,产生了折射和反射,不过它对可见光区段的反射强度要远大于折射部分,这也正是由于这些振动的电子是大量的*电子。它与我们前面讲述的原子核外的电子在性质上不同,导致了反射和折射情况的巨大差异。更深层的原因,由于没有专业背景,就没有去深入探究,如果感兴趣,请自行了解吧。下面的图9和图10分别展示了金属和一些非金属物质的反射光谱。

                PhysicalBasedRendering(一)物理篇

                     (图9:一些金属的反射光谱。来源:Google)

               PhysicalBasedRendering(一)物理篇

                         (图10:一些金属以外其它物质的反射光谱。来源:Google)

  图中可以看出,金属与非金属在可见光波段上的反射能力是有不小差别的。这正是由于上面我们提到的一些物质结构上的区别导致的,实际上影响反射率的因素还很多,尤其是对于电介质来说,是很复杂的。这里只是简化讨论。

  上面就是本文的全部内容,不知道对大家是否有所启发,对于我个人来说,写作这篇文章的过程的意义,已经超过了最终完成这篇文章。整个过程中查阅学习了很多内容,不断刷新自己的理解,也深感国内在一些专业领域内网上的资料太少。

由于光的特殊性,对于光与物质交互由多种解释的角度,比如很多人从光子和电子跃迁的角度来理解反射折射,所以各个资料理解角度的不同,也容易造成认知上的混淆。本文总结了各种各样国内国外的资料,外加笔者自己的理解,仅仅是从光的波动性角度来尝试解释各种物理现象。并且由于笔者缺乏相关物理专业知识背景,难免在文章中存在错误和不严谨之处。如果大家有所发现的话,请务必留言指出,共同进步。希望大家带着问题去读,边读边思考,以免由于我的理解错误,影响你的理解。

  我想篇这文章中一定存在着很多不严谨,甚至错误的地方,写作过程一波三折,其中经常要冥思苦想,刚刚认为想通的东西没过多久又被新了解到的知识推翻掉,有时候看到两种解释觉得都有道理,但又互相矛盾。感觉到了自然科学的精深,又多了几分敬畏。很多人也许会觉得写这样的文章是多次一举的,即使不了解背后的物理机制也并不影响用好PBR。我个人并不这样认为。正如我在开篇时候写的,不了解背后的物理机制,那么就很难理解PBR中那些常用的公式为何那么写,纯数学上的理解总感觉是有点隔靴搔痒的。另外对我个人而言,写作此文的整个过程远比最后码上的这些文字要有意义的多。整个学习过程是有收获的,虽然没有也没必要彻底的搞懂光是如何与物质交互的,但至少有了一个印象,日后再去看PBR一坨坨公式,总会有那么点感觉。

  本文中的概念和知识,参考了很多国内外网络上的资料,在此列出一些重要的,方便大家自己去查阅。
  1.Diffuse Reflection https://en.wikipedia.org/wiki/Diffuse_reflection
  2.Relflection(Physics) https://en.wikipedia.org/wiki/Reflection_(physics)
  3.Light Absorption,Rlection,and Transmission http://www.physicsclassroom.com/class/light/Lesson-2/Light-Absorption,-Reflection,-and-Transmission
  4.知乎问题:金属泛光和其他平面的反光有什么本质区别?为什么偏振镜不能消除金属表面的反光? https://www.zhihu.com/question/24935575

  尊重他人智慧成果,若要转载,请注明作者esfog,原文地址http://www.cnblogs.com/Esfog/p/PBR_PhysicalBasic.html