Passer au contenu principal

Introduction

Chaque structure d’accélération de niveau inférieur (BLAS) possède un AABB stocké à la racine qui englobe l’ensemble de la BLAS. Cet AABB se trouve dans le même espace que la géométrie, c’est-à-dire l’espace objet. Lors de l’insertion d’une instance d’une BLAS dans une structure d’accélération de niveau supérieur (TLAS), les limites de l’instance doivent être déterminées dans l’espace monde. L’approche naïve consiste à transformer les coins de l’AABB en espace objet vers l’espace monde et à former un nouvel AABB. Si la transformation comporte une rotation, cela gonflera l’AABB dans l’espace monde, ce qui augmentera sa surface et entraînera davantage d’intersections faussement positives. L’AABB de référence (vérité terrain) dans l’espace monde nécessiterait de transformer chaque sommet contenu dans la BLAS vers l’espace monde et d’en calculer l’englobant. Ce n’est pas pratique, surtout à l’exécution. Il existe un compromis qui peut améliorer l’ajustement de l’AABB dans l’espace monde sans un coût d’exécution aussi élevé que l’approche de référence. Il nécessite de préconstruire une enveloppe convexe (un treillis de points) qui englobe la BLAS. Plutôt que de faire pivoter un AABB de l’espace objet vers l’espace monde, nous pouvons faire pivoter ce treillis et trouver ses limites dans l’espace monde. Plus le treillis est raffiné, plus l’AABB de l’instance dans l’espace monde peut se rapprocher de la référence.

k-DOP

Un k-DOP est un polytope discret orienté à « k » dimensions. Il s’agit d’un volume englobant généralisé comportant « k » plans englobants. Les boîtes englobantes alignées sur les axes (AABB) et les boîtes englobantes orientées (OBB) sont des exemples de 6-DOP, formés par trois tranches englobantes (paires de plans englobants). Un icosaèdre (dé à 20 faces) est un exemple de 20-DOP.

Carte des points apex

Si le k-DOP représente les faces planes d’un maillage englobant, les points apex en sont les sommets. La carte des points apex (apex point map) désigne une méthode permettant de rechercher le point apex dans n’importe quelle direction donnée. On l’appelle point « apex » parce qu’il s’agit d’un point extrême du volume englobant.

Implémentation

Nous appliquerons les concepts du k-DOP et de la carte des points apex pour générer une enveloppe convexe bien ajustée servant de volume englobant. Plutôt que de transformer tous les sommets de l’enveloppe vers l’espace monde, nous projetterons les vecteurs de base dans la carte des points apex pour obtenir les points extrêmes dans ces directions. Nous n’avons besoin de transformer que ces six points, car ce sont les points les plus extrêmes sur les axes X, Y et Z de l’espace monde. XDXR construit d’abord le k-DOP dans la mémoire de travail. Cela ressemble à la formation d’un AABB. Pour chaque plan du k-DOP, chaque sommet est projeté sur sa normale, et la distance maximale par rapport à l’origine est calculée. La normale et la distance définissent le plan englobant. Les normales des plans du k-DOP devraient idéalement être réparties uniformément sur la sphère unité, mais pour plus de commodité et pour faciliter la génération d’une table de correspondance, nous prenons plutôt des points à la surface d’un cube pour former les vecteurs normaux. Les faces du cube sont tessellées en NxN cellules carrées, où N est le facteur de tessellation. (Notez que N=1 équivaut à un AABB.) La taille du k-DOP (à partir du GDK de juin 2022) peut être calculée à partir du facteur de tessellation. Le nombre de sommets sur un côté du cube tessellé est (N+1)2. SizeOfKDOP = (N + 1) * (N + 1) * 6 * sizeof(float) Une fois le k-DOP construit, nous pouvons former les points apex pour les régions délimitées par trois normales de plans. Rappelez-vous que les plans du k-DOP sont comme les faces d’un polyèdre, et que les points apex en sont les sommets. Pour trouver chaque point apex, nous intersectons trois plans. Chaque région carrée tessellée comporte quatre plans et, par conséquent, deux points apex. Chaque côté du cube tessellé comporte 2*N2 points apex. SizeOfAPM = (2 * N * N) * 6 * sizeof(float3) Remarque : seule la carte des points apex est conservée dans la BLAS finale. Le k-DOP n’est pas nécessaire à l’exécution.

Résumé

Les AABB d’instance dans l’espace monde peuvent être excessivement conservateurs lorsqu’une rotation est appliquée par la transformation de l’instance. Cela augmente la surface de l’AABB par rapport à la référence. Cela a, à son tour, une incidence négative sur les performances en augmentant les intersections de rayons faussement positives. XDXR implémente une technique évolutive appelée « carte des points apex » pour atténuer l’incidence sur les performances des instances en rotation. Elle fonctionne en précalculant des points apex dans diverses directions qui peuvent servir à générer des limites pivotées plus serrées. Bien que la carte des points apex nécessite un stockage BVH supplémentaire, elle peut évoluer selon la complexité de la BLAS, en augmentant la mémoire d’une quantité relativement faible par rapport au total. Il est évident que l’augmentation du facteur de tessellation est un compromis entre des limites plus précises et une augmentation de la taille de la mémoire. Il est également à noter que le coût de construction du k-DOP augmente avec la tessellation et est en O(n2). Ce coût non négligeable doit être payé à l’exécution lors de la mise à jour de la BLAS. Il pourrait être recommandé d’utiliser un petit N pour les BLAS pouvant être mises à jour, ou d’omettre complètement la carte des points apex. Pour les BLAS volumineuses, statiques et construites hors ligne, un facteur de tessellation proportionnel à la complexité de la géométrie pourrait être utile. Une estimation initiale suggérerait des valeurs comprises entre 2 et 8. La limite supérieure est 15.

Références

https://research.nvidia.com/publication/2015-06_apex-point-map-constant-time-bounding-plane-approximation
Dernière modification le 6 octobre 2026