注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

数字人的学习空间

分享技能和感悟

 
 
 

日志

 
 

【转载】基于物理规则的渲染(PBR),你也可以做到!  

2017-08-09 19:00:07|  分类: 转载 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

        这篇教程将涵盖美术内容创作的基础知识,以及各种基于物理规则的渲染标准背后的一些理论推导(并没有太过技术性的内容),并清除一些常见的误解。杰夫·罗素(Jeff Russell)撰写了一本关于《基于物理规则渲染的理论》的优秀教程,我强烈建议你在阅读本文之前先阅读下这个教程。

     非常感谢来自杰夫·罗素(JeffRussell)、泰迪·伯格斯曼(Teddy Bergsman)和瑞恩·霍金斯(Ryan Hawkins)的额外帮助。 还要特别感谢Wojciech Klimas和Joeri Vromman,他们的洞察力和艺术修养让人惊叹。


一个新的标准

由于计算能力的提高和对美术内容标准化的普遍需求,基于物理规则的渲染(PBR)迅速成为游戏行业的标准,基于物理规则的渲染(PBR)旨在重新定义我们如何创建和渲染美术资源。


基于物理规则的渲染(PBR)这个概念是指使用真实的渲染/光照模型以及测量得到的表面值来准确地表示真实世界中的材质。
基于物理规则的渲染(PBR)更多的是一个概念,而不是一套严格的规则,因此,基于物理规则的渲染(PBR)系统的实际实现会有一些变化。然而,由于每个基于物理规则的渲染(PBR)系统都是基于几乎相同的想法(尽可能准确地进行渲染),许多概念可以很轻松的在项目之间或是引擎之间进行移植。Toolbag 2支持大多数你期望在基于物理规则的渲染(PBR)系统中能找到的常用输入。

除了渲染质量之外,一致性是使用测量值的最大原因。拥有具有一致性的基础材质,可以让那些独立美术的材质创作不需要做什么猜测。这也使得从美术制作方向的角度来说事情会变得更容易,以确保美术团队创造的内容在每个光照条件下都会看起来很棒。


常被问到的有关基于物理规则的渲染的问题

在开始之前,重要的是要介绍下人们在谈论基于物理规则的渲染(PBR)时通常会问的常见问题。

1)我不知道如何使用基于物理规则的渲染(PBR)系统,我需要重新学习如何创建美术资源么?

在大多数情况下,你不需要重新学习如何创建美术资源。 如果你有过在上一代着色器中使用逐像素的动态光照经验的话,那么你已经拥有创建基于物理规则的渲染(PBR)系统内容所需的大量知识。术语往往是美术最大的障碍之一,所以我在下面有一节专门记录了各种术语并进行了翻译。这里大部分的概念是很容易上手理解的。

如果你的经验主要在于手绘/移动工作,那么学习这里概述的新技术和工作流程可能会面临更大的挑战。然而,可能不会比采用传统的基于法线贴图的工作流更难。

2) 美术是否需要使用某种偏振相机系统来为每种他们希望创建的材质捕获摄影参考?

不,一般来说,你的工作室一般会为你提供常见的材质参考。或者,你可以找到各种来自第三方来源的已知值,如Quixel的Megascans服务。创建自己的扫描数据是非常需要技术和耗时的过程,而且在大多数情况下不是必需的。

3) 如果我使用的是基于物理规则的渲染(PBR)着色器,这是否意味着我创作的资源是物理准确的?

并不一定如此。简单地使用基于物理规则的渲染(PBR)着色器不会使你创作的资源在物理上是准确的。一个基于物理规则的渲染(PBR)系统是物理上精确的光照、渲染和正确校准的美术资源的组合。

4)我需要使用一张金属贴图来让美术资源符合基于物理规则的渲染(PBR)吗?

不需要,金属贴图只是确定反射率的一种方法,并且通常来说,不比使用镜面高光颜色/强度图具有更多的物理准确性。

5)我需要使用折射率(IOR)来让美术资源符合基于物理规则的渲染(PBR)吗?

不,跟金属贴图一样,折射率(IOR)只是定义反射率的替代方法。

6) 镜面高光反射强度不再需要了么?

不完全是。镜面高光反射强度或反射率仍然是基于物理规则的渲染(PBR)系统中非常重要的参数。你可能没有可以直接设置反射率贴图(例如在使用金属贴图的工作流程那样),但在基于物理规则的渲染(PBR)系统中仍然需要镜面高光反射强度。

7)需要用光泽度贴图替换镜面高光贴图么?

不,光泽度贴图或是粗糙度贴图定义了材质的微观表面(到底这个材质是多么粗糙或是平滑),而不是用来替换镜面高光贴图的。但是,如果你不习惯使用光泽度贴图,你可以把某些细节放在光泽度贴图而不是镜面高光贴图中进行调整。

8)可以使用基于物理规则的渲染(PBR)系统来创建具有自己风格的美术资源吗?

是的,没问题。如果你的目标是创建一个科幻风格的有自己风格化的世界,具有准确的材质定义仍然非常重要。即使你正在创造一个头顶彩虹的独角兽,你通常也希望独角兽能够遵守光和物体的物理学规则。

这方面的一个很好的例子就是皮克斯的作品,他们的作品非常有自己的风格,而且经常处于材质精确度的前沿。这里有一篇关于《怪兽大学》里面的基于物理规则的渲染(PBR)的很棒的文章:fxguide feature onMonsters University


输入和术语

不熟悉基于物理规则的渲染(PBR)系统概念的美术通常认为在基于物理规则的渲染(PBR)系统下美术资源创作是非常不同的,这通常是由于使用的术语造成的这种印象。如果你已经使用过现代的着色器和美术资源创作技术,那么你已经对基于物理规则的渲染(PBR)系统许多概念有过了经验。

确定要创建什么类型的美术资源,或如何将你的美术资源插入基于物理规则的渲染(PBR)着色器可能会令人困惑,所以这里让我们从一些常见的术语和概念作为开始。

能量守恒

能量守恒的概念表明,物体不能反射的光比它所获得的光更多。


在实践中,使用了更多漫反射和更粗糙的材质将反射出更亮更集中的亮点,而更光滑、更反光的材质将反射出更亮更集中的亮点。

反照率

反照率是基本颜色输入,通常被称为漫反射贴图。


反照率贴图定义了漫反射光的颜色。基于物理规则的渲染(PBR)系统中的反照率贴图与传统漫反射贴图之间的最大差异之一是缺乏方向光或环境遮挡。方向光向光在某些光照条件下看起来不正确,而环境遮挡应该在单独的环境遮挡(AO)槽中添加。

反照率贴图有时包含的东西会多于漫反射颜色,举个简单的例子来说,当使用金属贴图的时候,反照率贴图定义了绝缘体(非金属)的漫反射颜色和金属表面的反射率。

微观表面

微观表面定义了材质表面的粗糙度或是平滑度。


在这里,我们看到了能量守恒原理如何受到材质的微观表面的影响,较粗糙的表面将显示更宽但是更暗的镜面反射,而较光滑的表面将显示更亮但却更清晰的镜面反射。

取决于你进行资源创作的引擎,你的纹理可能称为粗糙图贴图而不是光泽度贴图。实际上,这两种类型之间几乎没有区别,尽管粗糙图贴图里面可能包含的是反转过的贴图,也就是:暗值等于光泽/光滑值,而亮值等于粗糙度/无光泽。 默认情况下,Toolbag希望用白色定义最平滑的表面,而黑色定义最粗糙的表面,如果要加载反转后的光泽度/粗糙度贴图,请单击光泽模块中的反转复选框。

反射率

反射率是光在表面反射的百分比。 所有类型的反射率(也称为基础反射率或是F0)输入,包括镜面高光反射,金属和IOR,都定义了当从上方看的时候表面的反射程度,而菲涅尔定义了表面在掠角时的反射率。


重要的是要注意绝缘材质的反射率范围有多窄。结合能量守恒的概念,很容易得出结论,表面变化通常应在微观表面贴图中表示,而不是在反射率贴图中表示。对于给定的材质类型,反射率往往保持恒定。反射颜色对于绝缘体来说往往是中性/白色的,仅仅在金属的情况下才有颜色。 因此,在有专门金属贴图的情况下,可以丢弃专门用来描述反射强度/颜色(通常称为镜面高光贴图)的贴图。


       

        当使用金属贴图的时候,绝缘表面 - 金属贴图中被设置为0.0(黑色)的像素-被赋予固定的反射率值(线性:0.04 sRGB:0.22),并使用反照率贴图作为漫反射值。对于金属表面 -金属贴图中被设置为1.0(白色)的像素金- 镜面高光的颜色和强度取自反照率贴图,漫反射的值在着色器中设置为0(黑色)。金属贴图中的灰度值将被视为部分金属,并将从反照率贴图中取出反射率,并将漫反射值与该值成比例地变暗(部分金属的材质并不常见)。

        再次强调,金属贴图不会比标准的镜面高光贴图更加精确。然而,这是一个可能更容易理解的概念,并且可以将金属贴图映射到灰度级插槽中以节省内存。在镜面高光贴图上使用金属贴图的缺点是对绝缘材质的精确值会失去控制。

       传统的镜面高光贴图提供了对镜面高光强度和颜色更多的控制,并且在尝试复制某些复杂材质的时候提供了更大的灵活性。面高光贴图的主要缺点是它通常会保存为24位文件,从而导致更高的内存占用。它还要求美术对物理材质的属性有非常好的了解,从而设置正确的数值,根据你的角度来说,这可能是优点也可能是缺点。

       一个有用的提示:金属贴图应该使用0或1的值(某些渐变可以用于转换)。 像涂漆金属材质不应被设置为金属,因为油漆是绝缘体。金属值应代表材质顶层的属性。

       IOR是定义反射率的另一种方法,相当于镜面高光和金属输入。与镜面高光输入的最大差异在于IOR值是用差分刻度来定义的。IOR刻度确定的是光线相对于真空穿过这个材质的速度。IOR值为1.33(水)意味着光通过水比它穿过真空的速度慢1.33倍。你可以在Filmetrics折射率数据库中找到更多的测量值。

      对于绝缘体,IOR值不需要颜色信息,可以直接输入到索引字段,而消光字段应设置为0。对于反射带有颜色的金属来说,你需要输入红色,绿色 和蓝色通道的值。这可以通过图像来映射一个输入(其中映射的每个通道都包含正确的值)来完成。还需要为金属设置消光字段,你通常可以在包含IOR值的库中找到这个值。

      通常不建议使用IOR来代替镜面高光或是金属输入,因为它通常不用于游戏,并且在具有多种材质类型的纹理中获得正确的值是很困难的。 Toolbag 2中所支持的IOR输入更多是出于科学用途而非实用用途。

菲涅尔

菲涅尔是表面在掠射角对光反射的百分比。


菲涅尔通常应设置为1(并且与金属反射率模块一起锁定为1),因为所有类型的材质在掠射角的时候都变为100%反射。通过光泽贴图的内容,微表面差异会自动计算导致表面更亮或是更暗的菲涅尔效应。

注意:Toolbag 2目前不支持纹理贴图来控制菲涅尔强度。

菲涅尔,在Toolbag 2和大多数基于物理规则的渲染(PBR)系统中,由双向反射分布函数来自动近似,在这种情况下是Blinn-Phong或是GGX,通常不需要额外的输入。然而,Blinn-Phong 双向反射分布函数的菲涅尔还需要一个额外的控制,这意味着对它的使用可能会导致在物理上不准确的结果。

环境遮挡

环境遮挡(AO)表示的是大规模被遮挡的光,通常是从3d模型中烘焙得到。

将环境遮挡添加为单独的贴图,而不是将其烘焙到反照率贴图和镜面高光贴图中,这样可以使得着色器能够以更智能的方式使用它。举个简单的例子来说,环境遮挡功能仅阻挡环境漫反射光(Toolbag 2中基于图像的光照系统的漫反射分量),而不是来自动态光的直接漫反射光或是任何类型的镜面高光反射。

环境遮挡通常不应乘以镜面高光贴图或是光泽贴图中的值。将环境遮挡叠加在镜面高光贴图上可能是过去常见的技术,以减少不适当的反射(举个简单的例子来说,在渲染物体上对天空的反射),但是在现代的技术下,局部屏幕空间反射在表示物体间反射方面做得更好。


空腔贴图

空腔贴图表示小规模被遮挡的光照,并且通常由3d模型或是法线贴图烘焙得来。

空腔贴图应仅包含表面的凹的区域(凹坑),而不该包含凸的区域,因为空腔贴图的值会被乘以其他值。内容大部分应该为白色,较暗的部分表示光线被困住的表面凹陷区域。空腔贴图影响环境和动态光源的漫反射和镜面高光反射。

或者,反射遮挡贴图可以被加载到空腔槽中,但是当这样做的时候,请确保将漫反射空腔值设置为0


找到材质正确的值

使用基于物理规则的渲染(PBR)系统最困难的挑战之一是找到准确和一致的值。互联网上有各种测量值,但是要找到一个有足够信息可以依靠的库真的很痛苦。

Quixel的 Megascans服务在这种情况下非常有用,因为它们提供了一个从现实世界数据扫描得来的大型校准后的纹理库。


大多数库中材质的值往往是在实验室条件下从原材质中测量出来的,你在现实生活中很少能看到这种情况。材质的纯度、年数、氧化和磨损等因素可能会导致给定物体的真实反射率值会有一些变化。

虽然Quixel库的扫描是对实际材质测量得来的,但是根据上述各种条件,特别是当涉及光泽度/粗糙度的时候,通常也会在相同的材质类型内发生变化。 上图中的值更应该被认为是调整的起点,而不是刚性/绝对的参考。


创建纹理资源


有许多方法可以为基于物理规则的渲染(PBR)系统创建纹理资源,你所选择的确切方法将取决于你的个人偏好和你可以使用的软件。以下是我用来创建镜头的方法的简要介绍:

首先,使用来自Megascan库的平铺纹理和已知材质的测量数据为每种表面类型在Toolbag中创建基本材质,这可能会缺少适当的参考、逻辑和观察结果来确定这些值。 在Toolbag中创建基础材质可以快速调整这些值,并提供非常准确的预览结果。通常,我将基础材质直接分配给我的高精度模型,以便在进行最终烘烤之前,了解纹理组合在一起的效果。

在设置我的基础材质之后,我将值和纹理带入了Photoshop,并开始以合乎逻辑的方式进行分层。黄铜位于底部、镀镍、哑光底漆、半光泽纹理漆、刻字用油漆,最后是红色光泽塑料。这种分层设置提供了一种简单的方式能够以简单的遮罩来显示下面的各种材质。

可以通过诸如 dDoMari 和 Substance Designer等应用来实现类似的分层功能。

在我的基层设置完成以后,各种材质混合在一起代表各种磨损阶段,我又添加了一些额外的细节。首先我用dDo来生成一个灰尘和污垢渲染通道,然后在光泽贴图上完成了细微的表面变化。

用于为基于物理规则的渲染(PBR)系统创建内容的确切方法比最终结果重要得多,因此请随时尝试并找出最适合你需求的方法。然而,你应该避免在特定的光照环境中调整材质的值使得它在这种特殊的环境下看起来更好。为你的材质使用一个合理的基础值可以大大简化调整的过程,并在大型项目增加一致性和资源的复用性,还能确保你的资源无论在何种光照条件下总是看起来很棒。



对美术的一些问答

自从Toolbag 2发布以来,上面有一些作品一直让我们印象非常深刻,并希望借此机会突出一些特别的作品,并向创作者询问几个与基于物理规则的渲染(PBR)相关的几个问题。

WOJCIECH KLIMAS

Wojciech Klimas是来自波兰的艺术家,他在DNV工作,目前正在为调查模拟器项目工作。Wojceich也做一些自由职业的工作。


问:适应基于物理规则的渲染工作流程最困难的方面是什么?

答:我认为最困难的地方是要记住维护准确的反照率、反射率和粗糙度值。你可以随时调整这些值,以在一个特定的光照条件下看起来效果很好,但这可能会在其他光照条件下看起来不太好。如果你正确的设置了这些值的话,让这些值在物理上是准确的,它会在所有情况下看起来都很好,因为没有什么比现实更好了。

一开始我在一个屏幕上使用了Photoshop,另一个屏幕则是打开不同材质的反射值的参考图,但是随着你的经验越来越多,事情会变得更加容易,你将不再需要经常检查这些参考值。

问:你如何决定对材质使用哪些值?

答:通过研究互联网上提供的参考值。自己进行测量的话是超出了我的范围,但我想自己尝试一下,因为我觉得我可以学到很多东西。

问: 可以分享一个成为如此棒的艺术家的经验吗?

答:这是一个很难回答的问题。我可以给出的最好的建议是学习物理学。学习物理学真的有助于了解材质为什么是这样的表现。其实捷径,要让你的作品非常惊艳,你只需要练习、练习、练习。

JOERI VROMMAN

Joeri Vromman是来自Belguim的艺术家,他将在DAE继续深造,也可以在他学习期间做一些自由职业方面的工作。

问:适应基于物理规则的渲染工作流程最困难的方面是什么?

答:最困难的部分是将来自不同来源的信息拼凑在一起,作为一个独立工作的美术,我无法访问许多工作室所拥有的工具和资源,这在最初工作的时候似乎是非常难以解决的。然而,一旦你深入进来,并且越来越熟悉这个过程,它就会很快地结合在一起。凭借经验,这一步并不会像刚看来那么大,并且为符合物理规则的着色器制作纹理可以快得多。



问:你如何决定对材质使用哪些值?

答:我喜欢的工作方式包括以下步骤:

l  收集对象的每种材质类型/部分的参考对象。

l  首先对每种材质类型进行粗加工,这不一定要准确,但应该足够接近,以便你有一个很好的基础可以开始调整。

对于每种材质,我从反射率值开始设置,这些值可以在网上的各种图表中找到,如果我找不到某种材质的反射值,我会试着用逻辑推理来确定它(比如说,磨损的橡胶的反射会少一些,黄铜是铜和锌的混合物等等)。

反射值是最容易开始的部分,并为你提供其他贴图的良好基础。对于绝缘体,最重要的是保持它的值在非金属通常在的范围内。对于金属来说,重要的是首先设置漫反射颜色为黑色,然后找到适当的反射率值。此后,我将快速分配一个粗糙度值,通常只需将材质分为3类(闪亮、中间或是粗糙)。然后我选择反照率颜色,注意在这里需要保持一致性,而且不要太暗。 我还在各种天空进行切换,以确保材质在各种光照条件下的表现是一致的。一旦这个初始阶段结束,我将回头微调这些值,因为每种材质都是不同的,要牢记基于物理规则的渲染(PBR)的概念。 在这一点上,我喜欢为法线贴图添加一个基础的叠加层,用于那些有比较强烈表面变化的材质,例如说不平的塑料。

重要的是要记住反射率图中的值只有当材料实际变化的时候才会发生变化。

问:你可以分享一个成为如此棒的艺术家的经验吗?

答:在我看来,虽然某些东西已经变得更容易了(像反射率值可以从中选择),但这并不意味着你只能依靠这些方法。获得可信材质的关键仍然是观察,并能够令人信服地将你所看到的内容转换成最终的纹理。


参考文献

·         Sebastien Lagarde’s Adopting a physicallybased shading model

·         Sébastien Lagarde’s summary of Rendering Remember Me

·         Slideshow of Real Shading in UnrealEngine 4

·         Mike Seymour’s Monsters University:rendering physically based monsters


【后记】
想学好SP和SD软件吗?好好看看这篇文章吧,如果看不懂,看下篇我来讲解。哈哈......
  评论这张
 
阅读(429)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017