针对《地铁跑酷》城市版进行性能与速度优化

Mar 24, 2026
《地铁跑酷》城市版 | SYBO

SYBO将其最新作品《地铁跑酷城市》构建为《地铁跑酷》系列的全新章节。虽然前作带玩家环游世界,但本作将玩家的足迹定格在“地铁城”,不仅呈现了各具特色的街区,还带来了更加丰富多样的游戏玩法。

除了经典的无尽奔跑模式外,游戏还推出了限时事件和城市巡游等限定体验。这些新模式在拓展游戏进程和游戏玩法系统的同时,也保留了该系列游戏特有的响应速度与流畅体验,这些特质深受全球数百万玩家的喜爱。

提升游戏的图形品质是这一Vision的核心,其中包括增强的动画、更丰富的场景以及更丰富的游戏玩法。然而,这些改进不能以牺牲代码的清晰度或Runtime效率为代价。

此次的挑战在于,在保持原版游戏那种令其生命周期内累计下载量突破45亿次、风靡全球的即时感的同时,对游戏体验进行升级,使其既让人感到熟悉又充满新意,从而为跑酷类游戏带来现代化的诠释。

挑战:

推出一款《地铁跑酷》的高保真续作,运行平滑,并在各类设备上保持稳定的性能,覆盖广泛的范围

平台:

iOS、Android

地点:

丹麦哥本哈根

项目人员:

35

《地铁跑酷》城市:一个 Unity 成功案例

开发团队构建了《地铁跑酷:城市》作为一款可扩展的实时服务游戏,旨在支持多年来的连续内容更新、新玩法机制以及更高画质,且无需进行大规模重写。“在技术层面,它的扩展速度必须与设计和内容在创意层面的扩展速度保持同步,”SYBO的主游戏设计师阿塔什·卡西姆表示。

该团队在设计架构时,重点关注了模块化和性能。它们封装并扩展了系统,使设计师能够在不破坏核心游戏循环的前提下,添加游戏玩法元素或环境变化。

与此同时,更高的画质也带来了性能方面的挑战:精细的环境、高多边形资产以及更丰富的动画效果,可能会给中低端设备带来负担。“我们内嵌了严格的网格和着色器复杂度限制,实现了具有不同品质级别和分辨率缩放功能的分层渲染路径,并连续在各类代表性设备上进行性能分析,”SYBO的技术总监加布里埃尔·拉斯卡诺解释道。“我们还投入了大量精力来寻找着色器预热的最佳时机,在快速加载时间与Runtime着色器编译器卡顿之间寻求平衡。”

他们没有盲目地进行优化,而是找到了真正的瓶颈,包括微三角面密度过高以及基于瓦片的 GPU 上存在的过度绘制问题。其结果是一个灵活且注重性能的基础架构,既能随着复杂度的提升而不断演进,又能保持稳定性并兼容各类设备。

《地铁跑酷:城市》

结果

  • 始终保持60 FPS
  • 在性能优化阶段后,设备支持率提高了5.9倍
  • 将地平线模型的顶点数从26万减少到仅剩少量,并将绘制调用次数从27次降至仅剩寥寥数次
  • 在低端设备上,消除了每帧等待 GPU 处理完成的 10 毫秒延时
  • 在低端 Android 设备上,动画和渲染的后台管理开销减少了约 50% 至 60%,从而节省了约 2 毫秒的主线程 CPU 时间

为快速迭代设计关卡

《地铁跑酷:城市》中的关卡设置旨在追求速度与灵活性。为了呈现该系列作品标志性的多样性和响应性,团队采用了一种基于模块的程序化系统,让设计师能够在 Unity 编辑器中独立创建、修改和组合自成一体的模块。

每个片段都包含层元素和变化规则,既能保持一致性,又能让重复运行的内容保持吸引力。该系统已启用可扩展的关卡扩展功能,允许在不重新定义整个路径的情况下,将新区块直接添加到无限模式或有限模式中。

借助编辑器,设计师可以模拟障碍物的移动、预览交互效果,并实时测试动态元素。“他们无需通关整款游戏,就能切身体会到某个游戏片段的感受,”拉斯卡诺解释道。

《地铁跑酷》城市版 | SYBO

《地铁跑酷》城市版 | SYBO

可对齐的放置工具和 Unity 的碰撞体可视化功能进一步简化了迭代流程,启用了精准、快速的调整。对于“城市游览”这类分阶段模式,设计师直接在编辑器中运行指定的模块或阶段,从而绕过了完整的项目编译器流程。

模块化结构还支持快速调整内容。“我们的课程体系非常模块化,”卡西姆说。“我们为各种不同的关卡设置元素准备了不同的预制件,可以直接拖放至模块中。“每个区块都包含多个层,因此当玩家穿越同一区域时,会体验到不同的变化,从而让游戏玩法始终保持新鲜感。”

该团队将模块化关卡架构与实时可视化技术相结合,在确保品质的同时加快了迭代速度。正如拉斯卡诺所指出的:“该系统让设计师能够自由尝试,高效扩展内容,并在无限游戏玩法模式和有限游戏玩法模式下,始终保持玩家所期待的响应速度和精良品质。”

《地铁跑酷》城市版 | SYBO

《地铁跑酷》城市版 | SYBO

使用 Addressables 管理内存

Addressables 系统是团队能够在不影响性能的前提下呈现丰富视觉效果和广阔环境的核心所在。该团队利用Addressables技术,仅加载与玩家相关的数据块——卸载已完成的部分并串流加载新内容——从而最大限度地减少了内存占用,并启用了丰富且动态的内容呈现。

“数据块通过Addressables系统进行串流传输,并受到严格的生命周期控制,从而确保内存占用量随游戏玩法实际运行情况而缩放,而非取决于内容的总大小,”拉斯卡诺解释道。“结合内存池技术,这能最大限度地减少内存分配的突发峰值,即使内容规模缩放,也能保持Runtime内存的稳定性。”

Addressables 系统使团队能够将内容与基础构建分离,并将关卡片段视为可独立加载的单位。“这对于确保应用商店合规至关重要,因为它既能缩小初始下载大小,又能控制Runtime内存占用,”拉斯卡诺表示。

《地铁跑酷》城市版 | SYBO

《地铁跑酷》城市版 | SYBO

在不同设备细分用户组中缩放性能

《地铁跑酷》中的城市渲染效果可在低端、中端和高端设备上流畅运行,同时保持细腻的画面细节和稳定的帧率。该团队遵循了一套严格的“瓶颈优先”优化方法论。每次消除一个瓶颈后,性能分析器都会揭示出下一个限制因素。“这种迭代过程让我们能够有条不紊地扩展支持的设备范围,而不是依赖于广泛而缺乏重点的优化,”拉斯卡诺说。

该团队采用了通用渲染管线(URP)并结合可编程渲染管线(SRP)批处理器,通过在 GPU 上缓存材质常量缓冲区,并在使用相同着色器变体的对象间复用这些缓冲区,从而降低了 CPU 渲染开销,并最大限度地减少了渲染线程中每次绘制调用时的状态初始化工作。

“我们为每个品质等级实现了多个着色器变体,并通过全局关键字和 URP 设置对其进行控制。“低端设备采用降低的光照效果和简化的片段路径,而高端设备则保持完整的保真度,且无需更改资产内容,”拉斯卡诺说道。

《地铁跑酷》城市版 | SYBO

《地铁跑酷》城市版 | SYBO

艺术家们使用 Amplify 着色器编辑器编写着色器,无需工程支持即可自由发挥创意。团队对跨设备性能进行了测试,重写了复杂的着色器,并优化了包括城市天际线在内的关键资产。

“我们将一个高顶点数的3D动画天际线——约26万个顶点,分布在27个绘制调用中——替换为一个平面网格和平移纹理,”拉斯卡诺说道。“这一改动显著减少了顶点处理和微三角面碎片化,将其压缩为几个绘制调用中涉及的少量顶点,从而在低端 Android 设备上节省了数毫秒的 GPU 时间。”

减少移动端 GPU 上的微三角面过度绘制

对Mali GPU设备的早期性能分析器表明,该应用程序提交的几何数据远超其对可见像素的实际贡献。提交的原始图形中仅约33%可见,而GPU通过采样剔除处理丢弃了约25%(理想情况下应低于5%)。此外,微三角面覆盖率始终维持在50%至80%之间(理想情况下应低于10%)。

这些结果表明,该应用程序生成了过高的微三角面密度——这在基于图块(移动设备)的 GPU 上是一个已知的低效问题,即使几何体仅勉强覆盖屏幕像素,片元处理开销也会显著增加。该团队使用一个定制的自适应系统,实时监控 CPU 和 GPU 的负载。它会动态调整品质、资产实例化、距离剔除以及高细节道具等非必要元素,以保持目标性能。

“为此,我们采取了以下措施:大幅减少多边形数量,移除静态几何体的背面,简化天际线网格,并严格执行每个区块的网格预算。“这大大减轻了片段处理的负担,并稳定了低端Android设备上的GPU运行时间,”拉斯卡诺表示。“顶点颜色、多边形数量上限以及从静态几何体中移除背面,进一步减轻了GPU的负担,同时并未影响游戏的品质。”

《地铁跑酷》城市版 | SYBO

《地铁跑酷》城市版 | SYBO

通过配置文件扩展支持的设备

在开发初期,由于图形复杂度较高,仅有16%的兼容设备能够运行《地铁跑酷:城市》。在性能分析方面,团队面临着不断变化的瓶颈,包括 GPU 片段开销和着色器复杂度,以及 CPU 提交开销和内存占用。

为了扩展对设备的支持,该团队在自研的性能分析工具之外,还大量依赖于 Project Auditor 和 Memory Profiler。Project Auditor 帮助他们发现了配置和资产层面的低效问题,例如过多的着色器变体以及冗余或错误的设置;同时,通过 Unity Profiler 以及 RenderDoc 和 Snapdragon Profiler 等设备级性能分析工具,对运行时瓶颈进行了分析。

Memory Profiler揭示了素材资源内存使用中的热点,精准定位了导致内存突增或不必要内存占用的纹理、网格或对象。

《地铁跑酷》城市版 | SYBO

《地铁跑酷》城市版 | SYBO

“性能分析器已集成到我们的发布门中。“每次重大构建发布前,我们都会根据 CPU、GPU 和内存资源限制进行验证,以防止功能退化,并确保在某类设备上进行的改进不会导致其他设备出现不稳定,”拉斯卡诺解释道。

通过系统地分析这些指标,团队确定了优化工作的优先级,严格控制了多边形数量和内存预算,并确保即使在低端设备上也能保持稳定的帧率。

该团队还运行了内部Addressables检查,以防止重复和冲突,而模块化块系统和对象池则最大限度地减少了游戏玩法过程中的内存突发。

优先保证帧率稳定性,而非追求峰值性能

在渲染方面,团队根据测试矩阵中的性能数据,最终选择了 OpenGL 而非 Vulkan,以确保在低端设备上保持稳定的帧率。

“尽管 Vulkan 在高端设备上表现良好,但性能分析显示,在低端 Android 硬件上存在渲染线程卡顿和帧率不稳定的问题,”拉斯卡诺表示。“OpenGL 在我们的目标设备矩阵中实现了更稳定的帧时间,因此我们优先考虑设备的兼容性和帧率稳定性,而非理论峰值性能。”

结合 Adaptive Performance、分层着色器、SRP 批处理以及针对资源的优化,这种性能分析方法确保了丰富细腻的视觉效果能在95%的支持设备上流畅运行。

“与 Unity 的‘综合成功’团队合作,帮助我们验证并加速了那些我们原本正在研究和评估的决策,同时根据投资回报率(ROI)对优化方案进行了评估,”拉斯卡诺表示。“最大的收益来自于系统性地消除真正的瓶颈——无论是受CPU限制的体更新、网格蒙皮重叠,还是GPU片元开销——而非简单套用通用最佳实践。”

《地铁跑酷》城市版 | SYBO

《地铁跑酷》城市版 | SYBO

分享关键绩效经验

在谈到性能优化时,拉斯卡诺强调应将最佳实践——例如细节级别(LOD)系统或Vulkan——视为假设,并结合游戏的具体情况进行测试。

对于实时服务游戏,他建议构建一种支持迭代的架构,并配备诸如多边形数量限制、着色器复杂度预算、内存管理以及连续性能分析等保障措施。他还建议尽早考虑设备的覆盖范围,以避免在生产后期进行耗费高昂的返工。

“平均FPS可能会产生误导。在这样的游戏中,玩家最关注的是帧率稳定性。“消除帧率突增和渲染线程卡顿对玩家体验的影响,比提高峰值帧率更大,”拉斯卡诺表示。“选择合适的渲染管线并配合恰当的批处理策略来优化帧率,可能会带来决定性的改变。”

他还强调,“性能优化是一个通过迭代消除瓶颈的过程。”每次修复都会将瓶颈转移到其他地方,比如 GPU、CPU、内存或内存带宽之间。“关键在于有条不紊地进行性能分析、权衡利弊,并确保技术决策与您计划支持的性能最弱的设备相匹配。”

立即下载 Unity Pro

借助强大的工具、专业支持、经过验证的合作伙伴以及充满活力的社区,开始制作游戏,让它们在品质和成功程度上与大型工作室的作品一较高下,甚至更胜一筹。