Skip to main content
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

Il existe quelques restrictions liées à l’utilisation du compresseur de BVH que vous devez prendre en compte avant de l’utiliser :
  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 :
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 :
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 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, qui inclut ces modifications.
Last modified on October 6, 2026