Skip to main content
Com o lançamento dos consoles XBOX Series, o ray tracing está se tornando mais comum e, com ele, a geração offline de estruturas de BVH para ativos de jogos. Esses ativos podem ser grandes e consumir muito espaço em disco, o que pode levar os jogos a cortar conteúdo em outras áreas para caber nos limites dos discos de mídia física. Para ajudar a reduzir o impacto, desenvolvemos uma tecnologia direcionada de compactação de BVH que pode reduzir significativamente o tamanho total das suas BVHs em disco, mantendo uma velocidade de descompactação rápida em runtime. Essa tecnologia estará disponível a partir do GDK de março de 2022. Em nossos testes, observamos taxas de compactação entre 3,5x e 6,6x, dependendo do tamanho da BVH original.

Considerações

Há algumas ressalvas sobre o uso do compactador de BVH que você deve considerar antes de usá-lo:
  1. Atualmente, a compactação de BVH só tem suporte no construtor de BVH offline
  2. A compactação de BVH afeta apenas o tamanho dos dados em disco, não quando descompactados na memória
  3. A estrutura de BVH compactada deve ser descompactada em runtime pela CPU antes de poder ser usada

Compactação offline de BVH

Criar uma estrutura de BVH compactada pode ser feito facilmente usando o driver de PC do Scarlett normalmente utilizado, mas fornecendo um novo flag na chamada CopyRaytracingAccelerationStructure, que serializará e compactará a estrutura de BVH, deixando-a pronta para ser salva em disco. O flag é D3D12XBOX_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_SERIALIZE_AND_COMPRESS. Observação: a estrutura de BVH compactada ainda pode ser compactada usando a compactação ZLIB padrão para reduzir ainda mais o tamanho total.

Descompactação de BVH em runtime

Para descompactar a estrutura de BVH em runtime, você precisa usar a biblioteca “XG”. Atualmente, o processo de descompactação é executado apenas na CPU e em um único thread. Você pode criar e usar facilmente o descompactador, conforme mostrado neste código de exemplo:
Se precisar validar se uma estrutura de BVH carregada está compactada, você pode usar a chamada a seguir, passando os flags do cabeçalho da estrutura de BVH:
Observação: o descompactador é rápido, mas o SSD NVMe dos consoles XBOX Series pode transmitir dados para o seu jogo mais rapidamente do que a CPU consegue descompactá-los. Se você perceber que a descompactação durante o carregamento é um gargalo, considere usar vários threads de descompactação distribuídos por vários núcleos físicos da CPU.

Exemplo do ATG do XBOX

Atualizamos recentemente o exemplo de gráficos OfflineRT para demonstrar a criação offline e a descompactação em runtime de estruturas de BVH. Certifique-se de ter a versão mais recente, disponível aqui, que inclui essas alterações.
Last modified on October 6, 2026