Devido aos exigentes requisitos de renderização que XR (realidade estendida) exige, várias otimizações de desempenho e novos modos de renderização específicos foram introduzidos na Unreal Engine (UE). No documento a seguir, daremos uma olhada nessas funcionalidades e como usá-las nos seus projetos de XR na UE.
Sombreamento de taxa variável e renderização foveada fixa
O sombreamento de taxa variável (VRS) é um funcionalidade suportada por GPUs recentes que fornece vários métodos para ajustar a taxa de sombreamento de pixels em um ou mais alvos de renderização. A taxa de sombreamento padrão em qualquer configuração é 1:1, em que 1 invocação de pixel-shader se aplica a 1 pixel alvo na tela. Com o VRS, você pode especificar taxas de sombreamento alternativas, especificamente 1x2, 2x1, 2x2, 2x4, 4x2 e 4x4. Por exemplo, para taxa de sombreamento 2x2, você verá uma única chamada de shader de pixel para um grupo de 2x2 pixels (4 pixels). Para 4x4, você verá uma única chamada de shader de pixel para um grupo 4x4 (16 pixels).
A taxa de sombreamento pode ser aplicada individualmente por material ou por meio de um anexo de imagem de taxa de sombreamento (via Tier 2 VRS).
Renderização foveada fixa (FFR) é uma técnica que pode usar VRS baseado em imagem em dispositivos de RV para ajustar a taxa de sombreamento de um alvo, reduzindo a taxa de sombreamento na periferia da visualização. Devido à distorção ótica, a GPU acaba jogando fora cada vez mais detalhes de pixels nas bordas da imagem. Portanto, ao aplicar uma imagem VRS que reduz a taxa de sombreamento mais distante do centro da imagem, você pode melhorar o desempenho com pouca degradação perceptiva na qualidade da imagem.
A foveação fixa usa um anexo gerado pelo shader de computação:
As áreas centrais (pretas) nos dois lados correspondem ao centro de cada visualização estéreo; as áreas mais escuras têm taxas de sombreamento mais altas, com a cor preta sendo cheia (1x1, 1 chamada de shader de pixel por pixel), vermelho escuro na metade da taxa em x e y (2x2, chamada de shader de 1 pixel por 4 pixels) e vermelho mais claro (4x4, invocação de shader de 1 pixel por 16 pixels).
Os resultados iniciais com anexos VRS aplicados à etapa base e etapas de transparência são bastante promissores. No momento, isso ainda é uma prova de conceito e poderia ser aplicado em outras etapas além das etapas de base e de transparência.
Configurações de projeto
Para acessar as configurações de VRS, no menu principal, acesse Editar > Configurações de Projeto. Em seguida, na janela de Configurações de Projeto, vá para Engine > Renderização > RV.
Variáveis de console
Você pode usar as seguintes variáveis de console:
| Variável | Descrição |
|---|---|
r.vrs.Enable | Habilita ou desabilita o VRS na engine (VRS baseado em material e qualquer VRS ativo com base em imagem). |
r.VRS.EnableImage | Habilita ou desabilita apenas o VRS baseado em imagem. O VRS por material ainda funcionará se estiver habilitado e for suportado. |
vr.VRS.HMDFixedFoveationLevel | Configuração de desempenho e de qualidade de renderização foveada fixa de CVR |
vr.VRS.HMDFixedFoveationDynamic | Habilita ou desabilita o ajuste do nível de foveação fixa com base no uso da GPU. |
Limitações conhecidas
Disponível apenas em dispositivos Windows com suporte para DirectX 12 e VRS Tier 2, dispositivos Windows com suporte para Vulkan e extensão VK_KHR_fragment_shading_rate e Oculus Quest.
Não é compatível com o DLSS da NVIDIA.
No momento, não há suporte para a renderização foveada de rastreamento de olhos.
Estéreo Instanciado
A renderização estéreo instanciada diminui o impacto do XR no desempenho na UE. Para habilitar essa funcionalidade, vá até Configurações de Projeto > Engine > Renderização > Estéreo Instanciado e selecione a opção Estéreo Instanciado.
Após a renderização estéreo instanciada ser habilitada, será necessário reiniciar a engine e recompilar o shader. A etapa básica e a etapa early-z funcionam com malhas estáticas, malhas esqueléticas, partículas de srite e partículas de malha com a funcionalidade ativada (caminhos de renderização serial e paralelo). Estéreo Instanciado atualmente funciona em PC (DirectX) e PS4, com suporte para outras plataformas após o lançamento inicial 4.11. Este vídeo mostra a renderização estéreo padrão em RV versus a renderização estéreo instanciada em RV.
Suporte para Multiview em dispositivos móveis
Determinados dispositivos móveis (suportados) agora são compatíveis com Multiview de RV. O Mobile Multiview é semelhante à renderização estéreo instanciada disponível para PCs desktop e funciona fornecendo um caminho otimizado para renderização estéreo na CPU do dispositivo móvel. Para habilitar essa funcionalidade, você precisará fazer o seguinte:
Na barra de ferramentas principal, vá para Editar > Configurações de Projeto para abrir as configurações do projeto do Editor.
Em seguida, vá para Engine > Renderização > RV e procure a opção Mobile Multiview.
Habilite a opção Mobile Multiview e reinicie a Unreal Engine para que as alterações entrem em vigor.
Mobile Multiview só funciona com GPUs modernas baseadas em Mali.
Essa funcionalidade será desabilitada em tempo de execução se você empacotar este projeto, mas não tiver uma GPU compatível.
Renderização direta
By default, Unreal Engine uses a Deferred Renderer as it provides the most versatility and grants access to more rendering features. However, there are some trade-offs in using the Deferred Renderer that might not be right for all VR experiences. Forward Rendering provides a faster baseline, with faster rendering passes, which may lead to better performance on VR platforms. Not only is Forward Rendering faster, it also provides better anti-aliasing options than the Deferred Renderer, which may lead to better visuals.
Confira a documentação do Forward Shading Renderer para obter mais informações sobre essa funcionalidade.
Perfilamento de desempenho
Para rastrear ativos que são muito caros para RV, você precisa analisar o que o projeto está fazendo na CPU e na GPU o máximo possível durante o tempo de vida do projeto.
Perfilamento de GPU: para ativar o gerador de perfil de GPU, basta pressionar CTRL + SHIFT + , (tecla vírgula) ao mesmo tempo, enquanto executa o projeto. Depois que as teclas forem pressionadas, você verá uma nova janela semelhante à imagem abaixo.
Gerador de perfil de CPU — analisar o que seu projeto está fazendo na CPU é um pouco mais complexo do que analisar a GPU. Para saber mais sobre como fazer isso, consulte os documentos sobre o gerador de perfil de desempenho.
Configurações de pós-processamento
Devido aos exigentes requisitos de renderização da RV, muitas das funcionalidades avançadas de pós-processamento habilitadas por padrão devem ser desabilitadas, ou seu projeto poderá sofrer problemas de desempenho. Para fazer isso no projeto, siga estas etapas.
1. Adicione um volume de pós-processamento (PP) ao seu nível se ainda não houver um. 1. Selecione o volume PP e, na seção Volume de pós-processamento, habilite a opção Extensão infinita (sem limite) para que as configurações no volume PP sejam aplicadas a todo o nível.
![Habilite a opção de sem limite para o volume de pós-processamento(enable-unbound-post-process-volume.png)
1. Expanda Configurações do Volume de pós-processamento e confira cada seção para desabilitar configurações de todo PP ativo habilitando essa propriedade; clique nele e defina o valor padrão (geralmente 1.0) como 0, desabilitando a funcionalidade.
Ao fazer isso, você não precisará atingir todas as seções e definir todas as propriedades como 0. Em vez disso, desabilite primeiro as funcionalidades mais pesadas, como reflexo de lente, reflexos do espaço de tela, antisserrilhado temporal, SSAO, bloom e qualquer outro item que possa afetar o desempenho.