浏览 : 6098

[教程资源] PBR物理渲染的基本原理及与传统渲染的异同

Jeffrey2016-12-7 14:29

PBR物理渲染的基本原理及与传统渲染的异同

写在最前:

PBR:Physically BasedRender,基于模型物理属性的渲染理论,最早由Naty Hoffman等人提出,近年来被越来越多的游戏公司采用。其实这种技术早在很多年前已经在好莱坞等影视制作公司广泛应用,只是近几年随着次世代游戏的普及,慢慢引入到游戏行业当中。在VR领域中,由于UE4,CE和UNITY等制作引擎纷纷支持PBR,而PBR的渲染方式最大化的在虚拟世界中还原了现实中的效果,与VR可以说是天作之合,所以PBR的工作流已经成为VR应用制作的标准工作方式。为了更好的便于VR制作人员理解什么是PBR以及PBR的工作流到底是什么样的。后面会不定期更细一系列文章,分开讲解PBR的基本原理,PBR的工作流,UE4的PBR Shader model是什么样的,如何使用substance制作符合UE4的PBR美术资源等等。

  • 什么是PBR?

理解全新的物理渲染之前,我们先要理解传统渲染。其实不管是传统还是现在的物理渲染,根本的方式,都是通过着色模型和光照模型加以运算,来模拟真实世界中的视觉效果。传统的方式,采用的是数量有限的理想光源,加上反射贴图来呈现。他更多的是通过人为的设计来模拟。是还原一个已知结果的过程。做一个不恰当的比喻,绝大部分美术设计人员,其实并不理解漫反射,法线以及高光贴图的渲染原理,更多的是靠制作中积累的经验来提升自己的制作水平。也就是说大部分只知道HOW,不知道WHY。传统的方式更多的是我知道金属反光强,所以我用高反光的贴图模拟,我知道木头反光弱,所以我用较低的反光模拟。

这样的过程一方面对美工的要求非常的高,要善于观察生活,还要有足够的经验和艺术造诣,才能掌握制作不同材质的方法,这个表现的“度”是取决于个人经验的。很难以量化。而PBR则不同,在熟悉了PBR的原理之后,不管是美术,程序,还是TA,都可以更好的理解“渲染”,并运用于制作中。它从根本解决了这个表现度的问题。完全遵从真实世界的光照过程,通过将已知真实世界中的物理属性,转化成便于理解的参数(金属度,漫反射,粗糙度,高光等),直接赋予要表现的材质。并且严格的尊重能量守恒,保证入射光的总量与从材质反射出的光(specular)以及被吸收的光的能量(diffuse)相等。这样既能最大的避免美工个体差异造成的风格不符,又能最大化的接近真实物理世界的结果。

很多人把PBR简单理解成一个制作流程。或者画几张不同的贴图。其实这个理解是有偏差的,PBR不是单纯的画几张不同的贴图,更不是一个什么制作标准,他是完全颠覆的一套渲染方式。很多人在问PBR的制作标准到底是什么样的,其实不同的公司,不同的项目,不同的引擎,都会设计一套完全不同的渲染管线。虽然都是遵从物理渲染这套理论,但是并没有一个通用的制作标准,具体用什么工作流还是要取决于自己的项目适合哪一种。

  • 光线的反射原理

  • 光与物质的交互

      光是能量传播的一种方式,沿射线传播,属于电磁波的一种,既有粒子性又有波动性,所以图形学中,我们经常叫做光子。人眼可见光的波长在390-760nm之间。
可见光谱.jpg
       这个波长的可见光就是图形学里对渲染着色起作用的部分。当光照射到传感器上时(眼睛,镜头),颜色和亮度会被吸收并感知,而光与物质交互后被感知到的,就是物体的颜色。这里强调一点,颜色并不是物理世界里某个物体的客观属性,真实的物理世界中,是没有颜色的,物体本身只是在发射或者反射电磁波。这一点对于后面理解diffuse和specular极为重要。

       简单的说光与物质交互方式可以概括为折射,散射,吸收,自发光等,了解更具体的内容有助于更好的理解图形学原理,但是在本篇中就不具体描述了,可以自行查找相关的文献。唯一要注意的是,由于非均匀介质内部密度的不同,会发生散射现象,光在经过反射后会被分割成多个方向,但是光的总量并不会变化(能量守恒在渲染中是一个非常重要的物理概念,后面会重点提到)
  • 光与平面的交互
      
     平面散射光有两种:

  • 进入平面的部分(折射与散射)
  • 从平面出去的部分(反射)


      理论上光学平面的入射角和反射角是相同的,但是由于真实的物理世界中,绝大多数物体表面并不是光学平面,而是由无数个微几何表面组成的粗糙表面,所以实际上光照射到物体表面后,是在平面上各个点上轻微的不同方向的反射的集合。
平面散射.png
  • Diffuse ,Normal与Specular
      
      看到这三个名字,美术一定很熟悉,传统渲染方式中最常用的三张贴图。其实很少有美术真的理解这三张贴图代表的含义,只是宽泛的理解为漫反射代表颜色,法线代表凹凸,高光代表反射。
      下面从光线的反射原理的角度,帮助美术理解“为什么”的问题
      上面我们说过,光与平面的交互一种是平面直接反射出去的部分,我们成为镜面反射光,这部分其实就是美术常用的specular。另一部分是传到物质内部,经过折射被物质吸收的部分,或者内部进行散射,一些散射的光会最终重新返回平面折射出来,我们称为漫反射,也就是diffuse。
diff和spec.png

      漫反射光被物质吸收并散射后,会成为不同波长的光。前面我们说过,真实的物理世界是没有颜色属性的,颜色只是人眼的感知。正是漫反射光被人眼感知后,“赋予”了物体颜色。例如物体吸收了蓝色以外的光,那物体就是蓝色的,所以可以说漫反射决定了物体基本的颜色,这也是为什么我们用diffuse贴图来表达纹理。(传统的渲染方式,由于全部使用漫反射贴图这一张贴图来模拟光的信息,所以一般情况下,我们会将AO,也就是环境光遮罩,直接绘制在diffuse上,但是对于PBR来说,由于整个引擎渲染使用的都是物理渲染管线。所以在绘制diffuse贴图时,AO信息可以不画,或者极少。)
  • normalmap的原理其实也很简单(以下简单描述原理帮助理解,具体准确的概念请查阅相关文献)。

      人类通过视觉对周围世界的感知,不管是颜色和形状,都需要通过光影来实现,diffuse感受的是颜色,specular可以理解为感受的是质感,而法线帮助你感受的就是形状。
我们知道,当光线照射到一个复杂的物体表面时,会发生朝向不同角度的反射。最终呈现出不同的光影明暗,为人所感知,从而判断哪是凹,哪是凸,哪是裂缝等等。 normal.png

       那么想象一下“每一束光线”照射到物体的一个最小的平面上,都会有一个唯一的反射反向,在三维世界中就是一个代表方向的向量坐标。那么理论上,我们将这些坐标汇聚到一张贴图上,赋予一个外形接近的物体,通过运算使其反射出与复杂物体表面同样的光线,那么对于人的眼睛来说,你接收到的光线是同样的,你对形状的判断也是同样的。当然这里还涉及了很多的复杂变量,例如高度,烘焙时使用的光源与后期光源是不是一致,匹配物的与目标物之间的高差,观察角度等等,都会影响法线的最终效果,但这并不影响我们理解法线贴图最基本的实现方式,都是通过记录光的反射方向并还原,来欺骗人的眼睛。

  • 金属和非金属

      在真实的物理世界中,材质的区分有很多种,金属,半导体,电介质等,但是在PBR中对材质的界定一般根据折射光的作用只分为金属和非金属两类。
金属会吸收所有折射的光。而且通常反射率高达到60%-90%,高反射率防止了入射光被吸收或者折射,这样金属就又有了闪亮的外观。前面我们说过,平面直接反射出去的镜面反射光,称为specular。这里结合金属的高反射率来理解,就很好的解释了为什么在绘制金属部分的高光贴图时,要求比较亮,这里的原理就是通过提高金属部分的反射率,来模拟真实物理世界的效果
      
      非金属的光会在内部吸收和散射,最后一部分会从入射平面反向射出
在物理世界中,大部分现实生活中能接触到的金属都不是理想状态下的金属,多多少少会出现氧化,残留等等破坏自己金属表面属性的情况,从而造成散射少量的光。所以PBR的渲染体系中,为了更好的模拟真实物理世界,引入了金属度(metalness)的概念,这个参数事实上并不是纯粹的pbr,因为他已经不算是物理属性了,而是一种模拟物理属性,但是这个参数的设置大大方便了美术的制作
金属与非金属.jpg
  • Fresnel反射
     
       Fresnel反射是最常用的反射之一,这也是制作shader时TA最常用的节点之一,在制作皮肤,毛发,边缘发光等等都会用到。后面在介绍UE4的材质系统时会着重介绍。
Fresnel是法国物理学家,他提出的反射公式描述了光在不同折射率的介质之间的行为。简单的说就是光源入射向量和平面法线向量的夹角与反射率之间的对应关系。入射角越大,反射率越强。

      举个例子,当你站在水中,低头看的时候水是透明度,反射率只有3%,而当你看向水面远方时,水平呈现出镜子的效果,可以看到景物的倒影,这时候反射率接近100%
对于所有的材质来说,光滑物体接近边缘的地方,都会形成一个完美的镜面。
fresnel1.jpg
fresnel2.jpg
      当入射角度为0时,非金属材质(2%~8%),水和液体是2%,砖块8%,其他有机材质和塑料是5%,半导体和晶体是15%~50% 金属60%~90%

  • SurfaceReflectance.
      
      前面我们已经提到过微表面的概念,其实在传统的渲染方式中,法线贴图是可以描述物体表面小细节的,从法线贴图的原理上来说,本身就是记录光在照射到物体不同表面时的反射信息,但是法线贴图必须控制在一个合理的分辨率,对于那些极为细小,肉眼不可见的微表面几何体,使用法线贴图是无法模拟的。法线贴图只能从宏观的角度描述物体大的表面结构,例如凹槽,凸起等。但是这种物体表面的微几何体正是物体材质质感的微观特征。一个物体的微表面越粗糙,他的反射光就会越发散,越糊,物理渲染中,他是非常重要的一环。所以我们在PBR渲染中,引入了粗糙度roughness这一个参数来模拟呈现。注意这只是一个模拟参数,并不是真的对应微表面的实际情况,以现有的制作效率和运算能力,计算所有的微表面是不可行的。

      基于以上特点,我们在UE4中使用法线贴图时与UKD时代有所不同,在UDK中美工为了表现物体的质感,经常会在制作完法线贴图后,人为叠加一层杂色,通过这个来控制五天表面反射高光的范围和效果。但在PBR中由于物理层面已经模拟了物体的金属度和粗糙度。这种人工添加的小杂色可以不再制作,转而使用粗糙度和金属度来控制
l   Normal Distributionfunction(法线的分布函数)

       微几何体并不是平均分布的,如果是平均的,那光就会以几乎相同的反向反射出去,产生的高光就会非常的清晰。而不平均的微几何体表面,会产生一个模糊的高光,统计这种平面法线方向分布的函数,我们称之为法线分布函数。这个函数并没有1到0这种数值范围,他更多的是描述一个集中度。他决定的是高光的镜面反射的大小,亮度,形状。有些人写这个函数的时候,会提供类似roughness的参数来直观的表达效果,粗糙度低的时候,微几何体的法线方向会更集中在宏观的平面法线方向上,那么高光的表现就是呈现高亮,清晰,集中的高光点。反之亦然。对于复杂的表面,也可以使用一张roughness贴图来控制某些区域的效果
      这里要注意一点,粗糙度贴图和传统的高光贴图在绘制的时候有一个明显的区别。你可以简单的理解为两者是相反的,这样的理解虽然不准确,但是可以更快帮助你上手如何绘制粗糙度贴图。以下面的两张图为例,这个石墙的表面,左侧是传统的高光贴图,在缝隙处,由于物理凹陷,导致光线照射的时候经过的多次的反射折射,无法沿着宏观的法线方向反射出来,所以我们以较深趋近于黑色的颜色来表达。这里的黑色,代表的是反射光(specular)的光强度。而右侧的粗糙度贴图则相反,虽然达到的效果是近似的,但是凹陷的部分,我们用高亮的白色,来代表这个区域粗糙度高,从而达到与传统高光贴图一样的效果。很多刚接触PBR的次世代美术对这种相反的表达非常的不适应,其实熟悉了解了其中原理以后,理解起来还是非常容易的。在传统specular贴图中,贴图的明度,控制的是光强,而在粗糙度中,控制的是粗糙度

高光与粗糙度.jpg

  •    能量守恒
      
      能量守恒,是PBR与传统渲染最大的区别。所谓能量守恒,简单的理解就是镜面反射出去的光与漫反射出去的光,加起来总量不能超过入射的光量,也就是diffuse+specular不能大于1。如果你希望你的材质有较高的反射率,那就要同时降低漫反射的强度。在真实的物理世界中也是如此。
能量守恒.jpg

      能量不守恒这在传统的渲染方式中,经常出现,美术制作人员有时候会人为的把diffuse和specular都调的很高。导致看起来“很假”
能量守恒对高光部分的处理,也称为“Energy Preserving Specular”,通常是在渲染方程里添加NormalizationFactor来实现的能力守恒

能量守恒2.jpg
能量守恒3.jpg
      是否使用Normalization Factor的对比,左下面使用Factor的亮度更淡了一些,因为左上非能力守恒的模型反射了更多的光,而下面能量守恒的模型,高光变得更加明亮和集中。

      传统的制作方式,一切的制作都基于美术的经验。美术和程序,都需要花费大量的精力来总结一些制作用的效果。难于量化和标准化。都是描绘金属,可能仅仅是还了一个颜色,十个美工对于diffuse颜色的把握就有十种不同的明度和饱和度,对金属最终的质感都会有所影响,而使用PBR后,标准化的参数设置可以完全避免这种问题,如下图就是总结出的一套标准化参数
pbr材质参数.png
在项目制作开始之前。只需要将参数确定,美术人员制作出的就是统一标准的资源,这让程序和美术都可以把有限的精力更大的投入到有效的创意工作中去。想要更好的理解PBR的工作流,仅靠了解一些简单的原理是不够的,但这些都是熟练运用和理解物理渲染的理论基石。如果有关于这部分的疑问,请留言咨询。会尽快解答。

注: 本文是结合trace0429关于物理渲染基础的一篇文章,加之我使用unreal引擎的一些经验总结而出,只作为普及知识,文中部分文字与图片摘自原作者,如有侵权请告知更改或删除

检举 回应