本文翻自八猴渲染器官网Joe “EarthQuake” Wilson 大神的文章:原文链接
本教程将涵盖艺术创作的基础知识,以及一些 PBR 标准背后的原理,和一些常见的问题。
打开新世界
由于计算机能的提高和对艺术创作标准化的普遍需求,快速便捷成为游戏行业的一个标准,基于物理的渲染(PBR),可以帮助我们重新定义改如何去创造和呈现艺术。
基于 PBR 物理的渲染是指,使用真实的阴影/照明环境以及测量物体表面值来精确的标识真实世界材质的概念。
PBR 与其说是一套严格的规则,不如说是一种概念,因此,PBR 系统的实现往往会有所不同。
每个 PBR 系统都基于相同的主要思想,尽可能的模拟准确的真实环境,所以它的移植性也很强。
不光是 PBR 的渲染质量,一致性的基础材质也是其被大量采用的一大原因。这使得大家在创作的时候,可以多从艺术角度以及真实环境去考虑和预测创作结果。
PBR 常见问题:
Q:我不击倒如何使用 PRB,是否要重新学习?会不会加大我的学习成本?好烦呐,到底要不要学?
A:特么,这么多问题?快滚,你特么别学了。哥不会告诉你,PBR 非常简单,如果你学过传统渲染的话,那么你已经拥有了 PRB 使用的特权(知识和经验),如果你只是做平面设计或者从未玩过渲染的亲,你还是放弃吧!
Q:需不需要为每一种材质去拍摄或扫描一些高端的照片作为贴图啥的?
A : NO,基本材料很容易实现,或者你可以去第三方网站收集这些材质。比如 Quixel 的 Megascans 服务。傻子才自己去做扫描数据库,费力好时不讨好的事,特么,老板你有钱!
Q : 如果是使用 PBR 着色器,是否意味着就能模拟真实的物理属性?
A:特么,想多了吧!PBR 是一种物理精确的灯光、阴影、色彩矫正等内容的组合。如果靠计算机真能实现,还要显示世界干哈?当然不排除未来的某一天,duang 的就发生了。
Q:我是否必须使用金属度(Metalness)作为 PBR?
A:不,金属度只是确定反射率的一种方法,一般来说他的物理精确度并不比使用精镜面颜色/强度更精确。
Q : 是否必须使用折射率(IOR)作为 PBR?
A : 不,与金属度输入相似,IOR 只是定义反射率的另一种方法。
Q:镜面是不是没用了?
A : 不,镜面反射强度或反射率仍然是 PBR 系统中一个非常重要的参数。
Q : 光泽度(gloss / roughness)能替代镜面反射吗?
A:不,光泽度和粗糙度定义了材质的表面外观,并不能替代镜面强度。如果你不习惯使用光泽度,那么你也可以使用镜面啊!
Q : PRB 技术能否用于程序化中?
A : 当然可以
概念和术语:
ENERGY CONSERVATION 能量守恒
能量守恒的概念是:物体不能反射比它接收到的更多的光。
为了实用,更多的漫反射和粗糙的材料会反射更暗和更宽的光,同时更光滑和更反光的材料会反射更亮和更紧的光。
[pay point="3"]
ALBEDO 反照率
反照率是基本的颜色输入,通常称为漫射图。
Albedo 定义的漫射光的颜色。在 PBR 中,Albedo 与传统的漫射之间最大的区别之一是缺少定向光或者环境吸收(AO),
Albedo 有时会定义更多的漫射颜色,例如:在使用金属度的时候,Albedo 则定义了绝缘体(非金属)的漫射颜色和金属表面的反射率。
MICROSURFACE 微(观)表面
微表面定义了物体表面的光滑度和粗糙度
通过上图我们可以看到能量守恒原理是如何受到物体微观表面的影响的,粗糙表面将会显示更宽,但更暗的镜面反射,而平滑的表面会显示更明亮,但更清晰的镜面反射。
根据不同的渲染器,您的纹理可能被称为粗糙度,或者光泽度。
在实践中,这两种类型之间几乎没有差别,尽管粗糙度可能有一个反向映射(即:暗值等于光滑/光滑的表面,而明亮的值等于粗糙/粗糙的表面)。
默认情况下,PBR 系统希望白色定义最平滑的表面,而黑色定义最粗糙的表面。
REFLECTIVITY 反射率
这里的反射率一般指的是物体表面反射光的百分比。所有类型的反射率(即基本反射率或 F0)输入,包括镜面反射、金属度(metalness),IOR,定义了在观察头部时的反射面,而菲涅耳(Fresnel)定义了在掠射角度的反射面。
需要注意的是,对绝缘材料的反射率范围有多窄。结合能量守恒的概念,可以很容易地得出结论:
表面的变化一般在微观表面中表示,而不是反射率中,对于给定的材质类型,反射率往往保持相当恒定。反射色往往是绝缘体的中性/白色,而且只对金属有颜色。因此,一个专门用于反射率强度/颜色(通常称为高光)的贴图可能会被应用到金属度上。
左边是反照率+高光贴图(传统方法),右边是金属度+反射率贴图(PBR 方法)
当使用金属度贴图时,
在金属度贴图白色部分被定为固定的反射率值(线性:0.04 sRGB: 0.22),并使用 albedo 贴图来实现漫反射值。
金属表面,在金属度贴图中为白色,从 albedo 贴图中提取镜面颜色和强度,在着色器重,漫射值为 0(黑色)。
金属度贴图的灰度值,将被是为部分金属,并从 albedo 贴图中提取反射率,并将扩散比例与此值相对应。
当然金属度贴图并不比一个标准的高光贴图的物理精度好或差,但是它的概念更容易理解和清晰,并且一个金属度贴图更容易被记录和保存。
而在传统的镜面成像技术中,金属贴图的缺点是对绝缘体的精确值失去控制。
传统的镜面反射贴图提供了对镜面强度和颜色的更多控制,并且在尝试复制某些复杂的材料时允许更大的灵活性。
还有高光图的主要缺点是,它通常会被保存为 24 位文件,从而导致更多的内存使用。
TIPS:金属贴图应该使用 0 或 1 的值(有些渐变可以用于转换)。像油漆金属这样的材料不应该被设置成金属,因为油漆是绝缘体。金属的值应该代表材料的顶层。
IOR 是定义反射率的另一种方法,它等价于镜面和金属的输入。与镜面输入最大的区别是,IOR 值是用不同的刻度来定义的。IOR 尺度决定了光通过物质与真空之间的距离。1.33(水)的值意味着光在水中的传播速度比真空的空间要慢 1.33 倍。您可以在Filmetrics 折射率数据库中找到更多的测量值。
对于绝缘子,IOR 值不需要颜色信息,可以直接进入索引域,而消光场应该设置为 0。对于具有颜色反射的金属,您将需要为红色、绿色和蓝色通道输入一个值。这可以通过一个图像映射输入来完成(映射的每个通道都包含正确的值)。还需要为金属设置消光值,您通常可以在包含 IOR 值的库中找到该值。
通常不建议使用 IOR(相对于镜面或金属的输入),因为它通常不会在游戏中使用,并且在具有多种材料类型的纹理中获得正确的值是困难的。在工具包 2 中,IOR 输入更多的是用于科学目的,而不是实际的。
FRESNEL 菲涅耳
菲涅尔是在掠射角度反射的光的百分比。
菲涅耳一般应该设置为 1(并且在金属度反射率模块上锁定为 1),因为所有类型的材料在掠入射角度都能 100%反射。通过光泽度图的内容,可以自动计算出微表面上的差异,从而产生更亮或更暗的菲涅耳效应。
注意:Toolbag 2 目前没有支持纹理贴图来控制菲涅尔强度。
在 Toolbag 2 和大多数 PBR 系统中,Fresnel 是由 BRDF 自动近似的,在这个例子中是 Blinn-Phong 或 GGX,通常不需要额外的输入。
然而,对于布林- phong BRDF 的菲涅尔有一个额外的控制,这意味着遗留的使用,因为它可能导致非物理精确的结果。
AMBIENT OCCLUSION 环境吸收
环境遮挡(AO)表示大尺度遮挡光,通常由 3d 模型烘烤。
将 AO 作为一个单独的映射,而不是将其放入 albedo 和镜面映射中,可以让着色器以更智能的方式使用它。
例如,AO 函数只对环境漫射光(在工具袋 2 中基于图像的照明系统的漫射组件),而不是直接漫射光从动态光或任何类型的镜面反射。
AO 一般不应连接到高光或光泽度的贴图。将 AO 连接到镜面上可能是过去的一种常见技术,
可以减少不适当的反射(例如,天空反射一个遮挡的物体),但现在可能用于局部反射对于表示物体间反射方面,可能会做得更好。
CAVITY
空腔图表示较小的遮挡光,通常是由 3d 模型或普通地图烘烤。
空腔图应该只包含表面的凹区(凹坑),而不是凸区域,因为空腔图是相乘的。
内容应该大部分是白色的,颜色较暗的部分代表被困的光线的凹凸区域。空腔图对环境和动态光源的扩散和反射都有影响。
另外,反射遮挡图可以加载到空腔槽中,但在做这个时一定要将弥散腔值设置为 0。
个人总结一下:
上面提到的“贴图”目测是不完全准确的,应该是通过算法得出映射贴图,当然也在 SD\SP 贴图软件中可以直接输出这类贴图。
Metalness 金属度(映射)贴图,是使用黑白色阶来表现金属与非金属材质的。
Albedo 反照率(映射)贴图在配合金属度的时候,可以表现物体表面的漫反射、镜面颜色和强度、反射率以及扩散等信息。
Gloss/Roughness 光泽度或粗糙度,来表现物体表面的光滑度 (白色光滑、黑色粗糙)
查找材质的值
在使用 PBR 系统时,最困难的挑战之一是找到准确和一致的值。
在互联网上有很多测量值的来源,但是找到一个有足够信息的图书馆是一件很痛苦的事情。
Quixel 的 Megascan 的服务在这里非常有用,因为它们提供了大量的经过校准的贴图纹理,从真实世界的数据中扫描出来。
大多数材质库的值往往来自实验室条件下的原材料,在现实生活中你很少见到。
在现实生活中,随着时间、氧化、磨损等因素会导致与材质库的值不一样。
虽然 Quixel 的扫描是用真实的世界材料来测量的,但是根据上面描述的不同的条件,甚至在同一种材料类型中也经常有变化,特别是在光泽度/粗糙度方面。上面图表中的值应该被看作是一个开始点,而不是生搬硬套。
创建纹理
创建材质的方法有很多种,完全取决于你的爱好和能力。
上图是使用 dDo, Mari , Substance Designer三种软件配合实现的。
您应该在特定的光照环境中对材质值进行调整,使其看起来更有趣。
一下是对波兰 Wojciech Klimas 大佬的采访:
Q:使用 PBR 工作流最难的是什么?
A:最难记住的是保持准确的反照率、反射率和粗糙度值。你可以在一个特定的照明条件下欺骗和调整值以使其看起来很好,但是在其他照明条件下这可能看起来很糟糕。
如果你能正确地做到这一点,用物理上的精确值,让它在所有条件下看起来都很好,因为没有什么比现实更好,但是这是需要经过不断的练习的,我劝你还是放弃吧。
Q:如何确定材质的值?
A:通过网络研究,通过你的耳眼鼻屎,只要你能,你就可以做到!
Q:能分享啥秘诀么?
A:哥也想找教练学啊,多上 R 大的网站,加入 QQ 群:240424174!
下面再来采访一下 Joeri Vromman 大佬:
Q:你觉得 PBR 难么?
A:最难的是我大脑里现在有四款渲染器在打架。作为一个屌丝,我几乎没有机会接触到大佬们的工具、资源和项目,非常煎熬啊,所以起步的时候,步子一定不能迈的太大,请爱护好自己的蛋蛋。
Q:PBR 的值你咋整的?
A:最开始未必要精确,上手再说,在这个过程中,多收集资料,多围观神仙打架,如果真找不到资料,那么就学佛尔摩斯的推理来确定。
打光、上材质一顿操作后,在进行微调,在加上凹凸,使用 PBR 的概念,尽量让每种材质显得与众不同。
Q:你有 freestyle 么?
A:衮!
本文译自:https://www.marmoset.co/posts/physically-based-rendering-and-you-can-too/
[/pay]
本文参考:
- Sebastien Lagarde’s Adopting a physically based shading model
- Sébastien Lagarde’s summary of Rendering Remember Me
- Slideshow of Real Shading in Unreal Engine 4
- Mike Seymour’s Monsters University: rendering physically based monsters