Criando experiências de VR imersivas e fotorrealistas com o High Definition Render Pipeline

SEBASTIEN LACHAMBRE / UNITY TECHNOLOGIESSenior Technical Artist
Mar 12, 2020|7 Min
Criando experiências de VR imersivas e fotorrealistas com o High Definition Render Pipeline
Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

Estamos oficialmente trazendo a realidade virtual para o High Definition Render Pipeline (HDRP). Na versão 2019.3.6f1 e posteriores com a versão do pacote 7.3.1, o HDRP agora está verificado e pode ser usado em VR.

Este post no blog faz uma análise técnica sobre o uso do HDRP em seu projeto de VR. Para saber mais sobre todas as possibilidades que o HDRP oferece, dê uma olhada neste post do blog.

VR no HDRP é projetado para que:

Todos os recursos do HDRP são compatíveis com VR.

O HDRP é totalmente suportado com o novo Unity XR Plugin Framework.

O modo de passagem única (instancing) é a solução de renderização padrão e recomendada para VR.

Destaques de recursos

Usando o HDRP para um projeto de VR, você pode aproveitar todos os recursos do pipeline de renderização para criar experiências limitadas apenas pela sua imaginação. Com suas técnicas de renderização de ponta, o HDRP pode oferecer visuais impressionantes e fotorrealistas em uma qualidade raramente vista antes em ambientes de realidade virtual.

Aqui está uma visão geral muito rápida dos recursos disponíveis para seus projetos de VR:

  • Renderização Deferred e Forward
  • Todos os tipos de luz, sombras, decalques e volumétricos
  • Efeitos de espaço de tela
  • Oclusão Ambiental (AO)
  • Reflexão em Espaço de Tela (SSR)
  • Dispersão Subsurface (SSS)
  • Distorção e Refração
  • Pós-processamento
  • Correção de Cor, Anti-aliasing, Profundidade de Campo, etc.
  • Todos os VFXs do Visual Effect Graph
Plataformas suportadas

VR para HDRP está atualmente disponível para as seguintes plataformas e dispositivos:

  • Oculus Rift & Rift S (Oculus XR Plugin, Windows 10, DirectX 11)
  • Windows Mixed Reality (Windows XR Plugin, Windows 10, DirectX 11)
  • PlayStationVR

OpenVR: A Valve está atualmente desenvolvendo seu OpenVR Unity XR Plugin para 2019.3 e além, e isso estará disponível em breve.

Técnicas de renderização estereoscópica

Uma implementação nativa de VR processará tudo duas vezes – uma vez para cada olho. Chamamos essa solução de renderização multipass. HDRP suporta renderização multipass, no entanto, não recomendamos esse método porque sua aplicação usará o dobro da potência da CPU para renderização, essencialmente dobrando seu número de chamadas de desenho. Além disso, as sombras serão renderizadas duas vezes e podem consumir uma parte significativa do seu orçamento de GPU.

Dito isso, há alguns casos em que usar multipass é apropriado:

  • Se seu sistema tiver uma pequena quantidade de memória de GPU, multipass usa menos memória para alvos de renderização do que o single pass.
  • Se por algum motivo você precisar renderizar pontos de vista drasticamente diferentes para cada olho.

Uma solução mais rápida é usar renderização single pass (instanciada). Neste modo, cada chamada de desenho é renderizada simultaneamente para ambos os olhos. Isso é realizado usando um array de texturas para os alvos de renderização e chamadas de desenho instanciadas. Além disso, culling e sombras são processados apenas uma vez por quadro.

HDRP foi projetado para que todos os recursos sejam compatíveis com VR e otimizados para renderização single pass.

A decisão chave de design foi usar um array de texturas para todos os alvos de renderização (mesmo quando você não está criando para VR). Essa decisão, juntamente com macros de shader, nos permitiu criar shaders que são automaticamente compatíveis com VR, além de alguns casos especiais (por exemplo, geração de lista de luzes, sombreamento diferido em tiles indiretos, iluminação volumétrica e renderização relativa à câmera).

Observe que a renderização de passagem única para texturas de largura dupla não é suportada pelo HDRP devido à complexidade adicional e à sobrecarga necessária para todas as passagens e efeitos em tela cheia.

Comece com HDRP VR

Para começar com HDRP VR, consulte a seção Visão Geral do VR na documentação do Unity. Para ajudá-lo a configurar o HDRP com VR, também fornecemos um Assistente HDRP, que valida suas configurações e pode ajudá-lo a corrigir quaisquer configurações que o Assistente identifique como incorretas.

assistente hdrp

Para configurar seu projeto para VR manualmente usando o novo framework de plugin XR, consulte a documentação. Para configurar a renderização de passagem única, você deve ter ambas as Configurações do Projeto definidas para o modo de Renderização Estéreo de Passagem Única e as configurações do ativo HDRP definidas para Passagem Única. O HDRP irá padrão para multipassagem se qualquer uma dessas duas opções não estiver habilitada para passagem única.

configurações xr

Anti-aliasing

Reduzir o aliasing é extremamente importante em VR para criar uma ótima experiência do usuário e evitar quebrar a imersão do ambiente virtual. O HDRP fornece várias soluções para ajudar com anti-aliasing.

Os modos de anti-aliasing da câmera são descritos em detalhes na documentação do Unity. Essas opções incluem:

  • Anti-Aliasing por Multisampling (MSAA) é suportado com renderização para frente. Você pode equilibrar qualidade versus desempenho escolhendo o número de amostras (2x, 4x, 8x). Essa técnica pode alcançar ótimos resultados, mas também pode ser cara.
  • O Anti-Aliasing Temporal é provavelmente a melhor solução para a maioria das aplicações. É muito eficaz na redução de aliasing, mas pode borrar alguns detalhes. Você pode contrabalançar esse desfoque com o controle de filtro de nitidez incluído.
  • Soluções um pouco mais baratas incluem Anti-Aliasing Aproximado Rápido (FXAA) ou Anti-Aliasing Morfológico Subpixel (SMAA).
  • Também é possível combinar MSAA com TAA, FXAA ou SMAA. Essa técnica melhora a qualidade visual, mas o custo é cumulativo.
  • Há também anti-aliasing de sombreamento adicional disponível por material com Anti-Aliasing Especular Geométrico, que você pode ajustar diretamente nos materiais. Seu uso é recomendado para superfícies suaves e densas.

Desempenho

A renderização VR é extremamente exigente devido à maior taxa de atualização e resolução necessárias para exibir para ambos os olhos. Certifique-se de desativar quaisquer recursos que você não precisa nas configurações de ativos HDRP. Recursos como Volumétrico não são adequados para aplicações VR, uma vez que seu desempenho não atende aos 90 fps exigidos, apesar de serem suportados. Monitorar e perfilar o desempenho com frequência ajudará você a identificar quaisquer gargalos em seu projeto.

Observe que, por padrão, a precisão dos efeitos volumétricos (fatias z) em VR será reduzida pela metade para manter o desempenho da GPU mais aceitável. Além de iluminação volumétrica, é altamente recomendável desativar o suporte a Luz de Área HDRP ao fazer um projeto VR. Ao contrário de outros recursos, a Luz de Área deve ser desativada através dos arquivos de configuração de shader.

Existem dois métodos de renderização disponíveis no HDRP, que também impactam o desempenho: Modo de Shader Iluminado Forward e Deferred. Para aprender sobre as diferenças entre esses dois modos, consulte a documentação. Escolher o modo certo para VR depende dos requisitos do projeto. A renderização Forward permite que você ative o MSAA e reduza o uso de memória, enquanto a renderização Deferred é mais eficiente para projetos com um grande número de luzes, mas também consome mais memória.

Outro fator que influencia o desempenho da GPU é a resolução do buffer de renderização. Essa resolução é inicialmente definida pelo plugin de exibição XR e depende do headset que você está usando. Você pode então ajustar a resolução em seu aplicativo ou usar o recurso resolução dinâmica para controlar a resolução dependendo do contexto da cena atual. Por exemplo, a resolução pode ser adaptada com base no tempo de quadro atual da GPU.

Para mais dicas, confira esta palestra de HDRP VR da Unite 2019 Copenhagen.

Mergulho técnico em HDRP VR

Para suportar VR no HDRP, adicionamos um conjunto de macros de shader para ajudar a lidar com a instância de visualização e o uso de arrays de texturas para o alvo de renderização. Por exemplo, você pode declarar uma textura em um shader com o seguinte código:

TEXTURE2D_X(MyTexture);

Em plataformas que suportam arrays de texturas, essa macro será expandida para TEXTURE2D_ARRAY. Se a plataforma não suportar arrays de texturas ou se a configuração em ShaderConfig.cs estiver desativada, a macro será expandida para TEXTURE2D regular. Recursos semelhantes estão disponíveis para amostragem de texturas.

No lado do shader, as constantes de visualização apropriadas (matriz de visualização, matriz de projeção, etc.) são armazenadas no array e indexadas com base no índice do olho, que é derivado do instanceID dos primitivos. No caso de shaders de computação, a dimensão de despacho z é usada para identificar cada olho. A macro UNITY_XR_ASSIGN_VIEW_INDEX é geralmente usada para atribuir o índice de olho apropriado.

O futuro do HDRP VR

Versões futuras do HDRP VR se concentrarão em:

  • Melhorar o desempenho com novas opções de hardware, como Sombreamento de Taxa Variável
  • Melhorar o suporte à plataforma com Vulkan e DX12
  • Melhorar o suporte a dispositivos
  • Estender o passe único para suportar mais de duas visualizações
Deixe-nos saber o que você pensa

Você pode começar a aproveitar o HDRP VR hoje. Adoraríamos ouvir seu feedback no fórum HDRP enquanto continuamos a fazer melhorias.