Skip to main content
Avec le lancement des consoles XBOX Series, le lancer de rayons devient 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 à couper du contenu ailleurs pour respecter 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 le disque, tout en offrant une décompression rapide à l’exécution. Cette technologie sera disponible à partir du GDK de mars 2022. Lors de nos tests, nous avons observé des taux de compression de 3,5 à 6,6 fois, selon la taille du BVH d’origine.

Considérations

Il y a quelques mises en garde à prendre en compte avant d’utiliser le compresseur de BVH :
  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 influe uniquement sur la taille des données sur le 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

On peut facilement créer une structure BVH compressée à l’aide du pilote PC Scarlett habituellement utilisé, en fournissant un nouvel indicateur à l’appel CopyRaytracingAccelerationStructure, qui sérialise et compresse la structure BVH, prête à être enregistrée sur le 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 utilise un seul thread. Vous pouvez facilement créer et utiliser le décompresseur comme le montre cet exemple de code :
Si vous devez vérifier qu’une structure BVH chargée est compressée, vous pouvez utiliser l’appel suivant, en lui transmettant les indicateurs de l’en-tête de la structure BVH :
Remarque : Le décompresseur est rapide, mais le SSD NVMe des consoles XBOX Series peut transmettre des données à votre jeu plus rapidement que le processeur ne peut les décompresser. Si vous constatez que la décompression au chargement constitue un goulot d’étranglement, vous pourriez envisager 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 pour illustrer la création hors ligne et la décompression à l’exécution des structures BVH. Assurez-vous d’avoir la dernière version, disponible ici, qui comprend ces modifications.
Last modified on October 6, 2026