Maya硬件渲染粒子与软件渲染元素结合(5)
2006-04-05 19:40:59 来源:WEB开发网V.创建尘土粒子外观
SPRites-调整spriteScale和Twist
效果开始合成一起,但是还有改进的余地。当创建一个sprite基础上的效果的时候,sprites顶部每个分层都赋予它最终效果。利用不同的缩放值和扭曲值并在此基础上动画,可添加角色到模拟。
为粒子物体添加以下的动力学属性,方法和你添加spritNumPP属性一样:
spriteScaleXPP
spriteScaleYPP
spriteTwistPP
在AddAttibute窗口New栏目里,保留Float,PerParticle属性添加以下属性:
randXPP
randYPP
randTwistPP
spriteTwistMultPP
spriteScaleMultPP
给spriteTwistMultPP和spriteScaleMultPP贴上凹凸贴图,重新命名这些贴图,名字要能正确反映他们要连接的属性,可以命名为spriteTwistramp,spriteScaleRamp等等。反过来,于spriteTwistMultPP有联系的rump贴图,底端设为black,顶端设为white。
打开粒子物体需要的creationExpression并键入:
//generaterandomnumbersforXandX
//
float$randx=rand(0.3,1.3)
float$randy=rand(0.8,1.2)
//storearandomnumberforXandY
//
//
randXPP=$randx
randYPP=$randY
//setspriteScaleXPPandSpriteYPP
//
spriteScaleXPP=0
spriteScaleYPP=0
//setrandTwistPP
//
randTwistPP=rand(-180,180)
每个粒子X,Y,Twist的数值都是任意指派的,这些值会赋予每个粒子独特的特征,并会被用在RuntimeExpression里。既然我们用rand功能生成值并且边缘功能返回结果总是不一样,那么,我们就在单粒子属性里保存这些值,以便以后使用。
用rump给spriteTwistMultPP和spriteScaleMultPP贴图,也可将它们作为增效器,并给我们一个插值,但是,能否给我们一个interpolation,那就要看粒子的年龄如何。可以用常规表达式控制扭曲和放缩值,但是在控制基于时间的属性改变上,增加一个由rump控制的乘数,会给我们更大的控制灵活性。
为什么用0值初始化spriteScaleYPP和spriteScaleYPP?因为cg/image/的一个bug,rump在Creation上没有正确估算,产生了不可预料的结果。
打开粒子物体需要的RuntimeExpression并键入:
//setspriteScaleXPPandspriteScaleYPP
//
spriteScaleXPP=spriteScalex*spriteScaleMultPP*randXPP;
spriteScaleYPP=spriteXcaleY*spriteScaleMultPP*randYPP*randXPP
为sprite渲染类型创建默认属性时,cg/image/添加了一个spriteScaleX,spriteScaleY和spriteTwist属性。如果没有这些属性的单粒子版本,比如spriteScaleXPP,cg/image/就会用scalar属性代替,例如spriteScale。既然有了这些属性的单粒子版本,缩放版本就被忽略了。我不忽略它们,在全局增效器中,我习惯用他们作为表达式的一部分。用一个你众所周知的属性名字,这个名字不仅用在保存创建一个新属性阶段(作为增效器),也展示给使用者一个属性——具有相似的方式相似的功能。在通道盒里改变spriteScaleX或spriteScaleY,这会改变粒子总值。
在下面一行中:
spriteScaleXPP=spriteScaleY*spriteScaleMultPP*randYPP*randXPP;
spriteScaleYPP和spriteScaleXPP的值大体相当,回到creationexpression,randYPP,随意初始化一个值——0.8至1.2之间,这会导致sprite在x轴成矩形的—— /-20。
添加下面几行到runtimeExpression:
//spriteTwistPP
//
spriteTwistPP =spriteTwistMultPP*sign(spriteTwistPP)*spriteTwist;
如果值是正的,用sign功能返回1;如果值是负的,用sign功能返回-1。spriteTwist属性是用用默认Sprite属性创建的,在这种情况下,我们添加它的值到当前sprite的twist上,引起sprite每帧旋转。利用spriteTwistMultPP,你可以改变每个spritetwist的速率,sprite越大,自转越慢。
此时,你可以开始回放场景,交互式地调整被当作spriteTwist,spriteScaleX和spriteSclaeY属性创建的rmaps值。该阶段有很大的扭曲空间,要得到sprites正确的缩放和扭曲值需要花点时间,但是,利用ramp贴图,就可以创建一些非常有趣的效果。
打开尘土粒子属性编辑器,在AddDynamicAttribute栏点击Opacity按钮。
1、为透明度创建PerObject和PerParticle属性
2、点击color按钮,为色彩添加PerParticle属性
3、点击General按钮,作为Float,PerParticle添加属性:
intensityPP
opacityOrgPP
opacityMultPP
4、用ramp贴图为opacityMulPP贴图,正确重新命名。
5、在creation表达式中键入
//opacityPP
//
opacityOrgPP=rand(0.1,0.4)
opacityPP=0
用相对较低的值初始化透明度,该值保存在opacityOrgPP里,Runtime表达式要用到它。
既然spriteScaleXPP和spriteScaleYPP属性已经设置0,当sprite缩放到0并无法看见时,就没有必要初始化opacityPP一个值。
更多精彩
赞助商链接