Lien de la note Hackmd
Rendu photorealiste
- Objectif
- Generation d’images realistes
- Contrainte de temps faible
- Strategies:
- Object-based rendering algorithms
- Illumination globale calculee independamment du point de vue
- Image-based rendering algorithms
- Illumination calculee partiellement, en fonction du point de vue
- Deterministic rendering algorithms
- Monte Carlo rendering algorithms
- Object-based rendering algorithms
Les algorithmes qu’on va voir:
- Raytracing
- Path Tracing et Bidirectional Path Tracing
- …
- Radiosity
- Photon map
- …
Formation de l’image
Capture de l’image:
Modele stenope:
Capture de l’image (capteur CCD, CMOS)
Dans notre cas nous pouvons faire passer des rayons avec differentes longueurs d’onde par le meme point
- On peut facilement modeliser la camera
- Il faut reussir a modeliser l’eclairage
- Idee: “suivre” les rayons lumineux pour trouver le chemin parcouru depuis la source jusqu’a l’oeil
- Principe: Lancer une “infinite” de rayons depuis la source pour esperer trouver ceux qui frappent l’oeil de l’observateur
C’est tres lourd!
Raytracing
- Historique
- 68, Appel (du raycasting?)
- 80, Whitted (ajoute les effets optiques: reflexion, transparence…)
- Principe
- Idee de base: Difficile de suivre tous les rayons partant de la source en revanche il est possible d’estimer le chemin inverse
- Faire le chemin inverse pour trouver les objets “vus”
- Pour chaque objet vu, on peut estimer une approximation de l’eclairage local
- Approximation de 2 types de contributions:
- la partie diffuse
- la partie speculaire
Calcul de l’illumination locale:
- Composante diffuse
- Composante speculaire
- Apport des sources primaires
- Apport des sources secondaires
Sources primaires:
- Lumieres ponctuelles
- Spots
- Lumieres directionnelles
- Objets lumineux
Sources secondaires:
- Les autres objets eclaires
Modele local:
La composante diffuse
- La propriete de diffusion de la surface est $k_d$
- La couleur de la surface est $C$
Voila ce que ca donne:
“Mais vous avez triche monsieur il y a des ombres !”
C’est faux, il faut regarder l’effet de degrade: c’est la lumiere diffusante.
La composante speculaire
- La propriete de reflexion de la surface est $k_s$
- L’intensite de la lumiere depend de l’angle fait par $S$ et $L$
On a en resultat:
La lumiere est blanche donc on a un reflet blanc sur les objets.
Il y a un coefficient de brillance, la tache speculaire est plus ou moins piquee (ex: la lumiere dans les yeux des gens)
Les “$k_d$” incluent la couleur
Il faut sommer toutes les sources lumineuse $i$…
Resultat:
Encore une fois je triche comme un arracheur de dent car je n’ai pas explique comment avoir l’ombre, normalement ca devrait etre le degrade du bleu.
Est-ce qu’on peut affiner ce modele ?
- On peut ajouter un coeff d’attenuation $f(d)$ ($d$ $\rightarrow$ distance)
- Estimer que ce n’est pas un rayon qui repart mais un cone
- $f(d) = 1/d$
- $f(d) = 1/d^2$
- $f(d) = 1/(d + k)$
- …
Quel modele de couleur prendre ? Une synthese additive RVB.
Algorithme
Etape 1: Prise en compte des sources primaires
Pour l’ensemble des points de l’‘image:
- Calculer le vecteur directeur du rayon lumineux $v$ partant de l’observateur
- Chercher les intersections de ce rayon lumineux avec l’integralite des objets de la scene et garder le plus proche
- Calculer le niveau d’eclairement au point d’intersection en sommant l’apport diffus et speculaire pour chaque source lumineuse
Problemes:
- Ne tient pas compte des sources lumineuses secondaire
- Ne gere pas les ombres
Prise en compte des sources secondaires:
On ne considere pas tous les points de toutes les surfaces de l’espace, par contre on va aller explorer la direction du rayon rebondissant sur la table. Pour y arriver, on calcule l’illumination au point sur la table, rien nous empeche de “relancer” un rayon et voir quel objet on intersecte. Une fois qu’on l’intersecte, on calcul l’illumination au point.
C’est du cast ray.
La reponse “lancer plus de rayon” ca fonctionne.
Etape 2: Prise en compte des sources primaitres et certaines sources secondaire
Pour l’ensemble des points de l’image:
- Calculer le vecteur directeur du rayon lumineux $v$ partant de l’observateur
- Chercher les intersections de ce rayon lumineux avec l’integralite des objets de la scene et garder le plus proche
- Relancer un rayon dans la direction de $S$ puis calculer le niveau d’eclairement recursivement
- Calculer le niveau d’eclairement au point d’intersection en sommant l’apport diffus et speculaire pour chaque source lumineuse ainsi que l’eclairement dans la direction de $S$
Etape 3: Prise en compte de l’ombre
Pour l’ensemble des rayons que l’on “lance” vers les sources primaires, il faut chercher si un objet de la scene ne s’est pas insere entre le point considere et la source. Pour cela, il faut a nouveau calculer l’intersection du rayon avec l’ensemble des objets de la scene et prendre le plus proche.
Resultats
Je triche plus (ou quasiment plus)
Je triche j’ai pas du tout parle de texture et d’anti-aliasing
- L’algorithme du raytracing est un processus simple, recursif
- Il faut etre capable, pour chaque objet, de calculer la normale en chaque point
- Il faut reflechir a la condition d’arret
Avantages
- Algorithme simple et rapide a mettre en oeuvre
- Genere des images honorables
- …
Inconvenients
- Temps de calcul un peu eleve
- Pas de gestion de la profondeur de champ et autres effets
- Mauvaise gestion des ombres (frontieres trop brutales)
- Sources secondaire pas suffisamment prises en compte (eclairage indirect incorrect)
- Objets transparents
- “Alisaing”
- …
Les problemes du Raytracing
Probleme de l’aliasing
Probleme: si on lance un rayon c’est touche ou pas touche alors que ca devrait etre la proportion de chaque.
On risque aussi de louper les petits objets.
Solution
On lance plus de rayons (cast ray)!
- Sur-echantillonage
- Lancer plusieurs rayons pour chaque pixel
- De maniere organisee
- Au hasard
- Lancer plusieurs rayons pour chaque pixel ou le gradient est eleve
- Bon resultats mais peut etre tres lent
- Lancer plusieurs rayons pour chaque pixel
- Post-filtrage
- Resultat moyen mais tres rapide
Resultats
Avec anti-alisaing sur toute l’image (50 rays/pixel) temps: de l’ordre de 7-8 secondes
Anti-aliasing sur les zones de gradient eleve (50 rays/pixel) Temps: l’ordre de la seconde
Probleme du temps de calcul
On lance plus de rayons (cast ray)!
Solutions:
- Volumes englobants
- Projection sur un plan/partition de l’espace
- Pre-trier les objets?
- Calcul parallele
- Utilisation d’OpenGL
- …
Probleme des objets transparents
Solutions:
- Comme nous avons relance le rayon reflechi, il faut “suivre” le rayon refracte
- Loi de la refraction
- Tenir compte du rayon refracte pour l’illumination locale: $I=I_d+I_s+I_s+k_tT$
Milieux transparents:
- Loi de la refraction (Snell Descartes): $n_1\sin i_1 = n_2\sin i_2$
Surfaces translucides:
- Distribution probabiliste
Calcul de l’ombre
Solution approchee: Ne pas devier le rayon mais filtrer les longueurs d’ondes
Probleme de l’eclairage indirect
Si on va sous notre bureau, d’apres nos calculs il devrait faire totalement noir alors que ce n’est pas le cas avec l’eclairage indirect.
Solution
- Ajouter une lumiere ambiante: $I=k_a*I_a+I_d+I_r+I_t$
- Solution vraiment approximative
Resultats:
Probleme de l’ombre
On lance un rayon pour savoir si on est eclaire mais ca donne une reponse binaire, c’est comme considerer la source comme ponctuelle.
Notre source lumineuse n’est pas ponctuelle.
Quel est la proportion de notre source ? Comment faire pour avoir des ombres plus douces ?
Solution
Cast ray !
- Ne plus considerer une lumiere comme ponctuelle
- Probleme de temps de calcul
Bilan
Avantages
- Algorithme tres simple
- Donne des images honorables
Des problemes majeurs persistent
- Les sources secondaires ne sont pas suffisamment bien geres
- Les objets transparents non plus
Amelioration
- Raytracing distrubue (84)
- Sur-echantillonnage pour simuler
- les ombres douces
- la profondeur de champ
- …
- Ne regle pas le probleme de l’apport de la diffusion des sources secondaires
- Quantite de calcul enorme
Conclusion
- Algorithme simple
- Necessite beaucoup d’ameliorations pour avoir des images photorealistes