在星际争霸2中使用实体粒子实现地毯式轰炸效果

阿凡达2018-07-04 12:55

大家好,今天想和大家分享一个在工作中遭遇的粒子特效方面的实例,我们先看一下最终效果:

                                                                 

可以看到,下落的炸弹在触碰地面的时候爆炸,看起来就像是大型轰炸机那种地毯式轰炸的效果。(请大家不要在意动画中方形的阴影,这是星际阴影效果预览方面的一个小问题。)
首先我们需要创建一个炸弹的模型:
                                                         
为了节约资源,模型被做得相当简单,面数小于50。
当需要创建大量的炸弹,并且在重力作用下落向地面的时候,我们第一想到的就是使用粒子工具来创建,在星际争霸2中也不例外,官方的Art tool提供了引用模型作为粒子外形的功能。
首先在30~140帧创建一个动作Stand,SC2的系统会自动将模型在3dsmax创建的第一个动作作为这个模型的默认动作,当我们使用粒子工具来引用某个模型作为粒子外形时,粒子会在生命周期内持续播放这个默认动作。
我们为炸弹增加一个简单的旋转动画来模拟低速旋转时的进动效果:
                                  

                                                
我们知道旋转物体为了保持角动量守恒,在运动中会因为各种原因产生进动(Precession)和章动(Nutation),为一个寿命很短的粒子专门做复杂的章动效果有点得不偿失,所以笔者就只加入了简单的进动效果。
我们为炸弹设置Group,在星际争霸2中粒子可以引用Group作为其几何外形。
                                                        
因为第一个动作被用来记录粒子实体的动画,所以我们需要额外创建一组新动作来保存粒子发射器的各项参数。
                                  
创建一个粒子发射器,作为炸弹的发射源,选择该Group作为其几何外观:
我们设置好该粒子的飞行方向和重力值,确保其正确坠落到地面上。
                                                                                     
熟悉Unity3D的朋友会发现粒子发射器的参数设置和Unity3D非常相似,实际上星际争霸2的动力学系统与Unity3D十分接近,参数几乎可以直接移植,唯一的不同是星际争霸2引擎的运算能力大概比Unity3D高十倍左右,暴雪老司机Brett Wood实力出神入化。
在Stand Work Start动作下我们设置炸弹的发射源发射率从0增加到10,表示将每秒投下10枚炸弹。
                              
我们创建一个新的粒子作为炸弹的爆炸效果:
                                                     
这个效果非常简单,包含了四个粒子(爆炸,火花,冲击波和地面弹痕)和一个光照。这里没有选择泼溅图作为地面弹坑效果的原因是为了节约资源,虽然星际争霸2可以承担大量泼溅图的渲染效果,但是暴雪官方美术师曾经在一次交流会议上建议减少泼溅图的使用,此处使用一个一次性粒子来表现实际效果也可以接受。
为了让爆炸的大小和位置更加不确定,我们如法炮制,选择不直接使用这个粒子效果,而是将其作为另一个粒子的几何外形。
                         
我们创建一个圆柱形的粒子发射器,粒子大小在100~230范围内,我们引用前一个爆炸粒子作为其几何外形,可以预测其结果就是会在一个圆形范围内,持续发生爆炸效果,每次的爆炸规模在100~230之间随机。
                        
这里我们没有详细设置其粒子发射率,因为其发射率接下来将被另一个粒子的参数接管。
接下来我们选择第一个炸弹粒子,将我们专门制作的随机爆炸效果添加到碰撞参数下
                                                                               
我们设定,粒子将与地面以及(带有相应物理外形的)物体碰撞,碰撞不会发生反弹(Bounce=0%)和移动(Friction值极大),粒子将被消灭并触发生成一个新粒子,新粒子共随机发射1~3个。
结合前面的一系列设置,我们可以如此描述炸弹发射器粒子的行为:
“以每秒10枚的速度,保持进动并在重力作用下下落,当与地面或物体碰撞时原地死亡并触发一个随机效果,随机范围为圆形,效果为100~230大小的爆炸,共执行1~3次。 量子力学的海森堡不等式(或小泽不等式)的规律——当粒子运动速度越快其编程效果就越不精确,二者的度量某
星际争霸2的动力学系统也忠实的执行了该效果:
                          
另外由于我们对粒子的诸多行为进行了设置,粒子发射器不论在什么高度,粒子以什么角度与地面(或物体)相撞,这个爆炸效果都能被正确创建,我们最后将粒子发射器绑定到一个飞行载具上,并控制其飞行,就得到了开头的效果:
                                                            
这个教程就到这儿,希望大家能和我们一样热爱和使用星际争霸2的地图编辑器以及官方art tool,为玩家提供各种原创作品。谢谢大家!

本文来自网易实践者社区,经作者李阳授权发布。