Ray tracing — 03 — Tracer à l'envers

Le cœur de l'algorithme : pourquoi partir de la lumière est un gouffre de calcul, comment partir de l'œil règle le problème, et le rôle des rayons primaires et des rayons d'ombre.

03 — Tracer à l'envers

Ce que tu vas apprendre

  • Pourquoi simuler la lumière « dans le bon sens » est quasi impossible
  • L'astuce qui fonde tout le ray tracing : partir de l'œil, pas de la lumière
  • Ce que sont les rayons primaires et les rayons d'ombre
  • Pourquoi le vrai coût, c'est trouver les intersections

Prérequis

  • L'article sur la lumière : photons, réflexion, dispersion
  • Aucun code ici, c'est le dernier article de pure intuition avant l'implémentation

On sait maintenant que la lumière part des sources, rebondit sur la matière et finit dans l'œil. La façon naïve de rendre une image serait donc de simuler ça tel quel : émettre des photons depuis les lampes et regarder lesquels arrivent à l'œil. C'est ce qu'on appelle le light tracing (tracé direct). Et c'est une catastrophe de performance. Comprendre pourquoi fait comprendre tout le reste.

Light tracing : le bon sens physique, le mauvais calcul

Une source émet des photons dans toutes les directions. Chacun voyage, frappe une surface, repart dans une direction dispersée (article 02), refrappe une autre surface, et ainsi de suite. Si on simule fidèlement ce processus, on a un problème : sur les milliards de photons émis, une proportion infime atteint l'œil.

Pense à une bille verte éclairée par une lampe. D'innombrables photons frappent la bille ; pour un pixel donné, un seul compte — celui qui repart pile dans la direction de l'œil. Tous les autres sont du calcul jeté. Pour qu'un seul photon arrive au bon endroit, il faut en simuler un nombre astronomique. C'est comme tirer au hasard dans toutes les directions en espérant toucher une cible large d'un pixel à des kilomètres.

Le détail qui tue : le coût principal d'un rayon n'est pas de le créer, c'est de calculer ce qu'il touche (l'intersection avec la géométrie de la scène). Gaspiller des milliards de rayons qui n'atteindront jamais l'œil, c'est gaspiller des milliards de tests d'intersection.

Eye tracing : tracer à l'envers

L'idée géniale, suggérée par Arthur Appel dès 1968 et popularisée par Turner Whitted en 1980, est de renverser le sens : au lieu de partir de la lumière, on part de l'œil. Puisque la lumière voyage en ligne droite et que les lois de l'optique sont réversibles, suivre un rayon de l'œil vers la scène donne le même chemin que la lumière a parcouru en sens inverse — mais sans gaspiller un seul rayon.

On sait exactement où est l'œil et combien de pixels on veut. On lance donc un rayon par pixel depuis l'œil, à travers le plan image, dans la scène. Chacun est garanti utile, puisqu'il correspond à un pixel qu'on doit colorer. Plus aucun gaspillage.

light tracing (naïf)        eye tracing (le bon)
   lampe                        œil
    \ | / / \ \  ...             \
     vvv  (milliards)             \  1 rayon par pixel
   un seul atteint l'œil          → touche l'objet directement

Petite note de vocabulaire : certains auteurs appellent « forward » le tracé depuis l'œil et « backward » celui depuis la lumière, d'autres l'inverse. Pour éviter le piège, on parlera de light tracing (depuis la lampe) et eye tracing (depuis l'œil), sans ambiguïté.

Rayons primaires et rayons d'ombre

L'eye tracing introduit deux types de rayons, qu'on retrouvera dans le code.

Le rayon primaire (aussi appelé rayon caméra ou rayon de visibilité) est celui qu'on lance depuis l'œil à travers un pixel. Son rôle : trouver le premier objet visible dans cette direction. Il répond à la question « qu'est-ce qu'on voit ici ? ».

Le rayon d'ombre part du point touché par le rayon primaire et vise la source de lumière. Sa question : « ce point voit-il la lampe, ou bien quelque chose lui fait de l'ombre ? ». Si le rayon d'ombre atteint la lumière sans obstacle, le point est éclairé. Si un autre objet se met en travers avant la lampe, le point est dans l'ombre. Une ombre, dans cet algorithme, n'est rien d'autre qu'un rayon bloqué.

            lampe •
                  |  ← rayon d'ombre (bloqué ? → ombre)
œil •----rayon primaire----→ • point touché

Et au-delà : le path tracing

L'eye tracing de base s'arrête vite : un rayon primaire, un rayon d'ombre, une couleur. Mais on peut continuer à faire rebondir les rayons — un reflet qui en révèle un autre, de la lumière qui ricoche de mur en mur avant d'arriver. Quand on simule ces chemins multiples, parfois en repartant aussi de la lumière, on parle de path tracing. C'est ce qui permet les effets réalistes les plus difficiles : caustiques (la lumière concentrée au fond d'un verre), éclairage indirect, couleurs qui « débordent » d'une surface sur une autre. On y reviendra dans les séries avancées du parcours ; pour l'instant, on reste sur le tracé de base.

L'intuition est complète. L'article suivant la transforme en code : la double boucle sur les pixels, le test d'intersection, et le calcul de la couleur.


Sources

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