RAYTRACING

Physically Based Rendering : Comprendre la simulation numérique de la lumière.

INFORMATIQUE GRAPHIQUE
OPTIQUE
MATHÉMATIQUES

I. Le Principe : Du Pixel à la Scène

1. L'Approche Inverse

Le Raytracing Physiquement Réaliste (PBR) ne cherche pas à "peindre" une image, mais à simuler le comportement réel des photons. Cependant, simuler la réalité brute est impossible : une ampoule émet des milliards de photons, mais seule une infime fraction atteint notre œil.

Pour optimiser le calcul, nous exploitons la réversibilité de la lumière. Nous tracons le chemin à l'envers : nous partons du capteur de la caméra (le Film), nous traversons un pixel précis, et nous lançons un rayon dans la scène pour "sonder" ce qu'il y a voir.

CAMÉRA PLAN IMAGE (FILM) SURFACE SOURCE Rayon Primaire Rayon d'Ombre

2. Les Fondamentaux Physiques

Pour obtenir une image réaliste, nous devons abandonner les couleurs arbitraires (RGB entre 0 et 255) et utiliser des unités radiométriques réelles. Trois concepts clés régissent tout système de rendu :

Flux ($\Phi$)

Unité: Watts ($W$)

C'est la puissance totale brute. L'énergie qui sort de la source dans toutes les directions.


Analogie: Le débit total d'un robinet.

Irradiance ($E$)

Unité: $W/m^2$

La quantité d'énergie reçue sur une surface donnée. C'est ce qui "éclaire" l'objet.


Analogie: La pluie qui tombe au sol.

Radiance ($L$)

Unité: $W/m^2/sr$

L'énergie qui voyage le long d'un rayon fin. C'est la seule grandeur qui reste constante dans le vide.


Analogie: Ce que l'œil perçoit.

II. L'Équation de Rendu (LTE)

C'est la loi fondamentale de l'informatique graphique (Kajiya, 1986). Elle décrit l'équilibre énergétique en tout point de la scène. Elle se lit comme une phrase :
"La lumière qui part vers l'œil ($L_o$) est la somme de la lumière émise ($L_e$) et de toute la lumière reçue et réfléchie."

$$ L_o(p, \omega_o) = L_e(p, \omega_o) + \int_{\Omega} f_r(p, \omega_i, \omega_o) L_i(p, \omega_i) |\cos \theta_i| \mathrm{d}\omega_i $$
Surface $\Omega$ p n $L_i$ $\omega_i$ $L_o$ $\omega_o$

L'intégrale $\int_{\Omega}$ signifie qu'on capture la lumière venant de tout l'hémisphère.

$L_e$ (Émission)

Lumière créée par l'objet lui-même (si c'est une ampoule ou une flamme). Pour 99% des objets, ce terme vaut 0.

$f_r$ (BSDF)

La "Signature" du matériau. C'est une probabilité : si la lumière arrive d'ici, quelle chance a-t-elle de repartir par là ? (Miroir vs Tissu).

$L_i$ (Lumière Entrante)

C'est l'inconnue. La lumière qui frappe le point $p$ provient d'ailleurs.

$\cos \theta$ (Loi de Lambert)

Géométrie pure. La lumière est étalée (donc plus faible) si elle frappe la surface en biais.

⚠️ Le Problème de la Récursion

Regardez le terme $L_i$ (Lumière Entrante). D'où vient cette lumière ? Elle vient forcément d'un autre objet !
Donc, pour calculer $L_i$ ici, il faut calculer le $L_o$ d'un autre objet là-bas... qui lui-même dépend d'un autre $L_i$.

L'équation est récursive. C'est pour cela que le Raytracing est difficile : tout est connecté.

III. La Résolution : La Méthode Monte Carlo

Le Principe du Sondage

L'équation précédente contient une intégrale impossible à calculer analytiquement (car la lumière peut venir d'une infinité de directions). La solution est statistique : la méthode Monte Carlo.

"Si vous voulez connaître l'avis moyen d'un pays, vous n'interrogez pas 60 millions de personnes. Vous en interrogez 1000 au hasard, et vous obtenez une estimation très proche de la réalité."

En raytracing, c'est pareil : pour connaître la couleur d'un pixel, on lance $N$ rayons au hasard et on fait la moyenne.

La Loi des Grands Nombres

Le problème de l'aléatoire, c'est le bruit (le "grain" sur l'image). C'est l'erreur visuelle de notre estimation. La règle est brutale : l'erreur diminue selon $\frac{1}{\sqrt{N}}$.

Pour réduire le bruit de moitié,
il faut multiplier le nombre de rayons par 4.

L'Art de l'Échantillonnage (Sampling)

Lancer des rayons purement au hasard ("White Noise") est inefficace : le hasard crée naturellement des amas et des trous. Pour optimiser le rendu sans augmenter le nombre de rayons, on utilise l'Échantillonnage Stratifié (Jittered Sampling).

TROU
ALÉATOIRE PUR

Amas & Zones vides
(Bruit élevé)

STRATIFIÉ (Jittered)

1 échantillon par case
(Bruit faible)

IV. L'Optimisation : Le BVH

Le Problème des Milliards

Le calcul est brutal : pour une image propre, nous lançons des millions de rayons. Si la scène contient aussi des millions de triangles, l'approche naïve demande de tester chaque rayon contre chaque triangle.
Résultat : Une image prendrait des semaines à calculer.

La solution est algorithmique : la Bounding Volume Hierarchy (BVH). On n'organise plus les objets en vrac, but dans une structure en arbre.

1. ESPACE GÉOMÉTRIQUE A (Racine) B C Rayon 2. STRUCTURE DE DONNÉES A B C "Si le rayon rate A, il ignore tout B et C."

Sans BVH ($O(N)$)

Le moteur teste aveuglément tous les objets un par un.

Analogie : Chercher un mot dans le dictionnaire en lisant chaque page depuis le début.

Avec BVH ($O(\log N)$)

Le moteur teste des "boîtes". Si le rayon rate la boîte, on ignore les milliers d'objets qu'elle contient.

Analogie : Ouvrir le dictionnaire à la lettre "M", puis "Ma", etc.

V. La Matière : La Théorie des Microfacettes

1. Le Monde Microscopique

En 3D classique, on dit qu'un objet est "rouge" ou "brillant". En PBR, on simule la réalité physique : tout est géométrie.

Si une surface paraît mate (comme de la craie), c'est qu'au niveau microscopique, elle est chaotique. Si elle est brillante (chrome), elle est lisse.
Jouez avec ce curseur pour voir comment la lumière rebondit sur les "micro-montagnes" de la surface :

▬ Surface / Normales ☀ Rayons
LISSE (Miroir) RUGUEUX (Mat)
0.50

2. L'Effet Fresnel

Avez-vous déjà remarqué que le bitume de la route semble devenir un miroir au loin par temps chaud ? Ou qu'une vitre transparente reflète le paysage quand on la regarde de biais ?

C'est la loi de Fresnel. Elle dicte une règle absolue :

"Plus l'angle d'incidence est rasant, plus la surface devient réfléchissante, quel que soit le matériau."

Même une feuille de papier réfléchit 100% de la lumière si vous la regardez parfaitement parallèle à sa surface.

// L'Approximation de Schlick
float Fresnel(float cosTheta) {
  // F0 = Réflexion face caméra
  return F0 + (1 - F0) *
         pow(1 - cosTheta, 5);
}

Mathématiquement, c'est une puissance de 5.

VI. Philosophie : Literate Programming

Le Code est Littérature

En programmation classique, on écrit du code pour l'ordinateur et on ajoute des commentaires pour l'humain.
L'approche Literate Programming inverse cette logique : on écrit un livre (des chapitres, des paragraphes, des formules) qui contient des blocs de code.

C'est ce qui rend PBRT unique : le livre que vous lisez est le code source du moteur de rendu. Il n'y a pas de séparation entre la théorie mathématique et son implémentation C++.

FRAGMENT C++
"Nous calculons maintenant la radiance incidente en sommant l'émission directe et l'éclairage indirect via l'échantillonneur."
Spectrum L = isect.Le(wo);
if (scene.lights.size() > 0) {
  // Appel vers le fragment
  L += UniformSampleOneLight(isect, scene, sampler);
}
🏆

Technical Achievement Oscar

En 2014, Matt Pharr, Greg Humphreys et Pat Hanrahan ont été récompensés par l'Académie pour leur travail de pionniers. L'Oscar technique leur a été remis pour la "formalisation et l'implémentation de référence" des concepts du rendu physique, tels qu'ils sont partagés dans ce livre.

FAIT HISTORIQUE : C'est la toute première fois qu'un Academy Award est attribué à un livre technique plutôt qu'à un film ou un logiciel.