使用 Android XR 扩展程序设置提高帧速率、降低 GPU 负载并缩短渲染延迟时间

Unity 提供了一些特定于 Android XR 且需要 Android XR Extensions 软件包的性能相关功能。启用这些功能可提高帧速率,并通过空间扭曲和 Vulkan 子采样来降低 GPU 负载,并使用后期锁定来缩短跟踪的渲染延迟时间。

前提条件

在遵循本指南中的说明之前,请确保您已验证并完成以下前提条件:

启用 spacewarp

URP 应用 Spacewarp 是一种 OpenXR 优化,可通过合成每隔一帧来帮助保持高帧速率。该技术使用前几帧的运动矢量和深度数据来预测像素应移动到的位置,从而减少计算能力和能耗。

优势

  • 通过合成替代帧来减少 GPU 渲染工作负载。
  • 可大幅降低计算能力和能耗。
  • 使用重投影来减少用户移动与显示更新之间的延迟。

启用此功能

  1. 在 Unity 主菜单中,依次点击 Edit > Project Settings
  2. 展开 XR 插件管理部分。
  3. 选择与您当前的 XR 设备对应的标签页。
  4. 前往 OpenXR 功能组部分。
  5. 所有功能部分中,启用应用 SpaceWarp

    spacewarp 的 Unity 设置

启用 Vulkan 子采样

Vulkan 子采样允许使用片段密度图以可变密度创建和采样图像。借助此 Vulkan 功能,屏幕的不同区域可以不同的分辨率进行渲染并传输到内存,这对于凹凸透镜渲染尤其有用,因为周边区域可以使用较低的分辨率。

优势

  • 与凹凸透镜渲染相结合时,可提供不同的改进,具体取决于设备类型。
  • 通过双线性过滤减少外围区域的锯齿。
  • 可在不同屏幕区域实现高效的变速率渲染。

启用此功能

  1. 在 Unity 主菜单中,依次点击 Edit > Project Settings
  2. 展开 XR 插件管理部分,然后点击 OpenXR
  3. 点击 Android XR(扩展程序):会话管理旁边的齿轮图标。
  4. 启用子采样 (Vulkan)

    Vulkan 子采样的 Unity 设置

启用晚锁定

后期锁定是一种技术,可最大限度地缩短用户身体移动与显示屏上由此产生的视觉变化之间的延迟。它允许在帧生成流水线的后期更新头部姿势,从而提高 XR 应用的舒适度和感知帧速率。为此,它将输入延迟时间缩短了接近一帧的时间。

优势

  • 显著缩短了运动到光子 (MTP) 延迟时间。
  • 提高用户舒适度并减轻晕动症。
  • 提升稳定性和精确度。

启用此功能

如需启用后期锁定,请在运行时为您的应用开启此功能:

private XRDisplaySubsystem xrDisplay;

private XRDisplaySubsystem.LateLatchNode lateLatchNode = XRDisplaySubsystem.LateLatchNode.Head;

void Start()
{
    List<XRDisplaySubsystem> xrDisplaySubsystems = new();

    SubsystemManager.GetSubsystems(xrDisplaySubsystems);

    if (xrDisplaySubsystems.Count >= 1)
    {
        xrDisplay = xrDisplaySubsystems[0];
    }
}

void Update()
{
    if (xrDisplay != null)
    {
        transform.position += new Vector3(Mathf.Epsilon, 0, 0);

        Quaternion rot = transform.rotation;

        rot.x += Mathf.Epsilon;

        transform.rotation = rot;

        xrDisplay.MarkTransformLateLatched(transform, lateLatchNode);
    }
}