Maya的粒子替换功能和高级的MEL命令colorAtPoint(2)
选择新创建的盒子,选择Particles->Instancer(replacement)(粒子->粒子替换)后面的小方块,打开粒子替换选项盒,使用默认设置,点击Create,创建粒子替换。(图10)
图10
选择小方盒子pCube1,按Ctrl+H将其隐藏。接下来是创建一个2D贴图,可以是程序纹理,也可以是文件纹理,然后用MEL命令读取贴图的亮度,最后用这个亮度值控制粒子替换的缩放。选择Windows->Rendering Editors->Hypershade(窗口->渲染编辑窗口->超级滤光器窗口)。(图11)
图11
创建一个noise程序纹理,设置noise1的Depth Max(最大深度)为1,Frequence(频率)为5,Noise Type(扰乱的类型)为Perlin Noise。(图12)
图12
选择粒子,打开粒子属性编辑窗口,在添加动态属性卷展栏(Add Dynamic Attributes)里,点击General按钮,打开添加粒子动态属性窗口,在New粒子标签添加新属性,名字:scl,数据类型:Vector,属性类型:Perparticle(array)。(图13)
图13
点击OK添加新属性scl,在新属性右边的方框里点击右键,在弹出菜单中选择Runtime After Dynamics,打开运行时动力场之后表达式编辑窗口,编写表达式:
float $u=goalU;
float $v=goalV;
float $c[]=`colorAtPoint -o A -u $u -v $v noise1`;
scl=<<1,1,(1+($c[0])*5)>>;(图14)
图14
应用新属性scl作为粒子替换的缩放控制属性,在粒子的属性编辑器里,找到Instancer(GeometryReplacement)粒子替换卷展栏,在Scale的控制选项里选择自定义的属性scl。(图15)
图15
这时的被表达式读取的贴图还只是个单帧图片,并不是贴图序列,所以还没动画效果。(图16)
图16
可以给noise1程序纹理的time属性写一个表达式,使其有动画效果,使粒子替换产生波浪般起伏效果。在Hypershade的textures贴图标签里,选择noise1节点,在noise1的属性编辑器里找到Time属性,右键打开表达式编辑窗口,为其写表达式:
noise1.time=time*0.5;(图17)
图17
这时播放,会看到动画效果。也可以使用贴图序列来控制粒子替换的缩放。笔者这里准备了一个贴图序列,现在就把这个贴图序列读取到Maya中。在Hypershade里,创建一个文件纹理。(图18)
图18