Maya的动力学
系统和表达式是非常强大的,现在我们就来利用Maya的粒子系统和表达式来
制作随机变化下落的字母
效果。
首先,打开Text Curves选项,将Text的类型设置为Poly,
输入全部26个
英文字母,从“a”到“z”,单击“Create”。

图1
打开Outline窗口,在这里能够找到Maya
自动创建的两个组:一个包含所有字母的曲线,另一个包含26个网格物体。删除包含有所有字母曲线的组,因为我们只需要包含全部多边形字母的组。
现在我们需要编写一个Script来
重命名所有的多边形字母,这是为了其后能够更容易的重命名这些字母,当然也可以手动为它们重命名。
int $i;
string $t="abcdefghijklmnopqrstuvwxyz";
string $cmd="rename Trim_Char_";
for($i=1;$i<=26;$i++)
{string $temp;
$temp=eval("substring "+$t+" "+$i+" "+$i);
print($temp);
eval($cmd+$temp+"_1_1 "+"text"+$i);
};
在Script Editor中输入上面的Script并运行,此时Outline窗口应该如下图所示。

图2
选择所有的多边形字母和中心枢轴点,移动到abs(0,0,0),然后自由变换,之后将其全部隐藏。
创建一个10*20 Nurbs平面;选择这个平面并加载一个粒子发射器(Particle Emitter),将发射器的类型设置为Surface;将这个平面围绕Z轴旋转180度;将发射器的的速度设置到15左右,发射率设为0.2。
现在我们将为粒子形态(particleShape)节点添加一个属性(Attribute)。
选择particleShape1节点,打开属性编辑器(Ettribute Editor),单击“General”下的“Add Dynamic Attributes”部分,添加一个名为“index”的属性并设置其类型为 “Array”。

图3
接下来在Outline窗口中选择所有的多边形字母(不要选择这个组),创建粒子替代物(Particle Instancer)。在Option窗口中钩选“Allow All Data Types”,在“Particle Object To Instance”选项中选择particleShape1。

图4
现在将会看到场景中每个粒子都变成了字母“a”。我们将加载一个表达式来实现用随机变化的字母来替代每个粒子。
选择particleShape1并且打开表达式编辑器(Expression Editor)。添加一个执行时间表达式(Runtime Expression)。
index=rand(1,26);
播放动画,将会发现每个粒子在每一帧都被随机变化的字母所替代。现在已经非常接近我们想要的效果了,但还需要编写一些表达式来控制每个粒子的运动。
选择particleshape1并且添加另一个数组属性(Array Attribute)为“Gate”。无需其他设置,加载执行时间表达式(Runtime Expression)到particleshape1节点下。
particleShape1.index=rand(1,26);
vector $temp=particleShape1.worldVelocity;
if ($temp.y<=rand(-10,-5))
{ particleShape1.gate=1;};
if ($temp.y>=(-1))
{particleShape1.gate=0;};
if (particleShape1.gate==1){ particleShape1.acceleration=<<0,rand(20,25),0>>;
//print("aaaa");
};
if (particleShape1.gate==0) {
particleShape1.acceleration=<<0,rand(-25,-20),0>>;
//print("bbbb");
};
最后,调整摄象机并进行渲染。渲染完成后可以用Maya Fusion或其它软件来加载一些运动模糊/拖尾效果。下面是最终的效果。

图5