Bonjour,
Aprés des jours de lecture de publi et autre docs sur les stratégies envisageables pour accélérer le calcul de l'intersection la plus proche entre une raie et un modèle 3D, je n'arrive pas à trouver chaussure à mon pied ! Je me tourne vers votre expérience :

- Contexte
je développe un soft 3D de physique des particules. Il permet de construire un modèle 3D à base de CSG (primitives simples) et de formes triangulées (import STEP) avec des matériaux associés, matériaux au sens chimique (fractions massiques, densité).
Il simule ensuite les interactions physiques de particules élémentaires (électrons, photons, ...) avec la matière composant les formes du modèle 3D (perte d'energie, création de particules secondaires, diffusion, ...). Il effectue le suivi de particules qui évoluent à travers le modèle, parfois par pas de quelques nanomètres.

Nom : particule_matiere.jpg
Affichages : 109
Taille : 505,9 Ko

L'image jointe montre la pénétration d'un faisceau d'électrons d'une certaine énergie dans un bloc d'aluminium.

- Problématique
A chaque pas, identifié par une position et une direction (donc un rayon) l'algo doit trouver la prochaine intersection entrante ou sortante avec un objet du modèle. Malgré la mise en place d'une méthode de parcours d'un arbre de boites englobantes, ces calculs d'intersection successifs occupent presque 70% du temps total de simulation.

- Questions
Aujourd'hui l'arbre de Bbox est construit en fonction de l'arborescence du modèle 3D organisé par l'utilisateur, donc pas forcément optimal...
Il faut prendre en compte que le modeleur permet de créer des formes fermées avec une épaisseur contenant d'autres formes, pas évident à traiter avec les subdivisions de l'espace proposées (j'ai l'impression...). Et il faut noter aussi que l'on a deux types de formes à traiter, les formes simples CSG (quadratiques) et des formes tesselisées (liste de triangles)...
Quelle est la solution ou le mélange de solutions qui serait parfait pour un tel cas de "raytracing" ?
J'étais emballé par la grille uniforme qui a l'avantage de permettre une connaissance rapide du voxel courant et des voxels suivants pour une raie donnée. Mais si la discrétisation est fine, le parcours de ceux-ci parait long.
Je me suis interessé ensuite à l'octree, mais le passage d'un voxel à son voisin est complexe...

Merci de m'apporter votre avis sur cette épineuse question ! Bonne route