特效创作中随机性的引入

本文想和大家一起探讨如何在特效创作中引入随机性事件,抛砖引玉,希望能给大家一些启发。

星际争霸2特效创作中随机性的引入

  我们首先来看一下最终结果:

这个特效模型在3dsmax中是这样的(基于Blizzard Art tool for Starcraft II 3dsmax 2011)

下面我们将在个步骤内实现上图中的效果:
1)首先制作一个最简单的爆炸效果:
这个效果非常简单,就不再赘述了,实际制作的时候我选用了一张8x8的爆炸序列帧贴图和一个单次发射的粒子。
2)将这个爆炸效果添加细节:


这样一个爆炸效果也很简单,只是在前者基础上将爆炸粒子的发射数量和角度进行了调整,添加了一个简单的置换材质(冲击波效果)和一个光源(爆炸闪光效果)。需要说明的是为了下一步操作该特效被特意简化了细节,并限制光源远点剪切(Attn End)以避免光源范围太大。
  这是我们引入的第一层随机性,爆炸的粒子由好几个步骤1中的单次效果叠加而成,在这个叠加过程中,粒子的速度、角度、寿命都具有一定的随机性,这样得到的效果能够呈现更为真实的特效,同时也能保证每次爆炸时效果不是简单重复。
3)随机性的复制这个爆炸效果:
  这就相当于在图中爆炸范围内,有许多个大小略有差异的油桶,中部的油桶爆炸后逐渐引爆外围的油桶,最终形成巨大的爆炸。我们要告诉引擎如何摆放油桶,设置爆炸时间。
用数学语言来描述这个目标就是:
1)以爆心O为原形,将特效A随机分布到地面以上的半球形空间内,越靠近圆心几率越大;
2)在延迟一小段时间后,播放特效A,并随机的将特效A的持续时间做一定比例缩放(比如0.8~1.2,这样可以使得每个爆炸不会同时开始和同时结束),越靠近圆心延迟越短。
实现起来也非常简单,我们可以额外创建一个粒子发射器B,B以圆心O为中心,向周围径向发射粒子,粒子在阻尼下逐渐减速并停止,从而分布在周围。

同时我们可以设置粒子的寿命和大小,从而使得每个B粒子获得随机性。
然后我们使用实例粒子,将上图中的粒子替换为第二步中做好的特效A,就得到了下图效果:

最后增加一些简单细节:

就得到了最终效果。


PS:如何“惹恼”一群程序员

  我的搭档经常说,游戏制作中的美术和程序是死对头。如果把游戏世界当做一个具有自己运行法则和物理规律的“真实”世界的话,那么美术和程序对这个世界的理解无疑是具有很大区别的。程序员所理解的世界具有确定性和现实性——比如物体的碰撞,比如一团燃烧的火焰会对玩家造成伤害。美术师的工作则有点隔岸管火——美术师可以做出非常华丽特效效果,但是这些效果在程序员调用以前是无法对游戏世界产生影响的。
  总结来说,程序员是在架构世界,而美术师是在描述世界。前者需要用数学来精确表达世界的运行规律,后者只需要用经验来大致描述就可以了——当经验描述开始和数学定律产生足够偏差的时候,程序员就被惹恼了。
  比如说,角色A投掷了一枚手雷,对一个圆形范围造成伤害。通常美术会选择合适的粒子工具来制作爆炸、飞溅的火花和烟尘等等,然而爆炸并不总是圆形的,也并不一定能正好填充实际伤害范围(当然这并不总是有必要的,但是强迫症浑身难受啊)。于是就产生了偏差,而偏差的来源就是许多程序员深恶痛绝的——随机性。

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