Skip to content

介绍

Web Adaptive Performance (WebAP) 是一款用于动态优化 Unity WebGL 应用程序的工具。

它有助于在各种设备(从强大的 PC 到较弱的智能手机)上寻找视觉质量和稳定 FPS 之间的平衡。该插件不依赖硬性限制,而是实时分析帧时序。它检测性能下降的根本原因,平滑降低负载直至实现稳定,并在获得性能余量 (Performance Headroom) 时恢复质量。

设备适应

默认将您的 Unity 项目设置为最大质量设置。如果当前设备无法处理该负载,插件将在运行时自动缩小它们。

为什么选择 WebAP?

为什么不使用官方的 Adaptive Performance 包?
官方的 Unity 包是一个强大的工具,但它从根本上与 WebGL 不兼容。它依赖于两种类型的提供程序,且两者都会受到浏览器限制的阻碍:

  1. 原生提供程序 (Android): 依赖系统 API 来检索热状态 (Thermal Headroom) 并管理频率。浏览器沙盒阻止任何硬件访问,使这种方法不可能实现。新兴的 Web 标准(如 Compute Pressure API)仅监控 CPU,无法为 3D 图形提供精确数据。
  2. 基本提供程序 (Basic Provider): Unity 的跨平台数学提供程序。它依赖于 FrameTimingManager。然而,为了使其运行,引擎需要高精度硬件 GPU 计时器,由于安全原因(防止 Spectre/Meltdown 攻击),这些计时器在浏览器中被强制阻止或严重混淆。因此,官方 Basic Provider 实际上无法在 WebGL 中初始化。

WebAP 解决方案: 我们设计了一种专门针对 Web 特性的架构。WebAP 也利用 FrameTimingManager,但插件采用安全的启发式分析,而不是严格依赖被阻止的 GPU 计时器。它绕过了浏览器异常(例如由 Emscripten 中的 setTimeout 引起的指标失真),并使用纯数学来计算瓶颈(CPU vs GPU)。这提供了一个 AAA 级的优化系统,可在任何浏览器中合法且稳定地运行。

为什么不使用标准的缩放脚本?
经典的解决方案只是在出现任何延迟时降低屏幕分辨率。如果应用程序是由于 CPU 计算(物理、脚本、逻辑)而不是渲染而出现卡顿,则这是无用的。

WebAP 的工作原理:

  • 瓶颈检测
    该插件从数学上确定限制帧的因素:CPU 或 GPU。如果物理存在延迟,系统会在不降低屏幕分辨率的情况下简化物理。为此提供了超过 12 个独立的缩放器(阴影、LOD、层剔除等)。
  • Anti Yo-Yo 惩罚系统
    解决发生质量闪烁时动态分辨率的常见问题。如果改善图形会立即导致 FPS 下降,系统会临时实施惩罚锁定以阻止进一步增加。
  • 保持 UI 清晰度
    如果您选择通过 RenderTexture 进行缩放模式,3D 世界的分辨率会降低,但界面将保留在原生浏览器缩放 (Native Browser Scaling) 分辨率下。自定义 WebScaledPhysicsRaycaster 组件会自动重新计算射线坐标,以便无论帧压缩如何,点击 3D 对象都能正确运行。
  • Zero-GC 架构
    整个项目在设计时考虑了严格的内存经济。核心使用 O(1) 环形缓冲区,并且在 Update 循环中执行零分配。因此,该插件不会触发垃圾回收器 (GC)。
  • 严格的构建清洁度
    许多资产通过将它们的预制件和纹理放置在 Resources 文件夹中(迫使引擎将它们包含在构建中)来使发布构建变得臃肿。WebAP 的架构避免了这种错误。除非明确添加到场景中,否则所有工具和仪表板 UI 在编译期间都会自动剥离。只有轻量级核心进入最终项目。
  • 即插即用集成
    设置被整合在 Project Settings 中的统一界面内。该插件会自动注入构建中——您无需在场景上手动放置管理器预制件。

兼容性

  • Unity 版本: 2020.3 LTS 及更高版本。该插件利用现代 API 并自动采用新的引擎功能(例如,Unity 6000.2+ 的 Mesh LOD Threshold 支持)。
  • 渲染管线: 无缝支持内置渲染管线 (BiRP) 和通用渲染管线 (URP)。