3D 贴图硬核干货!各路专家编制 腾讯翻译的《PBR指引手册》

3D 贴图硬核干货!各路专家编制 腾讯翻译的《PBR指引手册》

首页休闲益智艺术贴图更新时间:2024-05-11

万物皆可PBR, 本手册带你知其然也知其所以然。

近日在研究3D-TO-H5工作流及学习PBR的过程中,发现Substance官方新版的《The PBR Guide》尚未有完整的中文翻译,所以把心一横,斗胆翻译了一波,希望能抛砖引玉,让大家更深入浅出地了解3D材质贴图及PBR技术。

PBR,Physically-Based Rendering,意为基于物理的渲染,是一种能对光在物体表面的真实物理反应提供精确渲染的方法,也是近年来极其生猛的3D工业趋势。

《The PBR Guide》是由Substance by Adobe,Demo Artist Team负责人Wes McDermott主笔,并由3D领域各路专家共同编制的PBR指引手册。本书分为「物理现象浅析」及「材质制作指南」两大部分,从理论到实践,深度解析PBR工作流。

文章内容硬核中又略带苦涩,建议看官们分次服用。

The PBR Guide 原文地址:https://academy.substance3d.com/courses/the-pbr-guide-part-1

光线

光线在均匀透明介质中遵循着直线的发射轨迹。同时,光在不透明表面以及不同介质中的反射和穿透轨迹也是有迹可循的,所以我们可以直接推断并绘制光线的路径(如图1 所示)。

反射 Reflect:光线接触到物体表面后会被反射。这一现象遵循反射定律,也就是光线的入射角等于反射角。

折射 Refract:光线从A介质穿到B介质时会被折射,折射路径为直线。

在光线接触到物体表面时,它可能会被反射或折射,也可能最终会被介质吸收。但是值得注意的是,光线吸收并不会在物质的表面上进行。

吸收与散射-透明与半透明

当光线穿过不均匀介质或半透明材质时,可能会被吸收或散射:

吸收:当光线被吸收时,由于光的能量被转化成其他的形态(通常是热能),所以光线的强度也会相应减弱。同时,由于不同波长的光被吸收的情况不同,所以光的颜色也会改变。但是光线的角度始终保持不变。

散射:当光线被散射时,光的方向可能会被随机改变,偏向角取决于材质本身。但是,散射并不会改变光的强度。在生活中,散射是一个常见的现象,耳朵皮肤的透光就是一个很好的例子:因为耳朵的皮肤很薄,所以我们可以观察到散射的光线从耳朵背后穿透出来(下图2)。

当光线没有被散射且吸收也较弱时,光线可以直接穿透物质表面,例如透过玻璃,我们可以直接观察到另一侧的光线。再打个比方,如果在一个干净的游泳池里,当你在水中睁开眼睛时,一般可以直接看到较远处的池壁;相对的,如果游泳池很污浊,这些杂质粒子就会对光线进行散射,从而降低可视度。

光线在这类介质中穿透得越远,它则被散射或/且被散射得越多。因此,物质的厚度在光的散射和吸收中是一个重要的因素。厚度贴图可以用作描述物体的厚度,并且能被用于着色器进行渲染。

漫反射与高光反射

高光反射 Specular Reflection:当光在完美的平面上被反射时,根据反射定律,反射角等于入射角,这就是高光反射。然而现实生活中,大多数平面都是不规整的,所以反射的方向也会因为接触面的粗糙度而变得非常随机。反射改变了光的方向,但光的强度保持恒定。

越粗糙的表面,它的高光范围会越大,且表现也越暗。光滑的表面会让高光反射更聚焦,所以这种情况下的高光,在特定的角度下观看会更亮更强。需要注意的是,两种情况下,被反射的光的量仍旧是一致的。

折射改变了光线的角度。当光从A介质穿透到B介质时,它的速度与方向会被改变。折射率(Index of Refraction, IOR) 是一个用来描述光线折射时角度变化的光学参数,它用于表示当光线在不同介质中穿透时,到底被折弯了多少(生活常例:吸管插在液体里的折射效果)。举个例子,水的折射率是1.33,而平板玻璃的折射率是1.52。

当光线从A介质穿透到B介质时,它会在B介质内撞击不同的散射粒子,并被多次散射,然后再重新折射穿出这个物体。二次折射回原介质的穿透点与首次折射时的位置大致相同。

漫反射物质一般对光的吸收性很高,如果光线在这种物质里穿透太久,可能会被完全吸收掉。如果光线最终穿透了这个物质,也意味着其实它只穿透了很短的一段距离。

因此,在漫反射材质的渲染中,光线穿入点和穿出点之间的距离通常可以忽略不计。朗伯体(Lambertian Model,一种在着色渲染中用来展示标准漫反射的材质)就没有将表面粗糙计算在内。而其他漫反射光照模型,如Oren-Nayer Model,就有算上表面粗糙。

含有强散射和低吸收特性的材质通常被认为是中间媒介(Participating Media)或半透明材质(Translucent Materials),例如雾、牛奶、皮肤、玉器、大理石等。当渲染后三者时,通常会加入次表面散射(Substance Scattering)的光照模型,以保证渲染物理性质的精确性。这种情况下,光线的穿入点和穿出点(光线散射的距离)就需要被考虑到计算当中。当计算一些变化较大且低散射、低吸收的材质时(例如雾或烟),可能需要渲染成本更高的算法来执行,如蒙地卡罗模拟(Monte Carlo Simulations)。

1. 微面元理论 Microfacet Theory

理论上,当光线接触到一个不规则表面时,漫反射和高光反射会同时发生且与表面的粗糙度相关。然而在实践层面,由于散射发生在材质的内部,所以粗糙度对漫反射的可视影响并不明显。因此,光线二次穿透物体时的角度几乎不受表面粗糙度与入射角度影响,最普遍的漫反射光照模型——朗伯体就无视了表面粗糙。

在这个指南中,我们统一将表面不规则(Surface Irregularities)称为表面粗糙度(Surface Roughness)。表面不规则度还有根据不同的PBR流程会有好几个别称,包括粗糙度(Roughness)、平滑度(Smoothness)、光泽度(Glossiness)或微面(Micro-surface)。这些名词都是在描述同一个性质,就是材质表面的次纹理(Sub-texel)几何细节。

这些表面不规则信息会被记录在粗糙度贴图或光泽度贴图内。基于物理的双向反射分布函数(BRDF)也是在微面元理论上建立的,它认为一个大表面是由很多细小的含有多变方向的小平面组成的,这些小平面就叫做微面元(Microfacets),每一个微面元都基于单一法线方向来反射光线。

当微面元的表面法线方向正好是光线入射角与观察角的半角向量方向相同时,这个微面元就会反射可视光(在理论高光反射中,反射光线要进入观察者的眼中,必须要满足高光平面法向量正好与视线向量和入射向量的半角向量在一条直线上。[8])。然而在某些情况下,并不是所有符合以上条件的微面元都会起作用,因为有些光线会被投影(光线方向)或遮蔽(观察方向)所阻挡。

表面不规则在显微镜层级造成了光的漫射。模糊反射就是由于光被弥散式地反射所造成的,这些光线并没有被平行地反射回来,所以我们接收到的反射就是模糊的。

色彩

一个表面可被观察的颜色是由光源发射的波长所决定的。这些波长会被物体本身吸收,同时也会被高光反射或漫反射。那些经过吸收和分散后还留存的波长就是我们眼睛所看到的颜色。

举个例子,苹果的表皮大部分都反射红色光,是因为只有红光的波长在苹果皮表面被反向散射,其他光都被吸收了,所以我们看到的苹果是红的。

此外,苹果有着和光源颜色相同的非常明亮的高光,是因为苹果的材质本身具备非导体(电介质)特性(不对光的波粒进行传导),因此苹果表皮上的高光反射几乎与光的波长无关(具体可看下章)。对于这些材质,高光的颜色几乎从来不受物体表面颜色影响。

Substance PBR着色器一般使用GGX微面元分布(GGX Microfacet Distribution)。

1. BRDF

双向反射分布函数(BRDF,The Bidirectional Reflectance Distribution Function)是一个用于描述表面反射特性的函数。在计算机图形中,有着各式各样的BRDF模型,有些并非基于真实物理渲染的。而基于真实物理性质的BRDF,必须遵循能量守恒定律并且展现出互易律。互易律源自于亥姆霍兹互易原理(Helmholtz Reciprocity Principle), 这意味着,进入的光线和返回的光线可以理解成是可以彼此互易的,这并不会影响BRDF的最终推演结果。

Substance PBR着色器使用的BRDF模型是基于迪士尼制定的反射模型建立的。同时,这个模型也基于GGX微面元分布特性。GGX为高光反射提供了更为优质的解决方案:表现为更窄小的高光峰值点,以及更长的衰减弥散,这让材质的高光看起来更加的真实。

能量守恒

能量守恒在PBR渲染中是非常重要的前提。这个守则认为一个表面二次发射(反射或散射)的光必须少于这个表面接收到的光。对于艺术家或设计师来说,我们不必担心如何去控制能量守恒,因为PBR着色器的设定一般都自行符合能量守恒定律。

菲涅尔效应与F0

菲涅尔项(Fresnel Item)作为BRDF的一项系数,在PBR着色中扮演着非常重要的作用。法国物理学家菲涅尔认为,一个表面反射的光的总量与观察光的角度相关。打个比方,如果你在观察一缸水,并且从它的正上方看下去(与水面垂直),就可以直接看到水池的底部,因为此时观察的角度为0°,视角向量与水面的法线向量重合。当你从更斜的角度去观察水面,并慢慢与水面趋于平行时,你会看见越来越多高光反射。

菲涅尔项通常不是我们可以在传统着色器中控制的属性,它一般只能由PBR着色器自行控制。当我们从掠射角(Grazing Angle 切线角/掠射角)观察所有光滑表面时,它们在与光线入射角成90°的位置几乎会形成100%的反光(当我们使用菲涅尔效果时,通常能观察到材质球边缘会出现一圈强反光)。

对于粗糙的表面,反射会更加地明显,但不会完全达到100%高光反射。这种情况下,反射的效果受每个微面元的法线与光的角度影响,而非取决于整个宏观面的法线与光的角度。表面粗糙时,光线被微面元进行不同角度的弥散反射,所以整个反射效果看起来会更加柔和。

1. F0:0度菲涅尔反射

当光线垂直地(与法线角度夹角为0)射在一个平面上时,一定比例的光会被高光反射。用折射率(IOR,Index of Refraction)去测算,我们就可以得到被反射的光的数量。这个值我们记为F0, 而光折射进材质表面内部的数量,我们记为1-F0(如图11示)。

对于普遍非导体(电介质)材质来说,它们的F0范围在0.02-0.05之间(Linear Space)。对于导体材质来说,F0范围大概为0.5-1.0。一个表面的反射率受它的折射率影响,可以由以下公式求得:

F0反射值也影响着我们应该如何制作材质贴图。非金属材质(绝缘体)使用灰阶表示反射数值,而金属材质(导电体)则使用RGB数值。基于PBR与艺术设计对反射的理解,我们可以预设普遍的光滑的非导体(电介质)表面,F0会反射2%-5%的光线,在切线角反射100%的光线。

非导体(电介质)表面的F0反射值一般区别不大,事实上,当我们改变表面粗糙度时,这种反射值的变化也很难被看见。然而,不同材质之间还是有一定区别,图12展示出F0在金属与非金属表面上的范围。需要注意的是,宝石类的材质可能是个特例,因为它们的F0值更高。

导体与绝缘体-金属与非金属

我们为PBR制作材质时,应当时常考虑该材质是金属还是非金属,因为它们的制作规范完全不同。

尽管对部分类金属材质(Metalloid,非金属与金属的混合材质)来说,分类很难被明确,但是对大多数制作材质的工作流而言,事先分清楚材质是否为金属仍然是一个较好的方法。本文将会对金属与非金属的特性进行拆解,并分别讲述它们的制作规范。

在作为导体的金属材质中,由于折射光被吸收,所以金属的颜色来自于反射光线。因此,在贴图中并不会赋予金属漫反射颜色(Diffuse Color)。

1. 金属 Metals

金属是热和电的优良导体。导电金属的电场是零,而当带有电场与磁场的入射光波打在金属表面上时,光波会被部分反射,而所有的折射光波都会被吸收。被抛光过的金属的反射值范围较高,一般在70%-100%之间。

不同的金属吸收光不同的波长,由于折射光线被吸收,金属的色泽/色调来自于反射光。举个例子,黄金会吸收可视光谱高频段的蓝光,所以它看起来是黄色的。

在贴图中,我们不会给金属赋予漫反射颜色(Diffuse Color,这也就是我们平常在金属材质中添加颜色会无效的原因)。举个例子,在Specular/Glossiness的工作流中,金属在Diffuse Map一般会设为黑色,而反射值通常记录在Specular通道里带有色调的色值中。(对于金属材质来说,反射值会用RGB来记录,而且会拥有色调。)由于我们在PBR环境中工作,所以需要使用真实世界的规律、数值与方法在贴图中还原金属的反射。

对于金属来说,另一个影响材质的因素就是它们被腐蚀的程度,也就是说,造成腐蚀的因素可能会对金属的反射状态造成比较明显的影响。在金属贴图中,被腐蚀的区域会被标记为黑色,并被认定为非导体(电介质)材质。Metallic/Roughness工作流的着色器会将这些腐蚀区域的F0值统一设定为4%。

另外,上漆的金属一般也会被认作是非导体(电介质)材质,色漆会被认为是覆盖在原金属之上的一层材质,只有那些没被油漆覆盖到的金属才会被定义为原始金属。同样的原理也应用在被尘埃或其他物质覆盖的金属材质上。

正如本章一开始提到,在制作PBR材质前一定要先想清楚材质是否为金属。甚至为了更精确的材质效果,设计师应该明确金属材质的状态:是否有上漆、被腐蚀、或者被尘埃、油等其他物质覆盖。如果材质某部分区域的贴图显示它不是金属,该区域会被着色器理解为非导体(电介质)材质。特别需要留意的是,腐蚀效果一般都会有一些介乎金属与非金属之间的混合状态(金属贴图可能呈现出不同层次的灰阶)。

2. 非金属 Non-Metals

非金属(非导体/绝缘体/电介质,为设计师直观理解,下文统称为非导体)是较差的电导体。材质内被折射的光一般会被散射或者同时被吸收(通常会穿透物体二次折射)。对比起金属,他们会反射更少的光并且拥有反照率颜色(*Albedo Color,需要注意的是Diffuse、Albedo、Base Color是在不同工作流的名称,它们作为贴图时所携带的RGB属性有着相似的适用原则,但是所携带的信息在本质上并不完全一致。广义上,Albedo包括了Base Color和Diffuse)。

之前也有提到基于折射率计算,对于普遍的非导体(电介质)材质来说,F0反射率大概在2-5%左右。这些值的转换回线性空间大概是0.017-0.067之间(40-75 sRGB)。除了部分比较特殊的非金属材质(如宝石)之外,绝大多是非导体材质的F0值都不会超过4%。

就像金属材质一样,对于非金属材质,我们也需要使用真实世界测量的数值来绘制。但是我们很难去获得各种非透明材质的折射率(IOR)。不过,非金属材质的F0值变化不会很大,所以我们可以为反射值制作一个参考的维度(如图15)。

线性空间渲染

在着色器中,色值的提取与色彩的计算操作都是在线性空间(Linear)中执行的。这个流程会先把色彩贴图中已经被gamma-encoded(一般是sRGB)的值转成Linear。

在色彩管理的流程中,一般会由程序自动或工程师手动标记好这张贴图的色彩空间以便后面正确的计算。所有的计算与渲染会在线性空间中进行,在最终显示器显示前,再被gamma-correction矫正回sRGB,以保证色彩的正确显示。

那么要如何知道哪个图会被解码回Linear呢?如果设计师是从Substance Painter或Substance Designer中直出贴图的话,我们可以看哪些贴图中含有颜色(Diffuse Reflected Color),例如金属色调或者是玻璃色调。这些贴图在输入着色器前就应该被标记好它原有的色彩空间(通常是sRGB,因为设计师一般也是在此环境中将贴图绘制出来的)。

因此,在PBR渲染流程中会标记为gamma-encoded的贴图包括Base Color(基础颜色/反照率颜色)、Diffuse(漫反射)、Specular(高光反射)、Emissive(发光贴图)。

而当贴图仅用于记录数据时(材质粗糙度,是否为金属等),它们通常都会被输出为Linear。在PBR渲染流程中被标记为Linear的贴图有Roughness(粗糙度),Ambient Occlusion(AO)、Normal(法线)、Metallic (金属)、Height (高度)等。

当我们使用SP或SD设计贴图,并输出Substance材质时,一般不用担心Linear与sRGB的转换,因为这套输入输出的流程已经被自动化处理,所以最终渲染显示的结果也是被gamma矫正后的正确效果。

同样,在Substance Integration插件中使用Substance材质时,输出结果已经根据贴图的色彩空间(线性或sRGB)、以及所在程序的色彩管理设置进行自动转换。然而需要注意的是,理解这套流程背后的原理仍然很重要,因为当Substance材质贴图(Substance Map)作为普通位图(Bitmap)使用时,你仍需要根据你使用的渲染器来手动标记贴图的色彩空间。通常,后缀为.png, .jpg, .tga, .tif的贴图,gamma-encoded使用的是sRGB色彩空间;而.exr为后缀的贴图(如环境发光贴图HDRI)则为Linear空间。

PBR的核心属性

能量守恒定律:一个表面反射光的量少于它接收到的光的量。这个定律已经被着色器自动执行。

菲涅尔效应:产生菲涅尔效应的BRDF双向反射分布函数已经被PBR着色器自动执行。对于大多数非导体(电介质)材质来说,它的F0反射值不会有太大的变化,普遍分布在2-5%。而对于金属材质来说,反射值更高,范围在70-100%之间。

高光反射的强度由以下几个属性共同影响:BRDF算法(GGX、Blinn或其他)、不同工作流下的粗糙度或光泽度贴图、以及F0的反射值。

光的计算都在线性空间中执行:所有含色彩信息的贴图(如Base Color)通常都会被着色器转换成Linear用于计算。设计师或开发者需要注意这个转换是否由渲染引擎在引入贴图时自动执行,如果没有,则需要手动标记贴图的色彩空间。当贴图仅用于记录材质的属性数值(如粗糙度、发光度、高度、法线等),则该贴图在整个流程中都应该被解析为Linear空间。

本文仅供学习参考之用,原文及图片版权归属Substance及其母公司Adobe所有。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved