Melhores práticas da aplicação OpenXR
Pode ver um exemplo das melhores práticas abaixo no ficheiro OpenXRProgram.cpp do BasicXrApp. A função Executar() no início captura um fluxo de código de aplicação OpenXR típico da inicialização para o ciclo de composição e evento.
Melhores práticas para a qualidade e estabilidade dos elementos visuais
As melhores práticas nesta secção descrevem como obter a melhor qualidade visual e estabilidade em qualquer aplicação OpenXR.
Para obter mais recomendações de desempenho específicas para HoloLens 2, veja a secção Melhores práticas de desempenho no HoloLens 2 abaixo.
Composição gama correta
Tem de ter cuidado para garantir que o pipeline de composição está correto em gama. Ao compor para um swapchain, o formato de vista render-target deve corresponder ao formato swapchain. Por exemplo, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
tanto para o formato swapchain como para a vista render-target.
Existe uma exceção se o pipeline de composição da aplicação fizer uma conversão sRGB manual no código shader. A aplicação deve pedir um formato de swapchain sRGB, mas utilizar o formato linear para a vista render-target. Por exemplo, peça DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
como formato swapchain, mas utilize DXGI_FORMAT_B8G8R8A8_UNORM
como a vista render-target para impedir que o conteúdo seja corrigido de gama dupla.
Submeter memória intermédia de profundidade para camadas de projeção
Utilize XR_KHR_composition_layer_depth
sempre a extensão e submeta a memória intermédia de profundidade juntamente com a camada de projeção ao submeter uma moldura para xrEndFrame
.
Ativar a reprojeção de profundidade do hardware no HoloLens 2 melhora a estabilidade do holograma.
Escolher um intervalo de profundidade razoável
Prefere um intervalo de profundidade mais estreito para definir o âmbito do conteúdo virtual para ajudar a estabilidade do holograma no HoloLens.
Por exemplo, o exemplo OpenXrProgram.cpp está a utilizar 0,1 metros a 20 metros.
Utilize reversed-Z para uma resolução de profundidade mais uniforme.
No HoloLens 2, a utilização do formato de profundidade preferencial DXGI_FORMAT_D16_UNORM
ajudará a alcançar uma melhor taxa de fotogramas e desempenho, embora as memórias intermédias de profundidade de 16 bits forneçam menos resolução de profundidade do que as memórias intermédias de profundidade de 24 bits.
Seguir estas melhores práticas para utilizar melhor a resolução de profundidade torna-se mais importante.
Preparar para diferentes modos de mistura de ambiente
Se a sua aplicação também for executada em headsets envolventes que bloqueiam completamente o mundo, certifique-se de que enumera os modos de mistura de ambiente suportados com xrEnumerateEnvironmentBlendModes
a API e prepare o conteúdo de composição corretamente.
Por exemplo, para um sistema com XR_ENVIRONMENT_BLEND_MODE_ADDITIVE
o HoloLens, a aplicação deve utilizar transparente como a cor clara, enquanto para um sistema com XR_ENVIRONMENT_BLEND_MODE_OPAQUE
, a aplicação deve compor alguma cor opaca ou alguma sala virtual em segundo plano.
Escolher espaço de referência não vinculado como espaço de raiz da aplicação
Normalmente, as aplicações estabelecem algum espaço de coordenadas do mundo raiz para ligar vistas, ações e hologramas.
Utilize XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT
quando a extensão é suportada para estabelecer um sistema de coordenadas à escala mundial, permitindo que a sua aplicação evite um holograma indesejável quando o utilizador se desloca para longe (por exemplo, a 5 metros de distância) de onde a aplicação é iniciada.
Utilize XR_REFERENCE_SPACE_TYPE_LOCAL
como contingência se a extensão de espaço não vinculada não existir.
Associar holograma a âncora espacial
Ao utilizar um espaço de referência não vinculado, os hologramas que colocar diretamente nesse espaço de referência podem derivar à medida que o utilizador caminha para salas distantes e, em seguida, volta.
Para os utilizadores de hologramas colocados numa localização discreta no mundo, crie uma âncora espacial com a xrCreateSpatialAnchorSpaceMSFT
função de extensão e posicione o holograma na sua origem. Isso manterá o holograma estável independentemente ao longo do tempo.
Suportar a captura de realidade mista
Embora o ecrã principal da HoloLens 2 utilize a mistura de ambientes aditivos, quando o utilizador iniciar a captura de realidade mista, o conteúdo de composição da aplicação será misturado alfa com o fluxo de vídeo do ambiente.
Para obter a melhor qualidade visual em vídeos de captura de realidade mista, é melhor definir o XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT
na camada de layerFlags
projeção .
Melhores práticas para o desempenho no HoloLens 2
Como um dispositivo móvel com suporte de reprojeção de hardware, HoloLens 2 tem requisitos mais rigorosos para um desempenho ideal. Existem várias formas de submeter dados de composição, o que resulta no pós-processamento com uma penalização de desempenho notável.
Selecionar um formato de swapchain
Enumere sempre formatos de pixel suportados com xrEnumerateSwapchainFormats
e escolha o primeiro formato de pixel de cor e profundidade do runtime suportado pela aplicação, uma vez que é o que o runtime prefere para um desempenho ideal. Tenha em atenção que, no HoloLens 2, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
e DXGI_FORMAT_D16_UNORM
é normalmente a primeira opção para alcançar um melhor desempenho de composição. Esta preferência pode ser diferente nos auscultadores VR em execução num PC de Ambiente de Trabalho, onde as memórias intermédias de profundidade de 24 bits têm menos impacto no desempenho.
Aviso de Desempenho: A utilização de um formato diferente do formato de cor de swapchain principal resultará no pós-processamento do runtime, que ocorre numa penalização de desempenho significativa.
Compor com parâmetros de composição recomendados e temporização da moldura
Compor sempre com a largura/altura da configuração da vista recomendada (recommendedImageRectWidth
e recommendedImageRectHeight
de ), e utilizar xrLocateViews
sempre a API para consultar a pose de vista recomendada, FOV e outros parâmetros de composição antes da XrViewConfigurationView
composição.
Utilize sempre a XrFrameEndInfo.predictedDisplayTime
da chamada mais recente xrWaitFrame
ao consultar poses e vistas.
Isto permite ao HoloLens ajustar a composição e otimizar a qualidade visual da pessoa que está a usar o HoloLens.
Utilizar uma única camada de projeção
HoloLens 2 tem uma potência de GPU limitada para compor conteúdo e um compositor de hardware otimizado para uma única camada de projeção. Utilizar sempre uma única camada de projeção pode ajudar a taxa de fotogramas, a estabilidade do holograma e a qualidade visual da aplicação.
Aviso de Desempenho: Submeter tudo menos uma única camada de proteção resultará no pós-processamento do runtime, que ocorre numa penalização de desempenho significativa.
Compor com matriz de textura e VPRT
Crie um xrSwapchain
para o olho esquerdo e direito utilizando arraySize=2
para swapchain de cor e outro para profundidade.
Transforme o olho esquerdo na fatia 0 e o olho direito na seta 1.
Utilize um sombreado com VPRT e chamadas de desenho instâncias para composição estereoscópica para minimizar a carga da GPU.
Isto também permite a otimização do runtime para obter o melhor desempenho em HoloLens 2.
As alternativas à utilização de uma matriz de textura, como a composição de duas larguras ou uma swapchain separada por olho, resultarão no pós-processamento do runtime, que ocorre numa penalização de desempenho significativa.
Evitar camadas quad
Em vez de submeter camadas quad como camadas de composição com XrCompositionLayerQuad
, componione o conteúdo quad diretamente no swapchain de projeção.
Aviso de Desempenho: Fornecer camadas adicionais para além de uma única camada de projeção, como camadas quádruplas, resultará no pós-processamento do runtime, que ocorre numa penalização de desempenho significativa.