当前位置: 首页 > news >正文

环境图配置不存在pbr_[翻译]你也可以制作的PBR!

9e1c2dfcf4f3d2d4eb12b325e4a6d73b.png

在翻译这篇文章之前我看了很多知乎大佬们关于PBR的文章,大部分都是技术向的。我希望能从美术的角度去了解他们如何看待PBR,如何使用它,所以有了这篇文章。

一个全新的标准

随着硬件设备算力的增长,以及大家对标准化美术资源的需求,PBR已经快速地成为了游戏工业的标准,并正在重新定义我们制作及渲染美术资源方式。

49156482649133e824d4161f18f34b18.png

PBR的定义是指使用写实的渲染/光照模型,配合对表面的测量数值来精确表达现实世界的材质。

PBR与其说是一套严格的规则不如说它是一个原则,实际上,最终各个渲染器对PBR的实现也是略有区别的。但是,每一个PBR系统都基于同样的基本原则(尽量精确地渲染物体),许多想法都可以容易地从不同的项目或引擎转移到其他的项目或引擎。Toolbag2支持大部分你可以想到的PBR系统的输入。

除了渲染质量,一致性是其中一个很大的原因驱使我们去使用测量好的标准参数。使用统一的基础材质让美术不必在制作材质的过程中进行猜测和尝试,同时,从把握美术方向一致性的角度,它也能保证整个美术团队制作的内容可以在不同的光照条件下都获得很好的效果。

PBR 常见问题

在我们开始之前,我们先解释几个人们在提到PBR时常常会问到的问题。

1) 我并不知道怎么使用PBR系统,我需要去重新学习如何制作美术资源吗?

大部分情况下,答案是,不。如果你熟悉上一代逐像素动态光照渲染方式,那么你已经掌握为PBR制作资源的核心知识。剩下的最大的障碍主要是一些新的术语,下面我会特别写一个部分来解释各式各样的术语。这些概念大部分都很简单且容易上手。

如果你主要从事手绘/移动平台的工作,学习这些新的技术和工作流程会稍显有些挑战。不过,这也不会比重新捡起传统的基于法线高光的工作流程更难。

2) 美术有必要为制作的材质亲自用光学矫正相机去采集图片参考吗?

不,大部分的时候你所在的团队/工作室会为你提供一个通用的材质参考库。作为替代,你也可以从一些第三方服务中找到已知的数值参考,如Quixel’s Megascans 提供的服务。制作你自己的扫描数据是一个非常技术且耗时的过程,大部分情况下你都不必去做这件事。

3) 如果我使用一个PBR shader/材质是不是就意味着我的美术作品是精确还原物理的?

这其实没有必要,简单的说,使用PBR shader并不保证你的作品在物理上的精确性。PBR系统是一个基于物理准确的光照,渲染,及精确矫正过的美术资源的综合体。

4) 是不是只用使用了金属度贴图才算是PBR?

不,金属度贴图只是其中一个方法决定材质的反射率,它并不会比使用高光/光强贴图有更准确的物理属性。

5) 是不是必须定义折射率(IOR) 才算是PBR?

不,与金属度贴图类似,折射率也只是另外一种对光反射的表现方法。.

6) 高光不再重要了吗?

并不准确。高光/镜面反射强度,或者反射率仍旧是PBR系统中一个重要的参数。也许你不再需要直接设置一张放射率贴图(例如使用金属度制作流程),但是它在PBR系统中仍旧存在。

7) 光滑度贴图替代了高光贴图吗?

不,光滑度或粗糙度贴图定义了材质的微表面(粗糙或光滑程度)的状况,但是并没有取代高光贴图。但是,如果你实在是不习惯使用光滑度贴图,你也可以适度地将某些光滑度贴图中的细节放到高光贴图中绘制。

8) PBR系统可以用来制作风格化的美术资源吗?

当然可以。如果你的目标是一个奇幻的风格化的世界,每个材质都有精确的定义也是非常重要的。即便你要做的是一只会放彩虹屁的独角兽,你仍旧需要这只独角兽遵从物理光照规则。皮克斯动画的很多作品就是这方面最好的例子,他们即非常风格化,同时材质又相当地精确。

输入值(贴图)和术语

不熟悉PBR概念的美术之所以会觉得资源的制作会有极大的不同,常常都是因为PBR中使用的术语。如果你曾经使用过现代的渲染器和美术制作技术,你其实已经掌握了很多PBR渲染系统中的概念。一般决定制作什么素材,如何把素材加入到PBR渲染器中是最难的第一步,让我们从基本的术语和概念开始。

能量守恒

能量守恒的概念表述为,一个物体不能反射出多过它接受到的光。

7621f10932bfcf169f998fc32fbe8332.png

简单的说,就是漫反射性质更强或者说粗糙的材质反射出的光更暗,高光区域更松散。光滑的或者镜面发射性质更强的材质反射出的光更亮,高光区域更紧密。

Albedo漫反射

漫反射就是基础的颜色输入,即我们常说的颜色(Diffuse)贴图。

452eb5f70c0196913b0b17b0fa132f06.png

Albedo贴图表现的是漫反射光的颜色。PBR系统中的Albedo贴图与传统Diffuse贴图最大的区别就是Albedo贴图中没有方向光和环境遮罩(AO).传统Diffuse贴图中的方向光在某些光照条件下看上去并不正确,环境遮罩(AO)应该放入PBR系统给出的单独AO槽中。

Albedo贴图有时也不仅仅只定义漫反射颜色,例如使用金属度贴图时,Albedo贴图定义了绝缘体(非金属)部分的漫反射颜色和金属部分的反射率。

Microsurface微表面

Microsurface微表面定义了材质表面的粗糙或者光滑程度。

7fdf9b9e3c318b2bc1e8d7dd31d99f96.png

上图显示了材质的微表面是如何影响能量守恒原则的,越是粗糙的表面高光/镜面反射越松散越暗,而越光滑的表面越亮,高光/镜面反射越是集中。

基于你使用的引擎,你的贴图可能会被命名粗糙度贴图(roughness map)而不是光滑度贴图(gloss map)。实际上这两种类型几乎没有区别,顶多就是粗糙度贴图是一张反色的图,例如,暗色表示光滑表面亮色表示粗糙表面。Toolbag软件默认白色为最光滑的表面黑色表示最粗糙的表面.

Reflectivity反射度

反射度用来描述材质表面能够反射光的比例。所有类型的反射度输入,包括高光贴图,金属度贴图或者折射度,定义的都是视角正对表面对的光线反射,而菲涅尔(Fresnel)则是定义入射余角(侧面)表面对光线的反射强度。

88a6c993fb0b2739a11c237b029005c3.png

注意看绝缘材质的反射率范围有多窄。综合能量守恒考虑,我们很容易得到这样的结论,材质表面的多样性应该放入微表面贴图而不是反射度贴图中去表现。对某些特定的材质类型,反射度几乎需要保持一个常量。只有金属才有反射颜色,绝缘体的反射颜色应该都是灰度/白色。因此,用来描述反射强度/颜色的贴图(习惯叫高光贴图)更偏向于金属度贴图。

766bbaa5a9a7da79906df6165b59db30.png

使用金属度贴图时,绝缘表面对应的像素设置为0.0 (纯黑)– 表示一个固定的反射值(线性: 0.04 sRGB: 0.22) ,使用颜色贴图(albedo map)表示漫反射。金属表面对应的像素设置为1.0 (纯白),高光镜面反射的颜色将会从颜色贴图中取值,shader中会把漫反射值置为零。金属度贴图中的灰度值被认为是半金属,最终会从颜色贴图中获得色值并用该灰度值压暗(半金属材质并不常见).

再强调一次,从物理精确性的角度来说,金属度贴图并没有比标准高光贴图更为准确。但是,某种程度上,它更容易理解并且可以压缩进一个灰度通道来节省内存。如果说金属度贴图有什么弱点,那应该就是相比高光贴图它会丧失部分对绝缘材质色值的精确控制了。

传统的高光贴图对高光强度和颜色的控制更为灵活。但是高光贴图一般都得保存在一张24位的图上,比较浪费内存。同时,它也需要美术非常了解材质具体的物理属性才能给定正确的值,这可能是好事也可能是坏事,看你期待什么了。.

专家建议: 金属度贴图的应当由值0 或1 构成(一点点渐变用来过渡也没问题)。油漆过的金属不应当被当成金属来处理了,油漆是绝缘体,金属度贴图应该表现的是材质的最外层。

IOR是另外一个方法表现反射率,可以等同于高光或者金属度输入。它与高光输入最大的不同是IOR的数值定义的是差值的比例,这个比例值是光在一个材质中的传播速度于光在真空中的传播速度之间的比值。IOR 值1.33 (水) 表示光线在水中的速度要比在真空中的速度慢1.33倍。这些值都可以在 Filmetrics Refractive Index Database查到。

我并不建议使用IOR来替换高光贴图或金属度贴图,它在游戏中的使用并不多见,并且在同一张贴图中调和多种材质的IOR值也很困难,即便在Toolbag 2中它也更多地用来做实验用途。

Fresnel菲涅尔

菲涅尔(Fresnel)定义入射余角(侧面)表面对光线的反射强度。

f7ea300a8b2dacf41a7cbab9224bc32a.png

菲涅尔的值一般都设置为1(在金属反射模块被锁死为1),意味着所有类型的材质在入射余角的反射率都是100%。不同的微表面通过光滑度贴图会得到亮一点或者暗一点的菲涅尔效果。

注意:Toolbag 2目前还不支持使用贴图控制菲涅尔的强度。大多数PBR系统中,包括Toolbag2,菲涅尔都是通过BRDF,Bling-Phong或者GGX,来近似计算的。如果真的有一个数值额外控制Blinn-Phong BRDF中的菲涅尔,这多半是给上一代渲染使用的,且并不保证物理的精确性。

Ambient Occlusion环境遮罩

557d24f84d59c4a1d70a0f7028d19375.png

环境遮罩(AO) 描述大部分光被其他细节阻挡的情况,通常都是从3d模型烘培得到。

把AO作为一个独立的贴图放入渲染器而不是直接烘培到颜色或高光贴图,可以让渲染器更加灵活地使用它。例如,AO 仅对环境漫反射生效,对动态方向光源产生的漫反射或镜面反射皆不生效。

AO通常不会和高光或光滑度贴图做乘法。用AO去乘以高光贴图曾经是一个很流行的做法来减少不恰当的镜面反射,但是现在基于本地屏幕的反射已经效果好了很多。

Cavity裂痕贴图

裂痕贴图一般从3D模型/或者法线贴图中烘培出来。

1415dbe3ae8e0bb272a9de80319ed67b.png

一张裂痕贴图一般仅包含表面的凹陷区域。整张贴图大部分时候都是大片的白色区域中有部分黑色区域来表现光在这些地方无法前进。裂痕贴图会影响环境光和动态光源的漫反射和镜面发射。

找到材质数值

制作PBR资源最大的挑战莫过于为材质找到精确统一的数值。网络上有各式各样的测量好了的数值资源,但是找一个尽量完善可以信赖的库还是非常痛苦。

Quixel’s Megascan的服务是真的有用,他们提供大量从真实世界采集并矫正过的贴图资源。

da2863ceade3014f08a946b86b8a4485.png

大部分材质库都是在实验室条件下测量的那些你很少在生活中遇到的材质的数值。类似纯净度,年代,氧化程度,使用痕迹等真实世界因素还是会对材质的表象造成影响。

Quixel的扫描来源于真实世界。所以即便是同样的材质类型,基于上述不一样的真实世界因素也会有不同的数据,特别是光滑度/粗糙度贴图。上图中这些数值将会是一个很好的开始点,并不是一个不可动摇的绝对的标准。

制作贴图

c8cb8eb9b9ba630e5ae42771cd335a73.png

为一个PBR系统制作贴图有非常多的方向,这取决于你个人的技能和你手边有什么软件能用。以下是我制作图中这个镜头的过程回顾。

c9bb0869947d5908838f17625406f558.png

首先,使用Megascans采集的无缝贴图为每个类型的表面在Toolbag中指定基础的材质,对于那些找不到参考的材质,结合观察推断材质值。在创建基础材质这个过程中Toolbag让我可以快速灵活地调整到一个精确的状态。我常常直接把材质赋予我的高模,来综合考虑最终这些贴图将如何融合到一起。

建立好基础材质以后,我会把数值和贴图放入Photoshop开始分层绘制。底部的黄铜,镀镍,底漆,半光滑贴图绘制,绘制字母,最后是红色的光滑塑料。这样的层次设定方便检查各种材质。类似的分层绘制功能也可以在类似dDo, Mari 或者Substance Designer中完成。

基础层次设定结束以后,我加上了一些额外的细节去表现它的使用程度。我首先使用dDo生成一个脏灰pass,然后修改完善它并放入光滑度贴图。

比起最终的制作结果,你具体使用的制作方法并不重要,放心大胆地尝试属于你自己的方法。不过,你的小心最好不要在特定的光照条件下去调整参数以达到一些有趣的效果。使用基础统一的数值能极大地简化你的制作流程,提高资源的可用性,而且还能保证无论你如果设定光照,他们看起来都是统一的。Artist Q&As

在网站我们已经看到了很多非常令人印象深刻的作品由Toolbag2制作出来,现在我们来采访一下其中的几位制作人PBR相关的问题。

Q: 你在适应PBR制作流程的时候最困难的部分是什么?

A: 我想最困难的应该就是保证精确的漫反射,发射及光滑度值。有时候耍点小聪明调整出来的数值虽然在某种光照下看上去还行,但是一旦到了其他光照环境中就变得很糟了。如果你使用正确的数值,你的作品在各种场景看上去都是没问题的,毕竟没有什么比现实更棒了。

刚开始我需要把Photoshop在一个屏幕中打开,另外一个屏幕打开数值参考表,不过随着你越来越熟练,你并不需要总是去查表。

Q: 你是怎么去确定你的材质的参数值的?

A: 在网上找参考。自己测量是一件超过我能力范围的事情,但是我还挺想试一试,感觉能学到很多东西。

Q: 来点建议给想成大佬的人吧?

A: 这个问题好难。最好的建议是学习物理。它真的可以帮助你去理解为什么材质的性状是这样,想成为大佬没有捷径,只能是练习,练习,练习。

以下是另一位制作人的采访。

Q: 你是怎么去确定你的材质的参数值的?

A: 我一般遵循以下的步骤:

为物体表面的每一个材质类型收集参考。

对每一个材质先做一个大致的块,这不必很精确但是必须是你之后调整的基础。对每种材质我会从参考参数开始,这些参考可以从网上轻松地找到,如果我找不到一个现成的参考,我会遵照逻辑来推测一个(例如, 磨损的橡胶几乎没有反射,黄铜是铜和锌的混合物,等等)。.

反射值是最容易开始的部分,也可以给你一个制作其他贴图的基础。对于绝缘体,要保证它的值在一个很小的没有金属反射的范围,对于金属部分,先把颜色贴图化成黑色很重要,然后再去找适当的反射值。做完这些我会给一个简单的光滑度贴图,一般把材质分入3类(亮的,中等,粗糙)。然后我会去选择一个颜色值来保持物体不要太暗。我也会切换不同的天空来查看材质在不同的光照环境下是不是一致的。一旦这些初始化的工作结束了,我就可以开始依据PBR的原则对每个输入参数进行精修了。这种时候对那些表面变化很强烈的材质,例如坑坑洼洼的塑料,我会在法线贴图上盖一层进行加强。

记住如果物体不发生改变反射贴图中的数值也是不会改变的,这点很重要。

Q: 来点建议给想成大佬的人吧?

A: 从我的角度来讲,尽管很多事情已经变得比以前容易了许多(像确定反射参数),但并不表示你可以完全依赖这些便利。制作令人信服的材质的核心仍旧是观察,然后把你看到表现到你的贴图中。

Reference

[1]Physically-Based Rendering, And You Can Too!

相关文章:

  • 单引号和双引号的区别
  • 前端缓动画为什么不能有小数_前端兼容性的一些问题
  • luogu4187 [USACO18JAN]Stamp Painting (dp)
  • jsencrypt vue使用_在VUE中使用RSA加密解密加签解签__Vue.js
  • Learning-Python【6】:Python数据类型(2)—— 列表、元组
  • 如何计算虚拟化vcpu_【虚拟化实战】VM设计之一vCPU
  • 小希的迷宫(并查集判环)
  • 标志寄存器df_标志寄存器的详细解释
  • 分布式框架
  • c++ vector 头文件_Vector:C++界热销的Pro版数组
  • MFC中ON_COMMAND,ON_MESSAGE,ON_NOTIFY的区别
  • pdo mysql insert id_php pdo insert与pdo insertId的用法
  • 使用hbuilder打包时,调用地图和相机
  • mysql 无限分级 栏目_PHP+MySQL实现无极限分类栏目的方法
  • AOP,过滤器,监听器,拦截器【转载】
  • CentOS 7 防火墙操作
  • chrome扩展demo1-小时钟
  • Consul Config 使用Git做版本控制的实现
  • CSS实用技巧干货
  • JS笔记四:作用域、变量(函数)提升
  • js面向对象
  • js数组之filter
  • laravel with 查询列表限制条数
  • maven工程打包jar以及java jar命令的classpath使用
  • Mybatis初体验
  • PHP CLI应用的调试原理
  • webpack4 一点通
  • 分布式事物理论与实践
  • 基于Android乐音识别(2)
  • 近期前端发展计划
  • 跨域
  • 配置 PM2 实现代码自动发布
  • 入门到放弃node系列之Hello Word篇
  • 深度学习中的信息论知识详解
  • 使用docker-compose进行多节点部署
  • 微信小程序开发问题汇总
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一些css基础学习笔记
  • zabbix3.2监控linux磁盘IO
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (二)c52学习之旅-简单了解单片机
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)VirtualBox安装增强功能
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)http-server应用
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core中的去虚
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 受管制代码
  • .net反编译工具