Maya硬件渲染粒子与软件渲染元素结合(2)

4/5/2006来源:Maya教程人气:8592

Maya硬件渲染粒子与软件渲染元素结合
II、粒子发射

  重新设置framerange为1-100

  当一辆汽车踢起灰尘的时候,从轮胎下半部分会发出像一团云样的东西。刻化这个发射形状的简单方法就是用一个体积发射器。

  打开wheelsOnPath.ma文件.

  在这个场景里,沿着凹凸表面的一条运动路径有一个简单的汽车装备。车轮通过一个closestPiontOnSurface约束粘附在地面。

  现在从轮胎发射粒子。

1、创建一个发射器

2、设置EmitterType为Volume

3、设置Volumeshape为sphere

  尘埃没有特定的运动方向,其运动源自汽车周围的空气运动,因此,你不用在体积形状基础上给与尘埃任何速度。

1、设置AwayFromCenter为0

2、设置AwayFromAxis为0

3、设置AlongAxis为0

4、设置AroundAxis为0

  但是,尘埃的运动基于汽车运动的基础上,所以,汽车踢起的尘埃要稍微随着汽车的向前运动而向前运动。

1、打开outliner

2、选择Fitire和你刚才创建的发射器:Emitter1

3、点约束和方向约束发射器到轮胎

4、缩放发射器,大概有轮胎的1/3高,长于和宽于轮胎大约1/4。

5、调整发射器的VolumeOffsetZ属性,重新定位发射器,低于轮胎1/3。

  回放时,你会看见左前轮胎后面有粒子轨迹。

1、复制Emitter1三次

2、删除复制品潜在的点约束和方向约束节点

3、点约束、方向约束每个发射器到每个轮胎,这样,每个轮胎都有了一个发射器。

4、重新命名这些发射器为:IEmitter,frEmitter,blEmitter,brEmitter

5、用动力学关系编辑器,连接粒子物体到每个发射器。

  回放,你会看见所有轮胎左后方都留下了一道粒子轨迹。

  当一辆汽车奔跑在一条满是灰尘的溪谷时,它会碰到各种各样的凹凸地,水沟,岩石和沙地,每次碰撞的结果就是:汽车不仅改变一点点方向,而且汽车踢起的尘土和碎片数量都会不同,利用noise和rand功能,你可以很容易地模拟这种随意的变化。

1、选择flEmitter

2、在通道盒里,右键点击任何属性并选择ExPRessions……

3、在ExpressionEditor中键入:

float$rate=100.0

float$rateRand=0.5

flEmitter.rate=$rate $rateRand*$rate*noise(frame)

  这个表达式运用了noise功能,可以依据不同的帧在-1到1之间取一个值。这个值将与rate的百分数相乘再相加。

FlEmitter发射器的rate的最终结果是围绕着$rate大概成平均状,但是,这个参数可以低到0.5,也可以高到1.5,主要看noise值的回馈。

  不是随便用一个数字发生器就可以得到声音功能的值,将声音功能视为一个预定的曲线,可以无限延伸,这个曲线在它的值里有各种各样的声音,但声音平滑插入,声音功能回到什么样的值依赖于你在曲线哪里取样。如果你给声音功能取10的值:

print(noise(10));

  …cg/image/回到-0.465903的值

  如果你给声音功能取10.01的值:

print(noise(10.01));

  …cg/image/回到-0.474992的值

  参数表达式里:

flEmitter.rate=$rate $rateRand*$rate*noise(frame)

  …我们用“帧”作为声音输入,所以,每个帧的声音功能回到一个新的值。

  既然帧以每帧的整数增加,来自声音功能的结果可能变化很大。如果你想从声音功能那里获得一个更加平滑的数字流,那就用“time”来代替“frame”。

  一样的输入值,声音功能返回的值也一样,所以,每个发射器需要用不同的输入值。

  在表达式编辑器里,增加:

frEmitter.rate=$rate $rateRand*$rate*noise(frame 100)

blEmitter.rate=$rate $rateRand*$rate*noise(frame 200)

brEmitter.rate=$rate $rateRand*$rate*noise(frame 300)

  现在每个rates参数都是从声音曲线不同部分取样,回放时候,你会看见粒子的轨迹有点更加随意稀少了。

参数rates任何明显的提高都表示模拟轮胎碰到了凹凸块或者是岩石。发生碰撞的时候,粒子方向突然随意改变,就好像刚刚发生了一场小的爆炸。

  因为声音功能对同样的输入总是返回到同样的值,所以,我们检查rates参数的一个突然变化并添加一些随意性到发射速度上。

  在表达式编辑器里,添加:

float$flChange=noise(frame)-noise(frame-1);

float$flChange=noise(frame)-noise(frame-1);

float$frChange=noise(frame 100)-noise(frame 100-1);

float$blChange=noise(frame 200)-noise(frame 200-1);

float$flChange=noise(frame 300)-noise(frame 300-1);

float$randomSpeed=100;

flEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5,$flChange);

frEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5,$frChange);

blEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5,$blChange);

brEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5,$brChange)

  回放时,你会看在尘土轨迹甚至有更大的随意性,一些粒子飘浮空中,其他一些粒子保持静止状态。