制作蝴蝶烟火视觉特效
今天由育碧的工程师Parag Ponkshe为我们介绍如何制作蝴蝶烟火的视觉特效。
Parag Ponkshe曾在电影和动画行业担任视觉特效美术师,参与制作的作品包括:《波斯王子:时之逃亡》、《爱心小熊肚皮碰碰对》、《南方公园:手机毁灭者》等。本文中的作品是他为Riot Creative Contest 2017而开发的作品。
作品构思
当拳头公司宣布Riot Creative Contest 2017举行的时候,我立即决定参加,这次大赛11月开始,我花费了长达2个月来思考项目的创意和内容。某天我正在观看《魔戒》时,电影中一个优美的蝴蝶烟火吸引了我。尽管这个画面在电影中只持续了很短的时间,但我立刻意识到,可以为这次大赛去创作什么了。
由于仅有1个月实践进行创作,我不想再浪费时间考虑创意或绘制概念草图,我决定直接使用这个概念。说起蝴蝶,我们通常会想到美丽、平和等特征,但这些不是它的必然特征,蝴蝶也可以变得很危险!
说明:Riot Creative Contest 2017为美国拳头公司举行的游戏创意大赛,参赛者针对特定项目创作动画、VFX、原画、角色、音效等,仅限制个人参赛。拳头公司的代表作品《英雄联盟》。
原型制作
在早期阶段,我仅用基础的纹理和Unity标准粒子着色器制作了一大片蝴蝶从烟火中飞出的效果。最初我仅想要它们飞出来即可,但之后觉得,要是它们还能飞回来并进行攻击该多好。
这个想法从概念来看很棒,但我不确定蝴蝶返回冲刺的特效该怎么做。这里的关键要素是外部作用力模块,我从未使用过这个模块去吸引和驱散蝴蝶。
我使用充能特效和发射体制作出了几个原型。
特效的主要组成图层
这个特效在早期十分简单,仅有少数几个发射器。随后渐渐地变得复杂起来,因为我加入了很多嵌套子发射器。
详细的发射器层级如下图所示。
制作粒子特效
首先,我制作了蝴蝶迸出锥体发射器的效果,在这个过程中使用了噪声模块,所以这些蝴蝶飞出来的动作十分自然。
为了让它们再返回攻击,我曾尝试使用‘force over time’(作用力时间),但那无法实现想要的效果,因为我想要所有的蝴蝶都飞回到一个特定点, 而不是飞向同一个指定的方向。
于是我在蝴蝶粒子系统中创建了一个子发射器,使蝴蝶在其父粒子消失后的相同位置再次生成。在这个子发射器中,我加入并启用了外部作用力模块,其作用力的值是负数,这样就能将粒子吸引到其中心点了。
在子发射器中,我启用了碰撞模块使其与球体进行碰撞,这样会在消失的地方生成带有Glow子发射器和Explosion_Sparks子发射器的贴花粒子系统。子发射器中又有子发射器听起来有点复杂难理解。
你可以查看以下截图来理解这句话,子发射器都被标了红色。
在蝴蝶冲刺效果中,我也使用了相同的方法。除了负外部作用力外,它们还有一些额外的速度属性,从而实现螺旋式的动作。当然它们还有噪声模块来保持动作的自然流畅。
所有的蝴蝶都用拖尾(Trail)粒子实现了逐渐消失的拖尾效果。此外蝴蝶渲染模式设为了拉伸广告牌(Stretched Billboard),这样蝴蝶会与其移动方向对齐,从顶部视图你可以看到它们的轨迹是平行的。
最后的烟雾则是一个很简单的发射器,上面带有噪声模块和拖尾粒子,渲染模式为空,这样就能只渲染拖尾粒子。
下图中查看烟雾的具体属性设置。
花瓣动画
最初我打算添加花的图片素材,但它的平面感太强了。另一个办法是通过建模制作花朵,然后用Unity给它做动画。最后从性能方面考虑,我决定只建模一个花瓣,然后使用粒子系统来制作动画效果。
注意看它的旋转动画:
同样的,花瓣也会从初始位置逐渐显现,所以我使用顶点颜色和Alpha值0来绘制花瓣,然后平滑修改这些数值实现所需效果。
粒子舞动
在创作粒子舞动效果时,我遇到了一些难题。
花瓣发射器的问题是,它们必须与多个花瓣在圆环发射器上均等对齐。我费了不少心思来解决这个问题,后来我偶然发现在Unity中就有这个功能。
形状(Shape)模块中的半径厚度(Radius thickness)属性会让粒子发射到圆环的边缘,但这样花瓣仍然没有均等分布。于是我将弧度的模式(Arc Mode)设为爆炸式扩散(Burst Spread),解决了这个问题。
查看下面图片中标志红色属性进行参考。
另一个问题是将爆炸贴花对齐到球体上的法线方向。为了解决这个问题,我反复修改了很多次设置属性。
通过给粒子添加极少量速度,并将其渲染对齐(Render Alignment)属性设为速度(Velocity)解决了这个问题。
粒子舞动特效的关键要素是外部作用力模块,这是一个非常有趣的模块。
此外增加自定义着色器以添加发光效果,也使效果更为出众。我还使用了Unity的Post-Processing Stack后期特效包,它能给你的场景带来令人惊叹的效果。
总的来说,粒子舞动是一个十分有趣的特效,制作这个效果的过程中我学到了很多东西,包括如何编写用于在指定时间触发特效的C#脚本。
小结
这便是Parag Ponkshe创作蝴蝶烟火特效的制作流程心得体会,这个特效还有很大改善空间。希望你学习到这篇文章后得以启发,在自己的作品中创作出精彩的视觉特效。
更多Unity技术文章尽在Unity官方中文论坛(UnityChina.cn)!
精品推荐
Unity at ChinaJoy
ChinaJoy | 精彩Made with Unity体验,让你“酷玩一夏”
Unity将于8月3-5日在W4馆的M301号展位欢迎大家的到来。今年我们邀请到了十多家出色的开发团队,带来了横跨VR/AR,主机,移动端和PC等多个平台的酷炫前卫的Made with Unity作品,期待大家届时光临Unity展位和我们一起引爆夏日游戏狂欢![了解详情]
实时优化,智造收益 - Unity Monetization开发者生态沙龙
8月3日,Unity将于举办为期半天的Unity Monetization开发者生态沙龙!本次活动将与大家共同探讨移动游戏开发与变现相关难点与痛点。[了解详情]
报名地址:
https://connect.unity.com/events/unityads
ChinaJoy|Unity Plus加强版限时特惠
8月1-10日, Unity开发者订阅Unity Plus加强版,将享受特价优惠! 原价2628元/年,现在价格仅需1890元/年。活动期限内购买Unity Plus加强版的用户,将获得好礼。[了解详情]
订阅地址:
https://store.unity.com/cn/configure-plan/unity-plus
点击“阅读原文”访问Unity官方中文论坛