在MtoA里,AO材质是可以制作透明物体的AO通道的,只需要将透明贴图链接到AO材质的opacity上,关闭物体的Opaque属性就可以了。但是这种方法仅仅限于场景较为简单,切透明物体少,并且你是通过新建渲染层给物体附加AO材质这个制作流程的。但当你的场景里有大量物体使用了不同的透明贴图,那么你是依然可以通过新建渲染层,逐个附加透明AO材质来制作AO通道,但是这样效率极其低下,同时也增加了材质球的数量,容易造成混乱(除非你求自虐,否则绝对连节点连到你跪地不起。)
鉴于上面说的,在这里,小弟给各位提供一个方法可以通过MtoA的AOV来实现透明物体的AO通道。那么如果熟悉MtoA的同学一定知道直接新建custom AOV,并且连接上AO后,输出的AO通道里,该透明的物体仍然没有透明的。如下图。
Beauty层
直接AOV连接AO材质,输出的AO层
OK,如果是这样,那么我们要怎么去利用AOV来输出透明的AO通道呢?这里,要先清楚Arnold本身是支持透明物体输出正确的diffuse这些固有AOV通道的,前提是你勾选了“Enable AOV Vompositon”(Mtoa 1.0之前的版本需要勾选,1.0开始已经自动集成了,不再需要自己去勾选)以及你是用的是aiStendard材质,输出的AOV的data格式是rgb而不是rgba。像这个测试场景,勾选后输出diffuse的通道的话,就是这样的:
那么既然aiStendard材质可以实现这个功能,那么我们是否可以借助aiStendard材质这个特性,把diffuse这个着色信息变成AO的着色效果呢?答案是可以的。有用过Mentalray的同学都知道MR里做AO效果你需要一个maya的surface材质,连接一个AO贴图来做。这里的思路是一样的。那么aiStendard如何变成一个surface材质呢?有同学会说用matte color,但是matte color不能输出为AOV,所以不行。个人认为可行的方法就是把Emission的scale开为1。如下图:
当然,这样子,周围物体是会受影响的,因为毕竟是自发光的,但是在这里是可以忽略的,为什么可以忽略我后面会讲。那么至此,我们就得到了一个想要的surface shader了,接下来的就很简单了,只需要把AO材质连接到emission的color上,来看看效果:
那么,我们现在把这个连好的aiStendard材质连接到一个新建的customAOV上,这还没完,我前面提到了我们必须使用aiStendard自己提供的AOV类型,那么我们连接的是emission,所以在这个连好的aiStendard材质的AOV Name面板里,把Emission通道的名字选为创建的customAOV通道的名字。然后在Maya要做的事情就完成了,输出的图像如下:
Maya的节点图如下:
看完输出的AO图,你们会揍我一顿说着哪里正确了!(打我别打脸,谢谢~)但是我想说AO的信息是正确无误了,那哪里不对?首先是图像没有把背景该镂空的黑色镂空,为毛?因为没有alpha通道,所以我们在到后期软件合成的时候,就需要先把beauty层的alpha通道提取去出来给这个AO通道。本人使用的是Nuke,我利用shuffle把beauty层的alpha通道转化为rgb信息,和这个AO通道先multiply一次,利用alpha的黑色区域把AO层里不需要的区域遮盖掉,并且把alpha通道拷贝给AO层,premult一次,得到一个我们需要用的AO层,如下:
Nuke的节点图如下:
看到这一步,各位知道为什么我之前说emission对周围有影响也没关系了吧?作为AOV后,覆盖的是整个图像,那么就等于整个都是白板图像了,不存在光阴影响了。到此,就可以继续你的合成工作了!需要注意的是在合成过程中有可能会出现少许的白边情况,收边一下就可以了~
最后一张是利用AOV输出的AO层,另一张是手动给材质的AO层。AO的信息是一样的。
希望这个方法可以提高各位的工作效率啦!遁地~