maya教程:2008分层渲染

修改
鏉ユ簮: 爷⑤-缺德 浏览 7505 日期 2011-10-24 0

maya 2008的render layer功能已经有显著改进,在这里,我加上maya内置的mental ray来示范一下它的新功能。

rendering in layers、passes这些方法在cg电影、电影制作上是很普遍的。当然也有很多好处,例如一个复杂的场景,可以分开成不同的layers来渲染,也可以省下一些memory(记忆体);在后期里可以更容易控制不同的layers & passes,而不需要再回3d 渲染,也可以个别调教偏色、模化等等。

很多书籍都会提及rendering in layers、rendering in passes两种功能,但我曾看过有些书籍或教程把这两种不同的功能混为一谈,再加上名字差不多的maya render layer,以致不少人会把这些意思搞乱了。

[next]

render layer:

  maya控制渲染输出功能的名称。以前我们分拆layers是需要另存档案的。一个场景到了渲染时,便会像癌细胞扩散一样,一个变5至6个。如果之后要改镜头或动作,我们便要把原文件交给同事修改,然后再重新分拆layers,当年这种情况的确是我们灯光师的噩梦。现在的maya则可以在同一场景中,做到以前的分开储存档案的效果,而且一般来说也蛮稳定的。

rendering in layers:

  是把同一个场景中不同的物件分拆出来render(渲染)。就拿这个教程作举例,椅子、 地板和背景便是分开渲染。它们的质感及深度不同,在后期中我可以很方便地个别做出调教。在电影制作中,我们也会把前后景及人物分开渲染。

[next]

rendering in passes:

  在同一场景、物件当中,把不同的attribute(属性)分拆出来渲染,以下是一些例子。

pass types:

  color pass — 又称为beauty pass。这是一个最基本及主要的pass,包含了物件的颜色、颜色贴图和扩散光照,至于高光及反射则要看需要剔除与否。

  注:有时候漫反射也会拆出来,所以diffuse pass可以独立为一个pass。

  highlight pass — 又称为specular pass。highlight只渲染物件的高光。

  注:本人喜欢用反射来模仿高光的,因为这样较接近真实环境及物理学上的现象。

  reflection pass — 把附近的物件及环境透过反射渲染出来,需要raytracing计算。

[next]

  occlusion pass — 特殊的pass,以物件之间的距离计算,视觉上来看就像越近就会越黑,用以模拟真实环境物件之间的光子衰减。

  mask pass — 应物件本身的不同材质需求,渲染mask(遮罩)以方便在合成中作出更多调教。

  shadow pass — 通常是把物件落在地上或背景的阴影独立渲染。

  depth pass — 又称为depth map or z-depth,里面每点也包含了场景中深度的数值,不过这需要用上特别的档案及插件才可运用。

  effect passes — 视乎情况的需要,分开渲染特别效果,一般指optical effect(光学特效)中的light fog、lens flare、particle effect(粒子特效)烟、尘等。

[next] 场景设定

(图2)跟平常打灯的程序一样。

   灯光、环境设置方式上用了mental ray及final gather渲染。这时候椅子、地板及背景是一起调教的,我们称这为master layer。而我的工作习惯是maya做了大致的质感后,光暗和颜色的微调都留在后期做。

  建立render layers — color pass

(图3 )选择render layer editor。

  首先在右边的channel box & layer editor下方,把原来的display layer editor,转为render layer editor(图1.3红框中),之后把场景中会影响到渲染的物件选起来。

[next]

(图4) 建立新的render layer。

选好了物件后,便按“create new layer & assign selected objects”(图4红框中的按钮),这样就会把你所选择的物件,自动加入到新创建的layer中。 为了方便管理,将"layer1"这名字改为"color",用滑鼠双按layer1便可更改名字。

(图5) attribute spread sheet能够把大量物件一起更改属性。

  在color pass中是不需要渲染出地板及背景的,但我们不是直接隐藏它们。因为使用了raytracing及final gather原故,隐藏了就会影响反射和灯光,所以我们会用上一项功能叫primary visibility。maya最上面的命令菜单里,找出window > general editors > attribute spread sheet,另外选择地板及背景等所有物件。然后如图5所示,在 render tab中把primary visibility全部关上。(maya中on等于1,off则等于0)

[next]

(图6) 椅子的color pass

  设定好后,先渲染一幅图来看看有没有什幺遗漏。

specular pass

跟着到specular pass,这次我用另一个方法来建立layer及移除没有需要的物件。

(图7) 使用copy layer来复制另一个pass

确定我们仍然在“color”的layer中工作,创建render layer editor > layers > copy layer (图7),然后把新增的layer改名为specular。

(图8) 在layer中移除物件

  由于椅子的specular pass不需要反射其物件本身的颜色,因此可以把椅子以外的东西全部拿掉。render layer editor > layers > remove selected objects rom selected layers (图1.8)。

[next]

(图9) specular pass用的灯光

另外建立一盏spot light,把灯光属性中的emit specular勾选,emit diffuse留空便可,再调整适当的角度及效果。这盏spot light是在"specular" layer中建立,所以默认就会加在目前工作的layer里。(图9 inputsinputs一栏内可看到)

(图10)透过render layer,可以在不同的layers中设置各自的render setting。

我说过specular pass不需要反射至物件本身的颜色,那么我们可以优化render setting,从而帮助渲染速度更有效率运行。(注:这是身为lighting artist 的责任) 在render layer editor,每行layer也有4个图示,分别是:recycle previously rendered image (重用已渲染的图)、material override(物料取代)、member override (部分物件取代)、render setting override (渲染设定取代)。

[next]

render setting override设定(图10)

(图11)

  现在只有 “specular” layer关掉了raytracing,没有影响到 “color”layer的default render setting。

(图12) specular pass。

reflection pass

返回“color”layer,在render layer editor > layers > copy layer,然后把新增的layer改名为reflection。

(图13)mirror shader

跟着我们建立一个全reflection的shader,也称为mirror shader,用来在后期控制物件reflection的多少。(图13)

[next]

设置方法:除了specular color及reflectivity都是1外,其他attributes都设为0或者黑色。

(图14) reflection pass

  把这个mirror shader assign(指配)整个椅子,得出如(图14)的效果。

occlusion pass

  把正在工作的“reflection” layer,copy多一个layer (render layer editor > layers > copy layer),然后把新增的layer改名为occlusion。

(图15) mental ray中的occlusion shader

  把hypershade左面的create maya nodes,转为create mental ray nodes。在textures menu下,选择mib_amb_occlusion。(图15)

[next]

(图16)

mib_amb_occlusion只是一个texture node,我们随便assign去场景中任何一个 object,maya便会自动建立完整的shading network。(图16)

(图17) occlusion texture node设定

(图18) occlusion material设定

mib_amb_occlusion shading network的设定:

(图19) 开启了material override(球形标示转为蓝色)

返回hypershade,在mib_amb_occlusion1material按滑鼠右键弹出marking menu,拣选左面的assign material override for occlusion,这时render layer editor的球形标示转为蓝色。(图19)

[next]

注1: material override顾名思义就是把单一material assign在整个layer里。

  注2: 了解这原理后,以后可以用presets > occlusion来代替以上步骤。

occlusion pass不需要final gather来计算,我们又可以用render setting override 来省略:

(图20)椅子的occlusion pass

很多工作中的lighting artist都只顾到物件自身的occlusion,而忽略了物件和地面的occlusion关系。把“occlusion” layer多复制一个,改名为“bg_occlusion”。用attribute spread sheet,把椅子的primary visibility全部关上(0或off)。地板及背景则为1或on。

[next]

(图21)地板的occlusion pass

mask pass

今次借用“specular”layer来copy layer。然后把新增的layer改名为“mask”。由于“specular” layer中有盏灯而在“mask” layer 用不着,所以我们选择这盏spot light,在“mask” layer上按滑鼠右键,选取remove selected objects,移除这盏灯。

(图22) r,g,b mask shaders

在hypershade建立3个surface shaders,out color分别设定为纯红(255,0,0)、纯绿(0,255,0)及纯蓝色(0,0,255)。(图1.22)

[next]

(图23) mask pass

  把3色surface shaders分别assign不同的物件。(图23)

shadow pass

(图24) 创建 "shadow" layer

在“master”layer内,拣选椅子、地板及用来投射阴影的主灯后,便按“create new layer & assign selected objects”(图1.24),这样便将所选择的物件,自动加入到新创建的layer中,改名为“shadow”。打开attribute spread sheet,选择椅子。在render tab中把primary visibility全部关上。

(图25) use background shader。

[next]

在hypershade中,创建一个use background,然后把specular color、reflectivity、 reflection limit都改为0或黑色,只保留shadow mask为1。(图25)接着将use background assign给地板,这样地板便会渲染出投影,而没有自身物料。

shadow pass不需要final gather来计算,又要用render setting override的方法来省略,请参考之前“occlusion”的设置。

(图26) shadow pass

shadow pass是以alpha channel来储存,所以在render view中要按display alpha channel(图26红框)才会见到。

[next]

(图27) background layer

  最后渲染出地板及背景,便可以进入compositing(合成)的步骤了。(图27)

compositing (after effects)

(图28) 8个render passes及layers在ae的次序

(图29) reflection pass及mask pass的用途

reflection pass我只应用在皮革上,做出哑面的感觉。我添加了fast blur filter,然后利用mask pass以set matte,应用在红色mask的皮革范围内。

(图30) 原本的reflection pass及哑面处理后的分别

(图31) 用curves filter来调色

[next]

由于shadow、occlusion都分开渲染出来,我可以在颜色控制上处理更容易,在这里我调教了少许偏蓝色。

  到这里,整个教程就结束了。最终完成图和没有分拆render passes的比对,可看到明显立体感的区别。rendering in layers、rendering in passes两种功能各尽其能、物尽其用,才会有一个亮眼的效果,希望本教程对大家有所帮助。

评论

{{ username ? username.charAt(0).toUpperCase() : '?' }}
Ctrl+Enter 发布
{{ (c.username || c.author_name || '?').charAt(0).toUpperCase() }}
{{ c.username || c.author_name }} {{ Utils.formatDate(c.created_at) }}