Mejora las frecuencias de fotogramas, reduce la carga de la GPU y disminuye la latencia de renderización con la configuración de las extensiones de XR de Android

Unity proporciona algunas funciones relacionadas con el rendimiento que son específicas de la realidad extendida de Android y requieren el paquete de extensiones de Android XR. Habilita estas funciones para mejorar la velocidad de fotogramas y reducir la carga de la GPU a través del submuestreo de Vulkan y el ajuste espacial, y para reducir la latencia de renderización rastreada con el cierre tardío.

Requisitos previos

Antes de seguir esta guía, asegúrate de haber verificado y completado los siguientes requisitos previos:

Cómo habilitar el ajuste espacial

URP Application Spacewarp es una optimización de OpenXR que ayuda a mantener altas velocidades de fotogramas sintetizando cada segundo fotograma. La técnica usa vectores de movimiento y datos de profundidad de los fotogramas anteriores para predecir dónde deberían moverse los píxeles, lo que reduce la potencia de procesamiento y el uso de energía.

Beneficios

  • Reduce la carga de trabajo de renderización de la GPU sintetizando fotogramas alternativos.
  • Reduce significativamente la potencia de procesamiento y el consumo de energía.
  • Utiliza la reproyección para reducir la latencia entre los movimientos del usuario y las actualizaciones de la pantalla.

Habilita esta función

  1. En el menú principal de Unity, haz clic en Edit > Project Settings.
  2. Expande la sección Administración de complementos de XR.
  3. Selecciona la pestaña que corresponda a tu dispositivo de RE actual.
  4. Ve a la sección OpenXR Feature Groups.
  5. En la sección Todas las funciones, habilita Application SpaceWarp.

    Configuración de Unity para Spacewarp

Habilita el submuestreo de Vulkan

El submuestreo de Vulkan permite crear y muestrear imágenes con densidades variables a través de mapas de densidad de fragmentos. Esta función de Vulkan permite que diferentes áreas de la pantalla se rendericen y transfieran a la memoria con diferentes resoluciones, lo que resulta especialmente útil para el renderizado foveal, en el que las áreas periféricas pueden usar una resolución más baja.

Beneficios

  • Proporciona una mejora variable cuando se combina con la renderización foveal, según el factor de forma.
  • Reduce el aliasing en las áreas periféricas a través del filtrado bilineal.
  • Permite una renderización eficiente de velocidad variable en diferentes regiones de la pantalla.

Habilita esta función

  1. En el menú principal de Unity, haz clic en Edit > Project Settings.
  2. Expande la sección XR Plug-in Management y, luego, haz clic en OpenXR.
  3. Haz clic en el ícono de ajustes junto a Android XR (Extensions): Session Management.
  4. Habilita Subsampling (Vulkan).

    Configuración de Unity para el submuestreo de Vulkan

Habilita el cierre tardío

El enclavamiento tardío es una técnica que minimiza la demora entre el movimiento físico del usuario y el cambio visual resultante en la pantalla. Permite que la postura de la cabeza se actualice tarde en la canalización de generación de fotogramas, lo que mejora la comodidad y la frecuencia de actualización percibida de tus apps de XR. Esto se logra reduciendo la latencia de entrada en casi un tiempo de fotograma completo.

Beneficios

  • Reduce significativamente la latencia de movimiento a fotón (MTP).
  • Mejora la comodidad del usuario y reduce la cinetosis.
  • Mejora la estabilidad y la precisión.

Habilita esta función

Para habilitar el cierre tardío, activa la función en el tiempo de ejecución de tu app:

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);
    }
}