Home ISIM: Rendu photorealiste
Post
Cancel

ISIM: Rendu photorealiste

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

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

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

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 !”

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:

Il y a un coefficient de brillance, la tache speculaire est plus ou moins piquee (ex: la lumiere dans les yeux des gens)

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:

  1. Calculer le vecteur directeur du rayon lumineux $v$ partant de l’observateur
  2. Chercher les intersections de ce rayon lumineux avec l’integralite des objets de la scene et garder le plus proche
  3. Calculer le niveau d’eclairement au point d’intersection en sommant l’apport diffus et speculaire pour chaque source lumineuse

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.

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:

  1. Calculer le vecteur directeur du rayon lumineux $v$ partant de l’observateur
  2. Chercher les intersections de ce rayon lumineux avec l’integralite des objets de la scene et garder le plus proche
  3. Relancer un rayon dans la direction de $S$ puis calculer le niveau d’eclairement recursivement
  4. 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

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

On risque aussi de louper les petits objets.

Solution

  • 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
  • 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

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

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.

Quel est la proportion de notre source ? Comment faire pour avoir des ombres plus douces ?

Solution

  • 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
This post is licensed under CC BY 4.0 by the author.