动画渲染
兼容90%CG软件,渲染提速400倍
很多情况下,在一个场景中我们很多类似的物体,有着相同的材质只是在颜色上有不同,比如一棵树上有上千的叶子,这些叶子的颜色有绿的,有黄的,有褐的。。。。。如果想把这各种颜色都能制作出来,我们就要一个一个给材质加载贴图,这样做很麻烦,效果也很低。
这个教程将告诉你怎么用一个ramp节点来控制多个物体的颜色。
原理:
使用arnold提供的aiUserDataColor节点使用每个物体的颜色受各的属性控制,再通过表达式从ramp上获取到随机的颜色赋给每一个物体。aiUserDataColor这个节点的作用就是给物体的shape节点上添加属性,通aiUserDataColor来读取这个属性的值以改变物体的颜色。
第一步:打开maya通过复制来创建很多个小球,创建一个面片pPlane1,一个aiSkyDomeLight来方便我们渲染观察。打开Hypershade窗口,并创建一个aiStandard 材质(aiStandard1)赋给所有的小球。渲染所下
第二步:选中所有的小球,打开脚本编辑器运行下面的脚本:
string $sel[] = `ls -sl`;
for($current in $sel)
{
string $shape[] = `listRelatives -s $current`;
if(!`attributeExists delightSurfaceColor $shape[0]`)
{
addAttr -ln "mtoa_constant_Color" -at double3 $shape[0];
addAttr -ln "mtoa_constant_ColorR" -at double -p "mtoa_constant_Color" $shape[0];
addAttr -ln "mtoa_constant_ColorG" -at double -p "mtoa_constant_Color" $shape[0];
addAttr -ln "mtoa_constant_ColorB" -at double -p "mtoa_constant_Color" $shape[0];
setAttr -e -keyable true ($shape[0] + ".mtoa_constant_Color");
setAttr -e -keyable true ($shape[0] + ".mtoa_constant_ColorR");
setAttr -e -keyable true ($shape[0] + ".mtoa_constant_ColorG");
setAttr -e -keyable true ($shape[0] + ".mtoa_constant_ColorB");
}
}
这些脚本的做用是,给所有的小球添加mtoa_constant_Color 属性。
第三步:运行下面的脚本:
shadingNode -asTexture -n "ColorRamp" ramp;
创建一个叫做ColorRamp的ramp,这样创建出来的ramp是没有连接place2dTexture节点的,如果手动创建要记得打断与place2dTexture的连接。
第四步:选中所有的小球,运行下面的脚本:
string $sel[] = `ls -sl`;
for($current in $sel)
{
select -r $current ;
pickWalk -d down;
string $shape []= `ls -sl`;
if(!`attributeExists delightSurfaceColor $shape[0]`)
{
expression -s "float $vCoord = rand(0,1);\nsetAttr \"ColorRamp.uvCoord.vCoord\" ($vCoord);\nvector $color = `getAttr ColorRamp.outColor`;\nmtoa_constant_ColorR = $color.r;\nmtoa_constant_ColorG = $color.g;\nmtoa_constant_ColorB = $color.b;" -o $shape[0] -ae 1 -uc all ;
}
}
这个脚本的作用是给所有小球的 mtoa_constant_Color属性上添加一个表达式来随机读取ramp上的颜色。
第五步:运行下面的脚本,创建一个aiUserDataColor ,设置color attr Name属性为 Color;
string $aidataColor = `shadingNode -asTexture aiUserDataColor`;
setAttr -type "string" ($aidataColor+".colorAttrName") "Color";
第六步:把aiUserDataColor 连接到aiStandard1的color属性上,赋给物体。渲染结果为:
第七步:改变ramp的颜色,
改变时间线上的当前帧(因为maya的表边式赋值是基于时间的),再次渲染为:
第八步:通过改变ramp的颜色取值,可以得到自己想要的随机颜色。
除了直接把aiUserDataColor连接到color上我们也可以把他连接到高光或者其它的颜色属性上,也可以把得到这个随机颜色通乘除节点或者加减节点和贴图连接到一起来改贴图的颜色。
以上就是本期瑞云学堂的讲授内容,讲述了如何在maya场景中控制物体的随机颜色的方法,希望感兴趣的朋友赶紧打开maya软件按照我们的例子一步一步操作一下,相信你会学到很多知识,请关注我们的微信公众号吧。下期瑞云小讲堂再见!