编者按:

本文转载于公众号:戴老师的 CG 日常     

作者:戴巍

如需转载请与原公众号或原作者联系。


很长一段时间内一直有人问我,为什么从 substance painter 里导出的贴图在 maya 里渲效果差别挺大的。

我当时很纳闷,因为这套流程我搞得久,研究得透,基本上说还原度是非常高的。但是一些朋友给我发了有问题的文件,测试了之后发现确实有问题。

以下是我探究的过程,心急的朋友直接翻到下面看问题产生的原因以及解决方法。

探究过程

后来我发现一个共通点,就是导出的时候都是使用的 Redshift template。之后我就测试了很久 Rs 渲染器相关的问题,以为问题出现在渲染器上。然而无果。

问题最大的地方就出在反射模糊程度上。

这张是 SP 直接截图的

这张是使用 SP 的 Redshift template 导出的贴图,用正确的方式在 maya 中重建了材质渲染的。

可以看出第二张的反射看起来更加模糊,明显和 sp 效果不同。于是又尝试导出最原始的贴图试了试(因为 sp 里使用的是 metal/rough 流程,所以原始的贴图应该是 roughness 贴图)。

一开始用的 glossiness 贴图

之后尝试了 roughness 贴图

而一连上 roughness 贴图,反射效果居然就对了。

所以这就只能说明问题出在这张 glossiness map 上了。我将 glossiness 贴图导入 ps 进行了反向的操作。因为从数学上来说,roughness = 1 – glossiness 。所以反向之后的 glossiness 应该和 roughness 完全一致。

结果你可能猜到了,居然不一样!!??这都能不一样?仅仅是一个反向的操作,在 SP 导出的时候到底发生了什么??能够让反向都出问题??

左边是 glossiness 右边是反转的 roughness ,理论上应该完全一致。

我找到 SP 里导出 Redshift 的 template,发现了这个秘密。原来这个预制导出 glossiness 贴图的时候,并没有导出正常的 glossiness 贴图,而是导出的glossiness 贴图的平方!

为了验证正确性。我又做了这样的操作:将原始 roughness 贴图反转,那么将得到真正正确的 glossiness 贴图,然后,我再对这个 glossiness 贴图做平方操作,看看是否和 SP 预制导出来的图一致。

平方的操作是通过在 PS 里使用 multiply(正片叠底,算法上是 A*B,自己和自己相乘等于是平方)叠加模式来完成的,得到的结果果然完全一致!!不信可以把这张图拖到 ps 里吸颜色,我已经吸过了。

结论

以上总算是搞明白是咋回事儿了—— Substance Painter 在使用 Redshift template 导出贴图的时候,会错误地导出一张不适合的 glossiness² 贴图,使我们的最终渲染效果和 SP 预览效果相差明显!

解决方案是,导出的时候自己手动把 glossiness² 贴图替换成 正常的 glossiness 贴图;或者使用原始的 roughness 贴图输出都行。反正千万不要用 glossiness² 贴图。

那么为什么?

我也去 Redshift 的论坛和 Substance painter 的论坛发了帖子询问这个事情,现在还没人回答。不过通过不断地搜索阅读,我也大概知道了是怎么回事。(虽然没有得到正面回答不能下定论)

首先是 Redshift 论坛的一个帖子,讨论去年RS除新版本新材质球的时候的一些技术细节。

doca.m – 26 November 2015 01:28 AM
Second is a question about roughness intensity curve. If I am right in arnold, roughnes curve is linear, but in v-ray roughness has its own strange curve. Redshift had it own curve similar to mental ray. That was one thing that I didn’t like at all. So, mu question is are you going to preserve that intensity curve as it was, or will roughness curve be linear?

The new Beckmann (Cook-Torrance) BRDF will have the same roughness curve as Arnold. GGX BRDF will have the same curve as the Disney shader and probably all other materials that use the GGX BRDF. We have a ‘linear’ version of Ashikhmin-Shirley (our current BRDF), which we’ll be deploying in the new material, although we’re going to try to keep our old materials backwards compatible.

这些讨论的内容大概的意思是说,以前的 RS 反射模糊(glossiness) 这个数值调起来很奇怪,因为感觉不线性,像 mental ray 当年的感觉。

mental ray 你要用过就知道,那建筑材质的反射模糊,突出一个恶心,广为诟病。在 0.5 – 1 这个数值之间,基本就没啥差别,都是反射很清晰的效果,然而数值一旦调到 0.5 以下,材质效果立即变得模糊起来。很不符合人的思维,很不科学,很不线性!

这是一张视频里的截图,视频链接在下面,是 Redshift presentation on NVIDIA booth at SIGGRAPH 2016。

这一个画面当中,他正在解释,新版本的 Redshift 的一些革新,其中就包括材质球的反射模糊手感会变得更线性。他截了一些图,其中大家仔细看一下第一排的球,是早期 Redshift 使用的材质,从右向左,glossiness 数值均匀地由 1 变成 0 ,那么这个过程中材质的反射效果也是由清晰变模糊。

特别需要注意的是,我用框框住的右边一排球,你会发现,他们的反射几乎没什么变化,反射都很清晰。这就是前文提到的,glossiness 值大于 0.5 的时候,数值变化不敏感的现象。

https://www.youtube.com/watch?v=63L8MMZp4fs&feature=youtu.be&t=11m40s

而以上说的这些,其实就是为什么会有 glossiness² 这种奇怪的东西存在的原因了。这张截图是 SP 帮助文档对于 mental ray 对接的介绍。其中就提到了,mental ray 的 glossiness 需要进行平方操作,才会得到好的效果。

后来我心里算了一下。0.7 * 0.7 = 0.49 ,也就是说,像 mental ray 的 glossiness 调到 0.5 的时候,才相当于别人材质的 0.7,怪不得效果不是很显著了。就是有个平方的算法在这里面搞鬼啊。

而且 Redshift 以前的材质球也是这个得性,只不过后来改版把这个毛病给改掉了。 而我在这里大胆猜测,由于 algorithmic 工作人员要对接的其他平台太多了,总有照顾不周的时候,可能他们没有了解到更新改版以后的 Redshift 材质,已经丢弃了 glossiness² 的落后算法, 也一直没有更新他们的 Redshift template 才导致这么个乌龙情况出现的。(只是猜测)

好歹最后问题都搞明白了,解决方法也很简单。我们的 SP to maya 的流程再一次挺立起来。完美小人也算是放下了一块大石头可以安心休息了。

Categories: News

相关文章(Related Posts)