首页 百科知识 粒子碰撞的高级应用

粒子碰撞的高级应用

时间:2022-10-16 百科知识 版权反馈
【摘要】:当创建了粒子碰撞事件以后,默认的,粒子的perparticle属性里面会增加一个event属性,里面放的是粒子碰撞的次数:没有碰撞的时候是0,碰撞了就自动开始计数1,2,3,…我们一口气为粒子添加了四个属性,分别是:scale_PP,rotate_PP,share_PP,index_PP。如果粒子碰撞发生在Nurbs曲面上,那么就会有另外两个属性发生:colitionU和colitionV,这两个属性记录了每一个粒子碰撞发生的时候所在的位置信息。

第二节 粒子碰撞的高级应用

当创建了粒子碰撞事件以后,默认的,粒子的perparticle属性里面会增加一个event属性,里面放的是粒子碰撞的次数:没有碰撞的时候是0,碰撞了就自动开始计数1,2,3,…

利用这个属性,我们就可以制作与碰撞有关的特效,例如:天空落下颗粒,落在地上就长出一棵树来:

img235

方法非常简单,基本原理就是:粒子碰撞和粒子替换。

读者可以打开文件clition_tree.mb,里面是24个模型,分别是一棵树的生长的过程,每一帧一个模型:

img236

然后:制作两个平面,一个作为地面,另一个作为天空发射粒子,向下落,24个模型就作为粒子的替换物。在这里请注意:

1.先将24个模型隐藏起来,替换的时候要按照顺序选择;

2.天空发射的粒子不要有速度,使用重力让粒子下落,会有加速的感觉;

3.创建粒子碰撞事件,将粒子事件中的发射量设为0;

4.创建粒子替换的时候,不要使用循环(我们自己控制)。

首先,创建两个面,一个作为地面,一个作为天空,选择天空发射粒子:

img237

使用菜单命令Particles→EmitfromObject:

img238

将粒子发射器的发射Rate设置少一点,使用面发射器,因为我们希望是在一个面上平均的发射粒子;

将粒子发射器的速度设置为0,这样粒子在发射的时候是附着在面上的,然后使用重力使粒子向下作加速运动,就非常符合自然规律,还可以添加动乱场,使得更真实。

为粒子添加重力场(Gravity)和动乱场(Turblance)以产生真实的效果:

img239

粒子下落了:

img240

接下来,就是创建碰撞了,选择粒子和地面使用MakeColide使粒子碰撞地面:

img241

将摩擦力设置到最大,反弹力设置为0,这样粒子就会落地既停。接下来为粒子添加碰撞事件,在这里你可以选择不发射粒子,也可以发射,主要是创建碰撞事件(这样我们就可以获得event事件属性):

选择粒子,使用菜单命令ParticleColitionEvent …来创建粒子碰撞事件:

创建粒子碰撞事件:

img242

在这里,我们选择不发射粒子,这样简单一点,只是产生了一个event。

请不要选择Original Particle Dies,因为我们将要使粒子在碰撞以后逐渐长成一个大树,所以不要应该在碰撞后消失。

接下来为粒子制作替换物:

请按顺序选择24个模型,然后使用菜单命令:Particles→Instancer创建粒子替换物,进入属性面板如下设置:

img243

在这里不要使用循环,否则从一开始就会循环了。

我们希望粒子在没有碰撞的时候,使用第一个模型作为替代物,发生碰撞以后就依次替换,最后是第24个模型,变成一颗长成的树。

img244

当然了,长成的树木必须有大有小,有歪有正,这才真实,然后才是逐渐长大,最后长成。

Instance属性栏在粒子的particleshape属性面板里面。

为此,我们将通过控制替代物的:scale、share、和rotation来分别产生随机高低,随机形状,和随机歪斜的效果。

对于树木从小长大的过程,我们就通过objectIndex来控制,给他一个值:当没有碰撞的时候。

为此我们就需要这些值得属性来选择,可是现在没有这些属性,所以我们就为粒子添加这些属性。

在PerParticle Attribute属性面板里面添加每粒子属性,点击General然后在New里面自己添加新的属性。

img245

1.创建Scale_PP控制每一替换物的大小:

img246

2.创建Rotate_PP粒子属性控制每一个替换物的旋转:

img247

3.创建share_PP粒子属性控制每一个替换物的裁切:

img248

4.创建index_PP粒子属性控制每一个替换物的循环速度:

img249

我们一口气为粒子添加了四个属性,分别是:scale_PP(控制每个替换物的缩放),rotate_PP(控制每个替换物的旋转),share_PP(控制每个替换物的裁切),index_PP(控制每个替换物的索引值)。

img250

接下来,就是要为这些粒子属性添加表达式达到我们的想法;当然,在此之前,我们可以先把这些属性和粒子替代物的控制属性连接起来,这样会更容易理解:

img251

进入InstancerNodes属性栏目(在Particleshape属性面板里面,)

首先要选择AllowAllDataTypes这样才可以将自己创建的粒子属性应用到替代物的控制属性上面。

分别将自己创建的粒子属性连接到相应的替代物属性上面,剩下的工作就是为这些粒子属性写表达式了。

我们希望替换物的缩放在空间里是随机的,所以为scale_PP属性创建Creation Expression:

img252

希望替换物的旋转是沿着Y轴360度随机的,在其他轴向上略微歪斜所以为rotate_PP属性创建Creation Expression:

img253

希望替换物的裁切是空间随机的rotate_PP所以为share_PP属性创建Creation Expression:

img254

最后是粒子的索引控制了,在碰撞之前是0,碰撞发生了就每一帧增加1:

我们可以在表达式编辑器里找到event这个属性:

img255

利用这个属性我们很容易得到我们想要的效果:

img256

索引值的表达式应该放在RunTimeExpression里面,因为每一帧都要执行一次,这样碰撞了以后才可以每一帧都增加1。

以下是CreationExpression:

img257

以下是RunTimeExpression:

img258

最终效果:

img259

如果粒子碰撞发生在Nurbs曲面上,那么就会有另外两个属性发生:colitionU和colitionV,这两个属性记录了每一个粒子碰撞发生的时候所在的位置信息。

利用这两个属性,我们就可以制作材质上的动画,在这里就不再介绍了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈