Skip to main content
XBOX DXR (XDXR) est disponible depuis un certain temps déjà; toutefois, nous continuons d’étendre et d’améliorer notre prise en charge du lancer de rayons sur les consoles XBOX Series X|S. Continuez de consulter les nouveaux conseils publiés ici et dans les présentations de l’ATG hébergées à https://aka.ms/gdkdl.
  • Évitez d’utiliser des nuanceurs any-hit et d’intersection, sauf si vous en avez vraiment besoin. Lorsqu’ils sont utilisés, ces deux types de nuanceurs augmentent massivement le coût du parcours et de la planification. C’est un domaine sur lequel nous concentrerons nos efforts d’optimisation dans les futures versions du Microsoft Game Development Kit (GDK).
  • Évitez la récursion au-delà du niveau 1. Elle augmente la pression sur la pile et réduit donc le nombre de rayons simultanés en cours de traitement.
  • Essayez de réduire le nombre de variables actives qui traversent le site d’appel de TraceRay. Ces variables doivent être écrites en mémoire avant l’exécution de TraceRay, puis restaurées à partir de la mémoire lorsque TraceRay retourne.
  • Évitez si possible de placer TraceRay dans des boucles for et des expressions imbriquées; le meilleur endroit pour ces appels est la portée de la fonction du nuanceur de génération de rayons. Placer TraceRay dans un flux complexe augmente la taille du code et réduit le taux de réussite du cache d’instructions (I$).
  • Les nuanceurs combinés dans un RTPSO doivent s’exécuter avec l’« occupation du pire cas » en raison du partage des allocations de VGPR. Privilégiez des RTPSO distincts pour différents effets de lancer de rayons. Si le nombre de VGPR des RTPSO reste élevé, envisagez de forcer le compilateur de nuanceurs à déverser les registres au-delà d’une limite définie en utilisant #define __XBOX_MAX_VGPR_COUNT {REGISTER COUNT} dans vos nuanceurs de lancer de rayons. Cela troque une baisse des performances d’ombrage due au déversement en mémoire contre de meilleures performances de parcours grâce à une occupation plus élevée. Comme le parcours représente souvent une grande partie du temps de lancer de rayons, cela peut constituer un gain net. Essayez de définir cette valeur sur des multiples de 8 inférieurs à votre nombre total de VGPR et profilez les changements de performances.
  • XDXR n’effectue actuellement pas l’intégration en ligne des petites tables de liaison de nuanceurs. Si la logique d’ombrage anyhit/closest hit est simple, comme pour l’AO ou les ombres, privilégiez le parcours autonome XDXR pour améliorer les performances et l’occupation.
  • Le pilote XDXR alloue de la mémoire de stockage pour le parcours de style TraceRay() de DXR 1.0. Si votre titre utilise uniquement le lancer de rayons en ligne, vous pourriez vouloir récupérer cette mémoire. En date de juin 2022, il s’agit de 12 Mo sur XBOX Series S et de 32 Mo sur XBOX Series X. Pour désactiver cette mémoire, un titre doit spécifier D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN pour pDXRStackBuffer et spécifier une taille de 0 pour DXRStackBufferOverrideSizeBytes dans D3D12XBOX_CREATE_DEVICE_PARAMETERS.
  • La version à en-tête en ligne de XDXR comprend le mécanisme InlineAHS() pour améliorer les performances anyhit; privilégiez-le dans la mesure du possible pour simplifier le flux de parcours.
  • Suivez les pratiques exemplaires générales du lancer de rayons pour réduire au minimum le chevauchement des boîtes englobantes dans les constructions de BVH. Lorsque des modifications de contenu sont impossibles, envisagez d’utiliser la fonctionnalité TAPU décrite dans Générateurs de BVH XDXR.
  • Évitez les triangles longs et minces dans la géométrie. Ils produisent des boîtes englobantes comportant de grandes quantités d’espace vide. Le générateur hors ligne peut diviser les triangles en plusieurs boîtes englobantes; toutefois, des modifications de contenu peuvent tout de même être préférables et sont requises pour le générateur à l’exécution.
  • Les problèmes de contenu peuvent entraîner une grave dégradation des performances du lancer de rayons. La visionneuse de BVH de PIX peut afficher une carte thermique des zones coûteuses lorsque vous sélectionnez une ressource BVH utilisée dans un appel Dispatch ou DispatchRays. PIX peut également afficher une vue filtrable et codée par couleur des rayons lancés pendant les événements de lancer de rayons. Consultez Visionneuse de BVH de PIX.
  • Utilisez les extensions XDXR_* mentionnées dans XDXR (XBOX DXR) (détails d’implémentation) pour interroger l’état du parcours sans augmenter la taille de la charge utile.
  • Envisagez d’ajouter XBOX_RAY_FLAG_COHERENT_RAYS_HINT aux indicateurs de rayon de votre TraceRay() DXR 1.0 pour les charges de travail très cohérentes, comme les ombres ou les réflexions non brillantes. Cet indicateur active un nouveau type de parcours optimisé pour ces charges de travail, qui peut offrir des performances considérablement améliorées pour certains contenus. Les indicateurs de rayon et le pointeur de TLAS doivent être uniformes pour activer ce type de parcours. Pour TraceRayInline(), l’en-tête équivalent est XDXRStandaloneTraverseHT.hlsli.

Voir aussi

Vue d’ensemble du lancer de rayons
Last modified on October 6, 2026