嗨,我是Scott Kennedy,《堡垒之夜》开发团队的首席特效美术。在Epic,我们喜欢在内部试用自家的工具,对于Niagara,我们就使用了《堡垒之夜》作为试验场。有些人可能还不熟悉Niagara,它是新推出的抢先体验版粒子工具,我们正在积极开发它,以便取代已经老旧的级联粒子编辑器。虽然我们现在还不会建议开发人员改用Niagara进行开发,但是我们正在努力使它成为远比级联更灵活自由的、数据驱动的工具集。
因为《堡垒之夜》第2章的重点是水,我们增添了一种遍历地图的全新方式,并对地形的视觉效果进行了更改。考虑到这些目标,我们决定推出一种全新的水系统。在开始构建这种新技术时,我们看到了使用Niagara的完美机会。让我们的工具接受数百万玩家的考验,在从手机到高端PC的各种设备上运行,我们想不出还有什么更好的办法能用来改进这个工具。这篇博文讨论的就是我们通过将Niagara集成到现有管道而获得的经验。我希望我们的团队经历的一些考验和磨难能够作为指导,给希望使用这种新型粒子工具的其他开发人员提供一个很好的起点。
我们获得的经验
Niagara有许多在级联中不可能实现的功能,例如发射器继承(稍后会细讲)和可编程工作流程,不过俗话说得好,“能力越大责任也越大”。很显然,要获得通畅的Niagara管道,良好的组织是至关重要的。Niagara生成的资源比级联多得多,因此在我看来,合适的命名约定、文件结构和工作指导方针都是必不可少的。下面是我们使用的命名约定的示例:Niagara系统:NS_SystemExample
Niagara发射器:FN_EmitterExample
Niagara模块:FN_ModuleExample
Niagara动态输入:FN_DynamicInputExample
你们可能觉得奇怪,为什么我们给多种资源类型加上了FN_前缀。这样可以帮助我们的美术,让他们在工具中搜索时知道哪些是《堡垒之夜》认可的资源。查看资源列表时,这更容易让他们一目了然。因为在很多时候是从工具中的菜单添加这些资源,而不是从内容浏览器拖动,所以我们不必添加多余的前缀来区分,比如区分发射器和模块。
我们实施的另一个程序是让一个把关者来生成新的发射器和模块。以我们团队为例,Andrew Melnychuk是我们的特效技术美术,他专门负责在模块创建和高度复杂的数学问题上为特效团队提供支持。他也是《堡垒之夜》团队总的Niagara协导员。因为规定了团队里只有一个人能创建新的发射器或指导其他美术构建自己的新发射器,所以理论上讲,我们能够防止资源数量过度膨胀,减少多种发射器和模块的重复工作。这也为一些人提供了余地来试验和构建基础发射器,以支持我们在各种时候为《堡垒之夜》创建的各种特效(类似主材质)。通过设立这个专门的角色,也大大减少了我们在创建新功能时对工程师的依赖。
Niagara支持多种形式的继承。其中一种形式就是生成发射器的子项,这很像蓝图或材质。这是一种了不起的功能,在开发第2章时为我们省去了一些痛苦的重构工作和时间。假设你需要为所有的武器效果创建一种新的按距离调整的模块。你可以把它添加到父项,然后所有子项就会立刻获得它。Niagara具有不可思议的灵活性,现在美工们可以创建供团队其他人共享的默认发射器。在我们研究如何设置发射器结构时,出现了两派思路。一:只构建几种宽泛的通用发射器,让特效团队以这少数的几种发射器作为起点,这和在级联中的做法非常相似。二:构建非常特定的发射器,支持游戏中的特定资源类型,例如gun_sparks和gun_smoke。使用宽泛而通用的做法可以防止资源数量过度膨胀,但理论上这需要美术师在每次构建新效果时都从头构建。相反,使用第二种思路创建非常特定的发射器可以让美术师快速添加非常特定的、在美术指导下的发射器,但这会产生大量文件,可能会减少创新,并减少继承的优点。我们的团队采用了混合式解决方案。例如,武器特效使用非常有针对性的、专门用于构建武器特效的发射器集,使我们能快速构建新枪,还有一个用于构建跳伞轨迹的发射器集,不仅改变了我们的工作流程,也提高了我们的工作速度。我们还有一组通用发射器,它们渲染特定的FN_Mesh、FN_Sprite和FN_Ribbon。这些通用发射器允许你在添加新发射器时按照与使用级联时非常相似的方式工作。随着我们继续使用Niagara,我确信我们将会找到更多机会,创建更好的父发射器。
效果良好的方面和我们的成功
游泳!我们在《堡垒之夜》中引入了一种全新的移动机制,支持该系统的所有特效都是在Niagara中构建的。这是一个巨大的成功!按照《堡垒之夜》的开发节奏,走稳妥的路子也许是显而易见的选择,特别是对于全新的功能和全新的技术,但我们并没有这样选择。我们勇猛地启动了这个计划,而且从一开始就决定使用Niagara,绝不回头使用级联。这在最初带来了挑战,因为这种工具还处于积极开发中,几次耽误了我们的工作进度。在Niagara中制作游泳功能暴露了它的各种缺陷和功能缺失,这也帮助改进了这种工具,使它能早日结束抢先体验。使用《堡垒之夜》作为强制检验标准使这种工具受益匪浅,也使我们制作特效时获得了比使用级联更多的选择。例如,我们新的水着色器功能大大加强,因为Niagara把动态参数的限制从4提高到了20。我们的另一个成功是《堡垒之夜》的新载具——摩托艇。既然我们是在Niagara中创建所有游泳的水视觉效果,我们自然就决定也使用Niagara构建摩托艇。载具是十分复杂的,有许多影响特效的变量,例如速度、血量和加速,除此之外摩托艇还必须能配合我们的水系统工作。Niagara是实现这个目标的完美工具。我们在导入数据后,不是只依靠游戏代码或者蓝图代码来控制生成行为之类的东西,而是能够在工具中进行更多操作。例如,我们为摩托艇构建了自定义发射器和模块,当摩托艇在水中时会读取角度和速度,只在接触水面的舷侧生成水花。如果使用级联,在没有蓝图或代码支持的情况下,是不可能实现这种生成行为的。
在《堡垒之夜》第2章中出彩的东西不是只有水而已。在启动第2章开发之前的几个月里,我们已经提前在《堡垒之夜》中开始试用Niagara。我们尝试的第一项工作就是将一条现有的跳伞轨迹从级联移植到Niagara。在第2章中,我们决定完全依靠Niagara创建第一条全新的跳伞轨迹,并尝试做一些只有用这种新型粒子工具才能做到的事。这里说明一下,从功能角度讲,《堡垒之夜》中的跳伞轨迹其实就是在游戏开始的空投阶段关联到玩家身上的级联系统。它们是在代码中生成的,特效团队不能访问蓝图来做级联不能现成提供的任何东西。有了Niagara,我们就做出了第一条会根据玩家的输入作出反应的跳伞轨迹,而这都是在新的视觉特效系统中实现的。我们做出的就是光谱跳伞轨迹。这套系统使用玩家速度和角度之类的数据和属性来改变颜色,更快地平移纹理,并驱动材质中的动态参数中的数值来展示阿尔法遮罩中的更多纹理。这是我们的第一个简单测试,从这时起,我们就只用Niagara制作未来的所有跳伞轨迹了。新的Niagara跳伞轨迹已经比我们过去做的任何特效都高出一筹。
在第2章的开发中,另一个非常顺利的方面就是有了新的系统视图,它和级联中的系统视图差不多。级联的长处之一就是有一个非常简单易懂的概览视图,能让你立刻了解粒子系统是如何构建的。这是一种所有使用虚幻引擎的特效美术都懂的通用语言,它方便了共享资源和大规模团队的协作。以前Niagara一直没有这样的概览视图。Niagara插件中提供的各种模块也达到了和级联相当的水准,这进一步加快了新接触Niagara的员工的培训。新的系统视图大大加快了在Niagara中工作的速度,因为现在滚动查看堆栈视图的情况少多了。你只需要单击你想关注的模块,而不必没完没了地滚动查看整个发射器堆栈。我们现在同时享受到了两种工具的优点。这包括级联的快速开发和易于理解的工作流程,以及一个完全由属性/数据驱动的粒子编辑器和必要时的全图表视图。
早期试验和挑战
早期的试验产生了一种模拟水交互的迷人方法,而且它是完全程序性的。通过模拟角色肢体的解析性表示与水面的交会,我们能够动态地选择要生成多少水花,它们应该以多快的速度飞溅,以及应该把它们放置在哪里。遗憾的是,这个成果没能赶上第2章的发行,但是我们盼望着看到它将来的表现!在我们刚开始采用Niagara并开始移植现有资源时,我们把新的发射器和模块搞得有点乱。因为要试验这种全新的工具,并设法将它纳入一个非常复杂且动态的管道,所以我们做的许多工作是没有用处或需要重做的。虽然早期的探索对于指导前进方向有极大价值,但我们也背上了很多技术上的债务,不得不多次回头清理项目中不再需要的旧发射器和旧模块。结果当新的美术师开始使用Niagara时,他们不清楚要使用哪些发射器,所以我们最后就有了一些不受支持的发射器,或者人们会不必要地创建新发射器。这在材质管道中可能也是很常见的问题。如果项目缺少明确的组织和合适的命名约定,人们往往会从头创建具有自己所需功能的材质,而不是去内容浏览器中寻找,设法搞明白该使用哪种主材质。为了解决这个问题,我们就想到了在团队中专门安排一个人作为发射器把关人。通过把这类工作都交给Andrew和我自己,我们才能做出更有意义的发射器选择,并在团队改用新工具时向他们传授传导流程,从而减少我们今后的技术债务。
我们对Niagara和《堡垒之夜》未来的展望
展望未来,我希望找到更多方法来进一步改进Niagara,使它超越以前级联所能达到的水平。尽管我们初期的程序性测试结果没能随《堡垒之夜》发行,但它们证明了只要投入更多开发时间,再配合越来越快的硬件,就有可能在场景中实现完全自然和动态的交互。我们《堡垒之夜》特效团队一直在努力的一个目标就是,让玩家感觉特效是与场景融为一体的,而不仅仅是在场景上合成的。显而易见,使用一种尚未脱离抢先体验阶段的工具,会遇到的问题之一就是大量缺陷和工作流程困难。但是在Epic,我们唯有通过这种方式,才能确保我们打造的工具是世界一流的,是虚幻引擎的有益补充。我们已经提出了许多提高用户生活质量的请求,随着这些请求得到满足,工作流程将会变得更快更好,超越许多人已经习惯的级联工作流程。
Niagara的功能和灵活性意味着我们构建功能时可以减少对工程师的依赖,从而自由地尝试我们以前从未想过可能实现的东西。Niagara是虚幻引擎中特效的未来,通过在《堡垒之夜》中运用这种工具,我们确保了它不仅更加稳定、快捷和灵活,而且更方便用于面向所有虚幻开发者的快速工作流程。再见,我已经迫不及待地想看到今后大家使用Niagara做出的精彩内容。