> ## 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.

# Compression de BVH

> Compression de BVH

Avec le lancement des consoles XBOX Series, le lancer de rayons devient de plus en plus courant, et avec lui la génération hors ligne de structures BVH pour les ressources de jeu. Ces ressources peuvent être volumineuses et occuper beaucoup d'espace disque, ce qui peut obliger les jeux à supprimer du contenu ailleurs pour tenir dans les limites des disques physiques.

Pour aider à réduire cet impact, nous avons développé une technologie ciblée de compression de BVH qui peut réduire considérablement la taille globale de vos BVH sur disque tout en offrant une vitesse de décompression élevée à l'exécution. Cette technologie sera disponible à partir du GDK de mars 2022.

Lors de nos tests, nous avons observé des taux de compression compris entre **3,5x et 6,6x**, selon la taille du BVH d'origine.

## Points à prendre en compte

<Note>
  Il existe quelques restrictions liées à l'utilisation du compresseur de BVH que vous devez prendre en compte avant de l'utiliser :
</Note>

1. La compression de BVH n'est actuellement prise en charge que dans le générateur de BVH hors ligne
2. La compression de BVH affecte **uniquement** la taille des données sur disque, et non une fois décompressées en mémoire
3. La structure BVH compressée doit être décompressée à l'exécution par le processeur avant de pouvoir être utilisée

## Compression de BVH hors ligne

Il est facile de créer une structure BVH compressée à l'aide du pilote PC Scarlett habituellement utilisé, en fournissant simplement un nouvel indicateur dans l'appel *CopyRaytracingAccelerationStructure*, qui sérialisera et compressera la structure BVH afin qu'elle soit prête à être enregistrée sur disque.

L'indicateur est **D3D12XBOX\_RAYTRACING\_ACCELERATION\_STRUCTURE\_COPY\_MODE\_SERIALIZE\_AND\_COMPRESS**.

**Remarque :** la structure BVH compressée peut encore être compressée à l'aide de la compression ZLIB standard pour réduire davantage la taille globale.

## Décompression de BVH à l'exécution

Pour décompresser la structure BVH à l'exécution, vous devez utiliser la bibliothèque « XG ».  Le processus de décompression s'exécute actuellement uniquement sur le processeur et sur un seul thread.  Vous pouvez facilement créer et utiliser le décompresseur, comme illustré dans cet exemple de code :

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

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

Si vous devez vérifier qu'une structure BVH chargée est compressée, vous pouvez utiliser l'appel suivant, en transmettant les indicateurs de l'en-tête de la structure BVH :

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

**Remarque :** le décompresseur est rapide, mais le SSD NVMe des consoles XBOX Series peut transmettre les données à votre jeu plus rapidement que le processeur ne peut les décompresser.  Si vous constatez que la décompression au moment du chargement constitue un goulot d'étranglement, envisagez d'utiliser plusieurs threads de décompression répartis sur plusieurs cœurs physiques du processeur.

## Exemple XBOX ATG

Nous avons récemment mis à jour l'exemple graphique [OfflineRT](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/development-downloads/gdk-samples-list#graphics) afin de montrer la création hors ligne et la décompression à l'exécution de structures BVH. Assurez-vous de disposer de la dernière version, disponible [ici](https://aka.ms/gdkdl), qui inclut ces modifications.


## Related topics

- [Lancer de rayons sur XBOX Series X|S avec XDXR](/fr/build/core-features/graphics/newfeatures/raytracing/index.md)
- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr/nda/nda-topic-directory.md)
- [L'architecture audio de XBOX One](/fr/build/console-features/audio/overviews/xbox-one-audio-architecture.md)
- [HCCompressionLevel](/fr/reference/live/httpclient/httpclient/enums/hccompressionlevel.md)
- [HCHttpCallRequestEnableGzipCompression](/fr/reference/live/httpclient/httpclient/functions/hchttpcallrequestenablegzipcompression.md)
