> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Compactação de BVH

> Compactação de BVH

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

<Note>
  Há algumas ressalvas sobre o uso do compactador de BVH que você deve considerar antes de usá-lo:
</Note>

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:

```c++ theme={null}
// Create a BVHComputer for the BVH Decompression
XGBVHComputer* bvhComputer = nullptr;
DX::ThrowIfFailed(XGCreateBVHComputer( &bvhComputer ));

bvhComputer->DecompressBVH(...);
```

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:

```c++ theme={null}
bvhComputer->XdxrBvhIsCompressed(myBVHHeaderFlags)
```

**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](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/development-downloads/gdk-samples-list#graphics) 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](https://aka.ms/gdkdl), que inclui essas alterações.


## Related topics

- [Ray tracing no XBOX Series X|S com XDXR](/pt-BR/build/core-features/graphics/newfeatures/raytracing/index.md)
- [Configuração de HTTP](/pt-BR/services/playfab/sdks/c/http-config.md)
- [A arquitetura de áudio no XBOX One](/pt-BR/build/console-features/audio/overviews/xbox-one-audio-architecture.md)
- [Índice de tópicos sob NDA para desenvolvimento de console com o XBOX GDK](/pt-BR/nda/nda-overview.md)
- [SDK do PlayFab Services - Event Pipeline](/pt-BR/services/playfab/sdks/c/event-pipeline/eventpipeline.md)
