起因

前段时间,开始对在 Maya 中进行三渲二的渲染分层有了兴趣。于是,我就尝试自己探索一下:在 Maya 中使用 Aitoon 材质进行三渲二的灯光分层,以及在 Nuke中进行合成的流程。现在的三渲二影视作品普遍采用亮面、暗面加边缘光的方式进行灯光分层,部分镜头需要以亮面、灰面和暗面加边缘光的方式进行灯光分层,灯光师仅完成灯光角度的设计即可,最终画面氛围和效果需要合成师完成,这种分层方式使用aitoon材质球可以很容易地完成。

测试环境:maya 2018.5+Arnold 6.0.1.0
测试角色:不要钱的派大星

一. 材质相关

前期部门仅制作卡通材质,不需要在材质球中为rim、highlight 指定灯光。材质球的base 权重需要设定为1(下图1),关闭材质的能量守恒选项和间接反射(下图2),材质的baseTonemap属性都链接ramp节点并保持只有两个点。调节材质、线框效果与贴图的阴影融合等步骤需要前期部门调整到最终效果。如果做了材质阴影融合,材质部门需要提供另一套只带有阴影贴图的 aimatte 材质球用于切换,供灯光部门渲染阴影通道使用。

二.灯光环节流程

1.灯光使用要求

由于卡通材质的特殊性,灯光渲染需要至少一盏光源即可区分亮暗,根据官方介绍虽然 aitoon 材质并不挑剔灯光类型,但由于面光源和skydome等灯光的性质,可能会导致受光面的强度大于1,从而导致莫名的错误,灯光的要求使用平行光、点光源或者聚光灯,并且这三种光源对于风格化高光的形成效果较好,可控性更高。

2.Aov及渲染分层

通过对aitoon材质的渲染,我们可以获取Arnold提供的所有的Aov通道,但由于aitoon材质球并非基干物理的材质球,并不能按照LPE的方式进行分层,传统的分成方式需要考虑灯光的强度和颜色对贴图的影响以及材质之间的影响,而卡通渲染并不计算diffuse的灯光颜色信息,因此我们可以采用diffusealbedo+主光照射范围+暗部颜色+平面反射+透射的方式进行分层,此方法能保持合成的可调性的同时也最大限度保留了材质的效果。通过读取模型的材质信息,给模型添加附加属性,用aiuserdata节点传递已经记录的每个模型的材质球信息,即可确认模型被灯光照射的亮暗面的范围,最终输出通道,具体方式如下:

(1)主光照射范围+暗部颜色

给每一个材质为aitoon的物体添加Arnold额外属性(color1,color2.pos1,pos2.interpolation)用于记录数据(下图左一),该属性记录材质球的basetonemap中ramp 的信息(下图右一),其中颜色数据使用vector类型 ,位置数据使用float类型,ramp的过度类型使用int类型,这三种类型分别可对应用户数据节点的 aiUserDataColor、aiUserDataFloat、aiUserDatalnt。

以 toon_key 为例创建自定义 aov(下图左一),通过创建自定义的aov,将aov色器选择为新创建的 aitoon 卡通材质球 关闭该aitoon 材质球的能量守恒,边缘,高光。将basecolor调为1,并给basetonemap链接一个默认的ramp节点。创建2个aiUserDataColor2个aiUserDataFloat1个aiUserDatalnt节点,并将color1、color2分别填入aiUserDataColor,pos1、pos2分别填入aiUserDataFloat,interpolation填入aiUserDatalnt,将五个节点链接到上一步的ramp中即可渲染出,所需要的包含有灯光照射的两部范围信息的aov,该aov的色彩信息为仅为灯光照射的亮面(toon_key)(不含材质信息),以此类推,可获得暗面的颜色(toon_env),渲染出的aov(下图右一)

至此,我们获得需要的灯光层,该灯光层保留材质的 ramp 亮暗面信息和亮暗部区域(非aitoon 材质渲染为黑色。

(2) Diffuse abedle、高光和透射

材质本身的高光和透射可利用maya自身的aov输出,分别为specular direct、specular indirect,transmission direct, transmission indirect。

(3) edge

物体的边缘线输出,需要通过自定义edge aov进行输出,需要将aov的filter设定为 contour类型否则渲染不出线框(如下图)。

(4) 边缘光和风格化高光

为了便于调节,aitoon材质的rim边缘光和风格化高光可通过单独分层并对层中的物体进行材质覆盖的方式进行提取aov,单独分层也有利于控制效果。

(5) 其他需要的aov

除上述aov外,其他一些aov可根据需求添加,本文考虑使用的辅助aov包括:N、 fresnel、OCC、RBzd、P、crypto_matte(三种)、direct和indirect 可在含有非aitoon材质时输出,用于调整非aitoon材质物体。

(6)文件分层

文件的分层方式通过maya的renderSetup分层方式进行分层,最后以模板的形式导出渲染层,供流程使用。使用render Setup的方 式分层可以很方便地对模型进行材质覆盖、属性覆盖和导出自定义aov的操作,以边光和风格化层高光为例,为保持物体边缘光的统一性,需要整体赋予一个aitoon材质球,用于调整边缘光效果;而材质球的边缘光和风格化高光属性是没有填入对应灯光的shape名称的,因此可以在覆盖材质或者属性的基础上,统一给相关的模型覆盖属性或材质球,达到渲染效果。

三.合成

通过上面的方法,我们可以得到合成所需要的aov,通过合成树即可还原灯光渲染的效果(合成树中的图片不是本例的图片,此处仅做示范),并在此基础上由合成师进行环境氛围和灯光效果的调整即可(如下图)。

四.写在最后

此方法按照aitoon材质球的非基于物理渲染的特性,以basetonemap的ramp与贴图相乘得出最终颜色信息的特点,进行aov分层;它相对于单纯使用aitoon材质球对物体进行材质覆盖的方式进行亮暗部区分的优点在于,不以单一的材质覆盖的亮暗部过度信息、能更准确地保留材质的亮暗部范围和过度方式、能分别获取到材质的亮暗部rgb信息。相对于传统基于物理的分层方式,能单独调整亮暗面颜色信息,由于三渲二不能在灯光中处理氛围,此方式在合成中可调性更高。

注意:在输出AOV通道时,若自定义的AOV和Arnold渲染器自带的AOV一起渲染出图时,会导致Arnold渲染器自带的Aov渲染错误,不渲染出正确的信息,因此,自定义的AOV需要单独分层渲染。