《末日来袭:狂潮》中角色迎战怪物的场景。

技术博客

访谈

借助UE5为《末日来袭:狂潮》优化血液与特效系统

Let Them Come: Onslaught

Niagara

Tuatara Games

游戏

独立游戏

蓝图

tuatara-games-logo.png
Tuatara Games是一家位于温哥华的顶尖美术师团队,为游戏及其他实时体验提供前沿的视觉特效服务。该工作室曾运用其专业技术为Epic Games等大型游戏公司提供支持,并通过原创热门游戏《末日来袭》开发了自己的IP。
大家好,虚幻引擎社区的朋友们。我是Tuatara Games的技术美术师和VFX美术师Alex Underhill。我们刚刚发布了由虚幻引擎5驱动的游戏《末日来袭:狂潮》(登陆PC与主机平台),而我也有幸参与了这款游戏的开发工作。

在这款科幻弹幕生存游戏中,玩家被困于敌对的外星世界,与无穷无尽的怪物群搏斗。我们并不想让敌人简单地消失,而是希望每次击杀都充满视觉冲击力,并在战场上留下痕迹——但由于怪物数量规模十分庞大,这给我们带来了技术性挑战,迫使我们尝试通过虚幻引擎的系统来寻找解决方案。

初代《末日来袭》使用Game Maker开发,但《末日来袭:狂潮》转而采用虚幻引擎,因为我们认定这个引擎最契合我们这款游戏的目标。

虚幻引擎可以让我们在屏幕上同时投放大量敌人与视觉特效,并依然保持流畅性能。而作为视觉特效工作室,我们也最熟悉相关创作工具,尤其是虚幻引擎。

核心挑战:血迹斑驳的地面


《末日来袭:狂潮》视觉特效的一大挑战在于,屏幕上随时可能出现大量敌人,而且它们可能在同一时间被团灭。在我们制作游戏原型时,敌人最初会触发一个“爆破游戏提示”(Burst Gameplay Cue),从而生成血迹贴花留在地面上,并产生血色爆炸效果,给予玩家视觉反馈。但我们很快发现(尤其是在武器升级后),你可能在短时间内同时触发大量死亡事件。因此我们必须对这些效果进行优化,确保战斗能实现极致混乱的效果,而不会因数量过多导致出现性能瓶颈。

对于血迹贴花而言,我们原本的设计初衷是让它们留下些许屠杀感,同时就像操作记录足迹一样,告诉玩家他们曾经走过哪里、击杀了什么。问题在于,这些贴花会大量生成——这意味着它们会迅速叠加,而我们希望它们能在场景中保留较长时间,这样才能达到我们想要的效果。另,还会出现贴花重叠的问题:玩家可能在很近的范围内击杀大量敌人,导致贴花彼此重叠,从而引发性能问题。

为了能在地面上生成大量血迹(甚至酸液!)标记,我们使用了Niagara创建一个系统,将一组世界空间区域渲染到一个渲染目标上。该数组长度固定,大约为256个条目,并且会循环使用——所以当256个条目用完后,第一个条目会被更新为第257个,以此类推。这个数量在测试中表现很好,可以让地面被“血腥覆盖”到一定程度后再开始循环利用条目。

现在,当一名敌人被击杀时,它不会再生成贴花,而是会将自身的数据(位置、半径、材质类型)发送到我们游戏世界中持久存在的一个蓝图Actor——“Splat Manager”(喷溅管理器)。
最终经过形变处理的遮罩呈现出逼真的血腥效果。
图片由Tuatara Games提供
然后,这个管理器会将数据发送到一个全局Niagara系统中,该系统通过高级着色语言(HLSL)结合Grid2D数据接口,将这些区域写入一个全局渲染目标遮罩中。这个系统的核心实现很大程度上借鉴了Terrible Posture Games技术总监Chris Zuko的工作成果。我们通过计算每个血泊的距离来填充渲染目标,距离范围由传入的半径值定义。所有距离数据最终会合并生成统一的遮罩。
《末日来袭:狂潮》战斗场景中的血泊遮罩。
图片由Tuatara Games提供
这个遮罩包含多个图层,其中包括血迹图层和酸液图层,环境表面着色器可采样这些层级,在需要的位置添加相应的血肉效果。

管理器会持续追踪当前渲染区域在世界空间中的原点坐标,以及该区域的世界空间单位大小。这些变量通过材质与Niagara参数集进行更新,并向内容创作环节开放。

血腥遮罩通过若干材质函数实现,这些函数能自动将坐标映射至世界空间中的对应位置,让美术师只需通过0.0-1.0的权重值即可驱动表面效果,无需手动重建坐标。对于大多数表面,我们会获取距离贴图数据,辅以世界空间噪点采样来扭曲形状,使其更自然地融入环境之中。
血泊自然地融入环境中。
图片由Tuatara Games提供
最终,这个经过扭曲的遮罩会在表面着色器中用于不同材质属性之间的混合,从而实现逼真的血腥视觉表现!
《末日来袭:狂潮》战斗场景中的血泊半径。
图片由Tuatara Games提供

血浆爆炸特效优化


另一个关键优化目标是减少生成的粒子系统数量,尤其是敌人死亡时的特效。与贴花数量的问题类似,屏幕上同时出现的死亡爆炸效果数量也很棘手。这次的问题不是过度绘制,而是生成与管理的Niagara系统数量太多。

在项目开发过程中,我们升级到了虚幻引擎5.3,其中一个重要原因是为了使用Niagara数据通道。通过对视觉特效与游戏提示系统进行重构,我们将所有血浆爆炸事件通过数据通道汇集至单一Niagara系统,由该系统在准确位置触发爆炸效果,而非每次生成全新的Niagara系统。它的逻辑与血泊类似:敌人死亡时会将自身信息(位置、事件大小/强度)发送到世界中的管理器系统,再由管理器发送到Niagara数据通道。

这种方案可以让“无血腥”版本的死亡特效变得异常简单——无血腥效果与标准版本并存,你可根据游戏选项实时切换。

采用Niagara数据通道的死亡效果并不能覆盖100%的死亡情况,因为我们还是希望为某些特定单位定制死亡效果。但它可以覆盖大约80-90%的死亡事件,同时保留为特殊情况进行定制的灵活性。

这样,玩家就能够清晰地看到自己在求生战中创造的血腥场面,而战场也能“记住”你的每一次胜利,而不会对性能造成影响。真心希望你们能在已经上线的《末日来袭:狂潮》中亲自体验这一切。

想用虚幻引擎开发游戏吗?

使用虚幻引擎,任何规模的团队都能大展宏图,创作不受限!了解虚幻引擎5如何助力不同规模的团队,打造出媲美大型工作室作品并具备同等视觉精致度的卓越游戏。
了解详情

获取有关行业创新和免费资产的最新消息!

通过提交您的信息,即表示您同意接收来自 Epic Games 的新闻、问卷调查和特惠推送。 隐私政策