文中使用模型贴图来自网友 散仙 分享。
很长一段时间内一直有人问我,为什么从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的流程再一次挺立起来。完美小人也算是放下了一块大石头可以安心休息了。
---------------------------------------------------------------------------------------------------------------------------
相关阅读
如果对substance painter 到maya的流程感兴趣的话,一定不要错过以前的精彩文章。从理论到实际操作,到快速完成工作的脚本,一应俱全。
最近研究了很多有意思的东西,慢慢更新。如何在影视渲染中使用PBR流程 - 知乎专栏
在maya中还原substance painter材质效果(视频教程) - 知乎专栏
SP2M工具发布,以及使用方法介绍 - 知乎专栏
sp2m_v1.03发布,支持redshift渲染器 - 知乎专栏