Extensão OpenXR XR_ANDROID_unbounded_reference_space

String de nome

XR_ANDROID_unbounded_reference_space

Tipo de extensão

Extensão de instância

Número de extensão registrado

468

Revisão

1

Dependências de extensão e versão

OpenXR 1.0

Data da última modificação

2024-09-12

Status do IP

Nenhuma reivindicação de IP conhecida.

Colaboradores

Spencer Quin, Google

Jared Finder, Google

Fengtao Fan, Google

Lachlan Ford, Google

Nihav Jain, Google

Levana Chen, Google

Visão geral

Essa extensão permite que os aplicativos criem um espaço de referência UNBOUNDED_ANDROID. Esse espaço de referência permite que o espectador se mova livremente por um ambiente complexo, muitas vezes a muitos metros de onde começou, sempre otimizando a estabilidade do sistema de coordenadas perto do espectador. À medida que o dispositivo detecta mais do ambiente para criar uma compreensão melhor da cena, a origem do espaço de referência pode se desviar com ajustes enormes conforme necessário para manter o rastreamento do dispositivo.

Para criar um espaço de referência UNBOUNDED_ANDROID, o aplicativo pode definir XrReferenceSpaceCreateInfo::referenceSpaceType XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID e transmitir para xrCreateReferenceSpace.

XrInstance instance; // previously initialized
XrSession session; // previously initialized
XrPosef pose; // previously initialized

// Use the new reference space type in the create info struct
XrReferenceSpaceCreateInfo createInfo = {
    .type = XR_REFERENCE_SPACE_CREATE_INFO;
    .next = nullptr;
    .referenceSpaceType = XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID;
    .poseInReferenceSpace = pose;
}
XrSpace referenceSpace;
CHK_XR(xrCreateReferenceSpace(session, &createInfo, &referenceSpace));

// After usage
CHK_XR(xrDestroySpace(referenceSpace));

O espaço de referência UNBOUNDED_ANDROID estabelece uma origem com bloqueio mundial da posição do fone de ouvido quando o rastreamento do dispositivo começa. Ele está alinhado à gravidade para excluir inclinação e rolagem, com +X à direita, +Y para cima e -Z para frente.

O espaço UNBOUNDED_ANDROID é útil quando um aplicativo precisa renderizar conteúdo em escala mundial que se estende além dos limites de um único STAGE, por exemplo, um andar inteiro ou vários andares de um edifício.

Um espaço UNBOUNDED_ANDROID mantém a estabilidade perto do espectador ajustando a origem ao longo do tempo. Ele pode fazer ajustes pequenos e grandes conforme necessário para manter o rastreamento do dispositivo.

  • O ambiente de execução não deve enfileirar o evento XrEventDataReferenceSpaceChangePending em resposta a pequenos ajustes.
  • O ambiente de execução precisa enfileirar o evento XrEventDataReferenceSpaceChangePending em resposta a ajustes grandes. Por exemplo, a pose no espaço UNBOUNDED_ANDROID é redefinida devido a uma perda de rastreamento, e o rastreamento é restabelecido em uma estimativa desconectada do mundo (um "novo mapa").
  • O sistema está sempre atualizando o entendimento do mundo e ajustando o rastreamento de dispositivos. Se um aplicativo exigir um local persistido independente das redefinições de rastreamento, uma âncora poderá ser usada nesse caso.

Evento de mudança de espaço de referência

Para parâmetros definidos pela estrutura XrEventDataReferenceSpaceChangePending que retornaram eventos de mudança de mundo ou otimização de relocalização:

typedef struct XrEventDataReferenceSpaceChangePending {
    XrStructureType         type;
    const void*             next;
    XrSession               session;
    XrReferenceSpaceType    referenceSpaceType;
    XrTime                  changeTime;
    XrBool32                poseValid;
    XrPosef                 poseInPreviousSpace;
} XrEventDataReferenceSpaceChangePending;

Descrições dos participantes

  • A referenceSpaceType está XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID.
  • changeTime vai representar o XrTime em que a relocalização foi concluída.
  • poseValid será false devido à estimativa desconectada ou true após a reconexão.
  • poseInPreviousSpace não será válido quando poseValid for false.

Quando visualizações, controladores ou outros espaços perdem o rastreamento em relação ao espaço UNBOUNDED_ANDROID, os aplicativos podem continuar recebendo valores position e orientation inferidos ou conhecidos por último. Essas poses inferidas podem, por exemplo, ser baseadas em atualizações do modelo do pescoço, estimativa de posição inercial ou a posição conhecida mais recente. Um aplicativo pode presumir que continuará a ter o XR_SPACE_LOCATION_POSITION_VALID_BIT e XR_VIEW_STATE_POSITION_VALID_BIT definidos, mas XR_SPACE_LOCATION_POSITION_TRACKED_BIT e XR_VIEW_STATE_POSITION_TRACKED_BIT podem ser limpos pelo ambiente de execução para indicar que a posição é inferida ou conhecida pela última vez dessa forma.

Quando o rastreamento é recuperado, o ambiente de execução pode centralizar a origem de forma arbitrária, por exemplo, movendo a origem para coincidir com o espectador. Um aplicativo pode verificar o valor poseValid retornado do evento XrEventDataReferenceSpaceChangePending para determinar se ele está pronto para uso.

Novos tipos de objeto

Novos tipos de flags

Novas constantes de tipo enumerado

A enumeração XrReferenceSpaceType foi ampliada com:

  • XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID

Novos tipos enumerados

Novas estruturas

Novas funções

Problemas

Histórico de versões

  • Revisão 1, 12/09/2024 (Levana Chen)
    • Descrição inicial da extensão