Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Configurações OpenXR

O OpenXR possui seu próprio conjunto de configurações que são aplicadas quando o OpenXR inicia. Embora seja possível que as extensões do OpenXR implementadas por meio de plugins do Godot adicionem configurações adicionais, discutiremos apenas as configurações no núcleo do Godot aqui.

../../_images/openxr_settings.webp

Configurações gerais

Habilitado

Esta configuração ativa o módulo OpenXR quando o Godot inicia. Isso é necessário quando o backend Vulkan é usado. Para outros backends, você pode ativar o OpenXR a qualquer momento chamando initialize na OpenXRInterface.

Isso também precisa estar ativado para obter acesso ao editor do mapa de ações (action map editor).

Você pode usar o switch de linha de comando --xr-mode on para forçar isso a ficar ativado.

Mapa de ação padrão

Isso especifica o caminho do arquivo do mapa de ações que o OpenXR carregará e comunicará ao tempo de execução do XR.

Fator de forma

Isso especifica se o seu jogo foi projetado para:

  • Dispositivos Head Mounted (montados na cabeça), como um Meta Quest, Valve Index ou Magic Leap,

  • Dispositivos Handheld (portáteis), como celulares.

If the device on which you run your game does not match the selection here, OpenXR will fail to initialize.

Configuração de visualização

Isso especifica a configuração de visão para a qual seu jogo foi projetado:

  • Mono, seu jogo fornece uma saída de imagem única. Ex: AR baseada em celular;

  • Stereo, seu jogo fornece saída de imagem estéreo. Ex: dispositivos montados na cabeça.

If the device on which you run your game does not match the selection here, OpenXR will fail to initialize.

Nota

O OpenXR possui configurações de visualização adicionais para dispositivos muito específicos que o Godot ainda não suporta. Por exemplo, os headsets Varjo possuem uma configuração quad-view que gera dois conjuntos de imagens estéreo. Elas podem ser suportadas em um futuro próximo.

Espaço de referência

Dentro do XR, todos os elementos, como a cabeça e as mãos do jogador, são rastreados dentro de um volume de rastreamento. Na base desse volume de rastreamento está o nosso ponto de origem, que mapeia nosso espaço virtual para o espaço real. Existem, no entanto, diferentes cenários que colocam este ponto em locais diferentes, dependendo do sistema XR usado. No OpenXR, esses cenários são bem definidos e selecionados configurando um espaço de referência (reference space).

Local

O espaço de referência local posiciona nosso ponto de origem na cabeça do jogador por padrão. Alguns runtimes de XR farão isso toda vez que seu jogo iniciar, outros farão com que a posição persista entre as sessões.

Este espaço de referência, no entanto, não impede que o usuário se afaste, então você precisará detectar se o usuário o faz se desejar impedir que o usuário saia do veículo que está controlando, o que poderia potencialmente quebrar o jogo.

Este espaço de referência é a melhor opção para jogos como simuladores de voo ou simuladores de corrida, onde queremos colocar o nó XROrigin3D onde a cabeça do jogador deveria estar.

Quando o usuário aciona a opção de recentralizar em seu headset, cujo método é diferente para cada tempo de execução de XR, o tempo de execução de XR moverá o XRCamera3D para o nó XROrigin3D. A OpenXRInterface também emitirá o sinal pose_recentered para que seu jogo possa reagir de acordo.

Nota

Quaisquer outros elementos rastreados por XR, como controles ou âncoras, também serão ajustados de acordo.

Aviso

Você não deve chamar center_on_hmd ao usar este espaço de referência.

Estágio (Stage)

O espaço de referência stage é o nosso espaço de referência padrão e coloca o nosso ponto de origem no centro do nosso espaço de jogo. Para tempos de execução de XR que permitem desenhar um limite de guardião, esta localização e sua orientação são frequentemente definidas pelo usuário. Outros tempos de execução de XR podem decidir sobre a colocação deste ponto por outros meios. É, no entanto, um ponto estacionário no mundo real.

Este espaço de referência é a melhor opção para jogos em escala de sala (room-scale), onde se espera que o usuário caminhe por um espaço maior, ou para jogos onde há necessidade de alternar entre modos de jogo. Veja Escala de Sala para mais informações.

Quando o usuário aciona a opção de recentralizar em seu headset, cujo método é diferente para cada tempo de execução de XR, o tempo de execução de XR não alterará o ponto de origem. A OpenXRInterface emitirá o sinal pose_recentered e cabe ao jogo reagir adequadamente. Não fazer isso impedirá que seu jogo seja aceito em várias lojas.

No Godot, você pode fazer isso chamando a função center_on_hmd no XRServer:

  • Chamar XRServer.center_on_hmd(XRServer.RESET_BUT_KEEP_TILT, false) moverá o nó XRCamera3D para o nó XROrigin3D de forma semelhante ao espaço de referência Local.

  • Chamar XRServer.center_on_hmd(XRServer.RESET_BUT_KEEP_TILT, true) moverá o nó XRCamera3D acima do nó XROrigin3D mantendo a altura do jogador, de forma semelhante ao espaço de referência Local Floor.

Nota

Quaisquer outros elementos rastreados por XR, como controles ou âncoras, também serão ajustados de acordo.

Piso Local

O espaço de referência local floor é semelhante ao espaço de referência local, pois posiciona o ponto de origem onde o jogador está. Neste modo, no entanto, a altura do jogador é mantida. Da mesma forma que no espaço de referência local, alguns tempos de execução de XR farão com que este local persista entre as sessões.

Portanto, não é garantido que o jogador estará de pé sobre o ponto de origem; a única garantia é que ele estava de pé ali quando o usuário recentralizou pela última vez. O jogador, portanto, também está livre para se afastar.

Este espaço de referência é a melhor opção para jogos onde se espera que o usuário permaneça no mesmo local ou para jogos do tipo AR onde os elementos de interface do usuário estão vinculados ao nó de origem e são rapidamente colocados no local do jogador ao recentralizar.

Quando o usuário aciona a opção de recentralizar em seu headset, cujo método é diferente para cada tempo de execução de XR, o tempo de execução de XR moverá o XRCamera3D acima do nó XROrigin3D, mas mantendo a altura do jogador. A OpenXRInterface também emitirá o sinal pose_recentered para que seu jogo possa reagir de acordo.

Aviso

Tenha cuidado ao usar este modo em combinação com o movimento virtual do jogador. O usuário recentralizando neste cenário pode ser imprevisível, a menos que você contraponha o movimento ao tratar o sinal de recentralização. Isso pode até quebrar o jogo, pois o efeito neste cenário seria o jogador teletransportar-se para qualquer local abstrato onde o ponto de origem foi colocado durante o movimento virtual, incluindo a capacidade de jogadores se teletransportarem para locais que deveriam estar fora dos limites. É melhor usar o modo Stage neste cenário e limitar o reset apenas à orientação quando um sinal pose_recentered for recebido.

Nota

Quaisquer outros elementos rastreados por XR, como controles ou âncoras, também serão ajustados de acordo.

Aviso

Você não deve chamar center_on_hmd ao usar este espaço de referência.

Modo de Mesclagem de Ambiente

O modo de mistura do ambiente (environment blend mode) define como nossa saída renderizada é misturada com "o mundo real", desde que isso seja suportado pelo headset.

  • Opaque significa que nossa saída oculta o mundo real; estamos no modo VR.

  • Additive significa que nossa saída é adicionada ao mundo real; este é um modo AR onde a ótica não nos permite ocultar totalmente o mundo real (ex: Hololens),

  • Alpha significa que nossa saída é misturada com o mundo real usando a saída alfa (a viewport deve ter o fundo transparente ativado); este é um modo AR onde a ótica pode ocultar totalmente o mundo real (Magic Leap, todos os dispositivos de pass-through, etc.).

Se for selecionado um modo que não é suportado pelo headset, o primeiro modo disponível será selecionado.

Nota

Alguns dispositivos OpenXR possuem sistemas separados para ativar/desativar o passthrough. A partir do Godot 4.3, selecionar o modo de mistura alfa também executará essas etapas extras. Isso exige que o plugin de fornecedor mais recente esteja instalado.

Nível de Foveação

Define o nível de foveação usado na renderização, desde que esse recurso seja suportado pelo hardware utilizado. A foveação é uma técnica em que, quanto mais longe do centro da viewport renderizamos o conteúdo, menor é a resolução em que o renderizamos. A maioria dos tempos de execução de XR suporta apenas foveação fixa, mas alguns levarão o rastreamento ocular em consideração e usarão o ponto focal para este efeito.

Quanto maior o nível, maiores serão os ganhos de desempenho, mas também maior será a redução na qualidade na visão periférica do usuário.

Nota

Apenas para o renderizador Compatibility, para os renderizadores Mobile e Forward+, defina a propriedade vrs_mode na Viewport para VRS_XR.

Aviso

Este recurso é desativado se forem usados pós-efeitos como glow, bloom ou DOF.

Foveação Dinâmica (Foveation Dynamic)

Quando ativado, o nível de foveação será ajustado automaticamente dependendo da carga atual da GPU. Ele será ajustado entre o nível baixo e o nível de foveação selecionado na configuração anterior. Portanto, é melhor combinar esta configuração com o nível de foveação definido como alto.

Nota

Apenas para o renderizador Compatibility

Enviar Buffer de Profundidade (Submit Depth Buffer)

Se ativado, um buffer de profundidade fornecido pelo OpenXR será usado durante a renderização, o qual é enviado junto com a imagem renderizada. O tempo de execução de XR pode usar isso para uma reprojeção aprimorada.

Nota

A ativação deste recurso desativará o suporte a stencil durante a renderização. Não são muitos os tempos de execução de XR que fazem uso disso; é aconselhável deixar esta configuração desativada, a menos que ela forneça benefícios notáveis para o seu caso de uso.

Alerta de Inicialização

Se ativado, isso resultará em uma mensagem de alerta apresentada ao usuário se o OpenXR falhar ao iniciar. Nem sempre recebemos feedback do sistema XR sobre o motivo da falha na inicialização. Se recebermos, registramos isso no console. Os motivos comuns de falha são:

  • Nenhum tempo de execução de OpenXR está instalado no sistema hospedeiro.

  • O tempo de execução do WMR OpenXR da Microsoft está ativo no momento; este suporta apenas DirectX e falhará se o OpenGL ou Vulkan for usado.

  • O SteamVR é usado, mas nenhum headset está conectado/ligado.

Desative isso se você suporta um modo de fallback em seu jogo para que ele possa ser jogado no modo desktop quando nenhum headset de VR estiver conectado, ou se você estiver tratando a condição de falha por conta própria verificando OpenXRInterface.is_initialized().

Extensões

Esta subseção permite que você ative várias extensões opcionais do OpenXR. Tenha em mente que as extensões só funcionarão se o tempo de execução do OpenXR (SteamVR, Oculus, etc.) com o qual o projeto é executado as suportar.

Utilidades de Depuração

Ativar isso registrará mensagens de depuração do tempo de execução do XR.

Tipos de Mensagem de Depuração

Isso permite que você escolha quais mensagens de depuração são registradas.

Síntese de Quadros

Quando ativado, desde que seja suportado pelo tempo de execução de XR, buffers de vetor de movimento e de profundidade de menor resolução são renderizados e fornecidos ao tempo de execução de XR. O tempo de execução de XR pode agora injetar quadros de reprojeção e compensar taxas de quadros mais baixas.

Atualmente, possui as seguintes limitações:

  • NÃO funciona no renderizador Forward+.

  • Funciona apenas com renderização estéreo.

Rastreamento de Mãos

This enables the hand tracking extension when supported by the device used. This is on by default for legacy reasons. The hand tracking extension provides access to data that allows you to visualize the user's hands with correct finger positions. Depending on platform capabilities the hand tracking data can be inferred from controller inputs, come from data gloves, come from optical hand tracking sensors or any other applicable source.

Se o seu jogo suportar apenas controles, isso deve ser desativado.

Veja a página sobre rastreamento de mãos para detalhes adicionais.

Fonte de Dados de Rastreamento de Mãos Desobstruído

Ativar isso significa que o rastreamento de mãos pode usar a posição exata dos dedos, geralmente o que a câmera do headset vê.

Fonte de Dados de Rastreamento de Mãos do Controlador

Ativar isso significa que o rastreamento de mãos pode usar o próprio controle e inferir onde os dedos estão com base nas entradas do controle ou nos sensores do controle.

Perfil de Interação de Mãos

A ativação desta extensão permite o uso de duas novas poses de rastreamento de mãos. Pose de pinça (pinch pose), que é a localização entre o polegar e o dedo indicador apontando para a frente, e pose de cutucar (poke pose), que fica na ponta do dedo indicador.

Isso também permite mais 3 entradas baseadas em gestos. Pinça (pinch), quando o usuário pinça o polegar e o dedo indicador juntos. Ativação de mira (aim activation), quando o dedo indicador está totalmente estendido. E segurar (grasps), quando o usuário faz um punho.

Quando um perfil de interação de mão e um perfil de interação de controle são fornecidos, o tempo de execução alternará entre os perfis dependendo se o rastreamento óptico é usado ou se o usuário está segurando um controle.

Se apenas um perfil de interação de mão for fornecido, qualquer tempo de execução deverá usar a interação de mão, mesmo que um controle esteja sendo segurado.

Entidades Espaciais

Esta extensão e suas configurações são usadas para obter e interagir com informações sobre o ambiente do mundo real do usuário. Você pode encontrar informações mais detalhadas sobre como funciona na página de entidades espaciais.

Interação por Olhar (Eye Gaze)

Isso ativa a extensão de interação por olhar fixo (eye gaze interaction) quando suportada pelo dispositivo usado. Quando ativada, receberemos feedback do rastreamento ocular por meio de uma pose situada entre os olhos do usuário, orientada na direção para a qual o usuário está olhando. Esta será uma orientação unificada.

Para usar esta funcionalidade, você precisa editar seu mapa de ações e adicionar uma nova ação de pose, por exemplo, eye_pose. Agora adicione um novo perfil de interação para a interação por olhar fixo e mapeie a eye_pose:

../../_images/openxr_eye_gaze_interaction.webp

Não se esqueça de salvar!

Em seguida, adicione um novo nó XRController3D ao seu nó de origem, defina sua propriedade tracker para /user/eyes_ext e defina sua propriedade pose para eye_pose.

Agora você pode adicionar coisas a este nó de controle, como um raycast, e controlar as coisas com seus olhos.

Modelos de Renderização

Esta extensão é usada para consultar o tempo de execução do XR por ativos 3D do hardware que está sendo usado, geralmente um controle, bem como a posição desse hardware. Você pode encontrar um guia detalhado sobre como usá-lo aqui.

Modificadores de Vinculação

Estes controlam se os modificadores de vinculação (binding modifiers) podem ou não ser usados. Os modificadores de vinculação são usados para aplicar limites ou valores de deslocamento (offset). Você pode encontrar informações sobre como usá-los e configurá-los na página do mapa de ações de XR aqui.

Limite Analógico

Permitir modificadores de vinculação de limiar analógico (analog threshold).

Vinculação de D-pad

Permitir modificadores de vinculação de D-pad.