Pular para o conteúdo principal
O XBOX DXR (XDXR) já está disponível há algum tempo, mas continuamos a expandir e aprimorar nosso suporte a raytracing nos consoles XBOX Series X|S. Continue verificando se há novas orientações aqui e nas apresentações do ATG hospedadas em https://aka.ms/gdkdl.
  • Evite usar sombreadores any-hit e de interseção, a menos que você realmente precise deles. Quando usados, ambos os tipos de sombreador aumentam muito o custo de travessia e de agendamento. Essa é uma área em que nos concentraremos para otimização em versões futuras do Microsoft Game Development Kit (GDK).
  • Evite recursão acima do nível 1. Isso aumenta a pressão sobre a pilha e, portanto, reduz o número de raios simultâneos em andamento.
  • Tente reduzir o número de variáveis ativas que atravessam o ponto de chamada de TraceRay. Essas variáveis precisam ser gravadas na memória antes da execução de TraceRay e restauradas da memória quando TraceRay retorna.
  • Se possível, evite colocar TraceRay dentro de loops for e de expressões aninhadas; o melhor lugar para essas chamadas é o escopo da função do sombreador de geração de raios. Colocar TraceRay em um fluxo complexo aumenta o tamanho do código e reduz a taxa de acertos do cache de instruções (I$).
  • Os sombreadores combinados em um RTPSO devem ser executados com a “ocupação do pior caso”, pois compartilham as alocações de VGPR. Prefira usar RTPSOs separados para diferentes efeitos de raytracing. Se a contagem de VGPRs do RTPSO continuar alta, considere forçar o compilador de sombreadores a descarregar registradores além de um limite definido, usando #define __XBOX_MAX_VGPR_COUNT {REGISTER COUNT} nos seus sombreadores de raytracing. Isso troca um desempenho de sombreamento pior, devido ao descarregamento na memória, por um melhor desempenho de travessia, devido à maior ocupação. Como a travessia muitas vezes representa uma grande parte do tempo de raytracing, isso pode ser vantajoso no geral. Tente definir esse valor como múltiplos de 8 abaixo da sua contagem total de VGPRs e crie perfis das alterações de desempenho.
  • Atualmente, o XDXR não realiza o inlining de pequenas tabelas de associação de sombreadores. Se a lógica de sombreamento anyhit/closest hit for simples, como para AO ou sombras, prefira usar a travessia autônoma do XDXR para obter melhorias de desempenho e de ocupação.
  • O driver do XDXR aloca memória de suporte para a travessia no estilo TraceRay() do DXR 1.0. Se o seu título usar apenas raytracing embutido, talvez você queira recuperar essa memória. Em junho de 2022, isso corresponde a 12 MB no XBOX Series S e 32 MB no XBOX Series X. Para desabilitar essa memória, o título deve especificar D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN para pDXRStackBuffer, além de especificar um tamanho de 0 para DXRStackBufferOverrideSizeBytes em D3D12XBOX_CREATE_DEVICE_PARAMETERS.
  • A versão de cabeçalho embutido do XDXR inclui o mecanismo InlineAHS() para melhorar o desempenho de anyhit; prefira-o sempre que possível para simplificar o fluxo de travessia.
  • Siga as práticas recomendadas gerais de raytracing para minimizar a sobreposição de caixas delimitadoras nos builds de BVH. Quando não for possível alterar o conteúdo, considere utilizar o recurso TAPU especificado em Construtores de BVH do XDXR.
  • Evite triângulos longos e finos na geometria. Eles geram caixas delimitadoras com grandes quantidades de espaço vazio. O construtor offline pode dividir triângulos em várias caixas delimitadoras; no entanto, alterações no conteúdo ainda podem ser preferíveis e são necessárias para o construtor em tempo de execução.
  • Problemas de conteúdo podem causar uma degradação grave do desempenho de raytracing. O visualizador de BVH do PIX pode exibir um mapa de calor das áreas custosas ao selecionar qualquer recurso de BVH usado em uma chamada de Dispatch ou DispatchRays. O PIX também pode exibir uma visualização codificada por cores e filtrável dos raios lançados durante eventos de raytracing. Confira Visualizador de BVH do PIX.
  • Use as extensões XDXR_* mencionadas em XDXR (XBOX DXR) (detalhes de implementação) para consultar o estado da travessia sem aumentar o tamanho do payload.
  • Considere adicionar XBOX_RAY_FLAG_COHERENT_RAYS_HINT aos sinalizadores de raio de TraceRay() do DXR 1.0 para cargas de trabalho altamente coerentes, como sombras ou reflexos não brilhantes. Esse sinalizador habilita um novo tipo de travessia otimizado para essas cargas de trabalho e pode proporcionar um desempenho significativamente melhor em alguns conteúdos. Os sinalizadores de raio e o ponteiro da TLAS devem ser uniformes para habilitar esse tipo de travessia. Para TraceRayInline(), o cabeçalho equivalente é XDXRStandaloneTraverseHT.hlsli.

Confira também

Visão geral de raytracing
Última modificação em 6 de outubro de 2026