Construire un ray tracer — 03 — Le triangle, primitive universelle

Pourquoi le triangle est LA brique du rendu : trois points définissent toujours un plan. Le principe de l'intersection rayon-triangle en deux temps — d'abord le plan, ensuite le test « dedans ou dehors ».

03 — Le triangle, primitive universelle

Ce que tu vas apprendre

  • Pourquoi le triangle, et pas le quadrilatère, est la primitive de base
  • La stratégie « tout trianguler »
  • L'intersection rayon-triangle en deux étapes
  • L'intersection rayon-plan, première moitié du problème

Prérequis


Si tu ne devais garder qu'une seule forme géométrique pour faire du rendu, ce serait le triangle. Pas la sphère, pas le cube : le triangle. Toute la 3D moderne, du jeu vidéo au film, repose sur lui. Cet article explique pourquoi, et pose le principe de son intersection avec un rayon.

Pourquoi le triangle

Un triangle est défini par trois sommets. Et trois points dans l'espace définissent toujours un plan unique — c'est une nécessité mathématique. Un triangle est donc toujours plan (coplanaire), par construction.

Ce n'est pas le cas d'un quadrilatère : quatre points peuvent ne pas être dans un même plan (pense à une feuille de papier qu'on gondole). Un quad peut être « tordu » dans l'espace, ce qui complique tout — intersection, normale, remplissage. Le triangle, lui, est toujours plan, toujours convexe, toujours simple. C'est la forme la plus stable qui soit, et c'est pour ça qu'il gagne.

Comme l'explique Scratchapixel, n'importe quelle forme plus complexe peut être découpée en triangles — c'est la triangulation.

La stratégie « tout trianguler »

Plutôt que d'écrire une routine d'intersection pour chaque type de surface (sphère, cylindre, NURBS, Bézier…), les moteurs modernes adoptent une stratégie radicale : convertir toute la géométrie en triangles, et n'optimiser qu'une seule routine d'intersection rayon-triangle.

L'avantage est double : le code reste simple (un seul cas à gérer), et toute l'énergie d'optimisation se concentre sur cette routine unique — qui devient extrêmement rapide. C'est exactement la philosophie des cartes graphiques, où le triangle règne aussi en maître pour la rasterization. Une primitive, parfaitement maîtrisée, et toute la complexité du monde se ramène à elle.

L'intersection en deux temps

Comment savoir si un rayon touche un triangle ? On décompose en deux étapes :

  1. Le plan. Le rayon coupe-t-il le plan infini qui contient le triangle ? Si oui, où ?
  2. Le test d'appartenance. Ce point d'intersection tombe-t-il à l'intérieur des trois côtés du triangle, ou en dehors ?
   1. intersection rayon-plan      2. dedans ou dehors ?
        \                                  /\
         \                                /  \
   ───────●──────── plan                 / ●  \   ✓ dedans
           \                            /______\
            rayon                        /\
                                        /  \  ● ✗ dehors (hors des côtés)

Si l'une des deux étapes échoue (rayon parallèle au plan, ou point hors du triangle), il n'y a pas d'intersection.

Première moitié : rayon contre plan

Un plan se définit par un point A dessus (un sommet du triangle) et sa normale N (perpendiculaire au plan, qu'on obtient par le produit vectoriel de deux côtés du triangle, comme vu en série maths). Un point P est sur le plan si (P − A) · N = 0.

On injecte le rayon P = O + t·D et on résout en t :

t = ((A − O) · N) / (D · N)

Deux cas particuliers à surveiller :

  • si D · N = 0, le rayon est parallèle au plan : pas d'intersection (division par zéro à éviter) ;
  • si t < 0, l'intersection est derrière la caméra : on l'ignore.

Sinon, t donne le point d'impact sur le plan. Reste à savoir s'il est dans le triangle — la seconde moitié du problème.

Cette seconde étape (le test « dedans/dehors ») peut se faire par une méthode géométrique côté par côté, mais il existe bien plus élégant et rapide : l'algorithme de Möller-Trumbore, qui résout tout d'un coup. C'est le sujet de l'article suivant.


Sources

  • Scratchapixel. Ray-Tracing: Rendering a Triangle — Why Are Triangles Useful?. scratchapixel.com
  • Pharr, M., Jakob, W., & Humphreys, G. (2023). Physically Based Rendering (4ᵉ éd.), chap. « Triangle Meshes ». pbr-book.org
  • Akenine-Möller, T., Haines, E., Hoffman, N., et al. (2018). Real-Time Rendering (4ᵉ éd.), chap. « Intersection Test Methods ». CRC Press.

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.