- Évitez d’utiliser des shaders any-hit et d’intersection, sauf si vous en avez réellement besoin. Lorsqu’ils sont utilisés, ces deux types de shaders augmentent considérablement 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écursivité 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 depuis la mémoire au retour de TraceRay.
- Si possible, évitez de placer TraceRay dans des boucles for et des expressions imbriquées : le meilleur emplacement est la portée de fonction du Ray Generation Shader. 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 shaders combinés dans un RTPSO doivent s’exécuter avec l’« occupation du pire cas », car ils partagent les allocations de VGPR. Préférez utiliser des RTPSO distincts pour les différents effets de raytracing. Si le nombre de VGPR des RTPSO reste élevé, envisagez de forcer le compilateur de shaders à déverser (spill) les registres au-delà d’une limite définie en utilisant
#define __XBOX_MAX_VGPR_COUNT {REGISTER COUNT}dans vos shaders de raytracing. Cela échange une dégradation 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 raytracing, le bilan peut être positif. Essayez des multiples de 8 inférieurs à votre nombre total de VGPR et profilez les variations de performances. - XDXR n’effectue actuellement pas l’inlining des petites tables de liaison de shaders. Si la logique d’ombrage anyhit/closest hit est simple, comme pour l’AO ou les ombres, préférez utiliser le parcours autonome XDXR pour améliorer les performances et l’occupation.
- Le pilote XDXR alloue de la mémoire de support pour le parcours de style
TraceRay()de DXR 1.0. Si votre titre utilise uniquement le raytracing inline, vous pouvez souhaiter récupérer cette mémoire. Depuis juin 2022, elle représente 12 Mo sur XBOX Series S et 32 Mo sur XBOX Series X. Pour désactiver cette mémoire, un titre doit spécifierD3D12_GPU_VIRTUAL_ADDRESS_UNKNOWNpourpDXRStackBufferet spécifier une taille de0pourDXRStackBufferOverrideSizeBytesdans D3D12XBOX_CREATE_DEVICE_PARAMETERS. - La version en en-tête inline de XDXR inclut le mécanisme InlineAHS() pour améliorer les performances anyhit ; privilégiez-le dans la mesure du possible afin de simplifier le flux de parcours.
- Suivez les bonnes pratiques générales du raytracing pour réduire au minimum le chevauchement des boîtes englobantes dans les constructions de BVH. Lorsque des modifications du contenu sont impossibles, envisagez d’utiliser la fonctionnalité TAPU décrite dans Constructeurs de BVH XDXR.
- Évitez les triangles longs et fins dans la géométrie. Ils produisent des boîtes englobantes comportant beaucoup d’espace vide. Le constructeur hors ligne peut diviser les triangles en plusieurs boîtes englobantes ; toutefois, des modifications du contenu peuvent rester préférables et sont nécessaires pour le constructeur d’exécution.
- Les problèmes de contenu peuvent entraîner une grave dégradation des performances du raytracing. 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 raytracing. Consultez Visionneuse de BVH 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_HINTaux indicateurs de rayon de votreTraceRay()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 nettement améliorées sur certains contenus. Les indicateurs de rayon et le pointeur de TLAS doivent être uniformes pour activer ce type de parcours. PourTraceRayInline(), l’en-tête équivalent estXDXRStandaloneTraverseHT.hlsli.
Bonnes pratiques et recommandations XDXR
Bonnes pratiques et recommandations XDXR
XBOX DXR (XDXR) est disponible depuis un certain temps déjà, mais nous continuons d’étendre et d’améliorer notre prise en charge du raytracing sur les consoles XBOX Series X|S. Continuez à consulter cette page pour obtenir de nouveaux conseils, ainsi que les présentations ATG hébergées sur https://aka.ms/gdkdl.
Dernière modification le 6 octobre 2026
Sujets connexes
Lancer de rayons sur XBOX Series X|S avec XDXRBonnes pratiques et recommandations pour les expériencesNotions de base et bonnes pratiques de connexionBonnes pratiques InsightsBonnes pratiques et tests des gamertags modernes