# ISIM: Rendu photorealiste 2 # La Radiosite On essaye d'estimer la "*radiosite*" de chaque element de la scene, c'est a dire la quantite d'energie de chaque element emet... - B_i$ la radiosite de la surface $i$ - $E_i$ la quantite de lumiere emise par la surface $i$ - $P_i$ la fraction de lumiere incidente qui est reflechie par la surface $i$ - $F_{ij}$ la fraction de lumiere quittant la surface $i$ et atteignant la surface $j$ $$ B_i = E_i + P_i\sum_i(F_{ij}B_j) $$ Calcul des $F_{ij}$ par hemi-cubes ![](https://i.imgur.com/QgIzg0e.png) On projet un triangle, la partie bleue est la projection de ce triangle. :::success Cela nous donne le niveau d'energie recue par "petits carres". ::: ![](https://i.imgur.com/APbob5E.png) :::warning Ne permet pas directement de calculer une vue de la scene mais simplement l'illumination globale ::: - Avantages: - Prend mieux en compte les sources secondaires - Calculee une fois pour toutes - Inconvenients - Tient compte de la diffusion - Assez lourd - Obligation d'avoir un maillage (il faut discretiser les surfaces) - Objets transparents ? # *Photon map* :::info - Pre-calcul de l'illumination de la scene - Lancement des rayons lumineux depuis les sources et calcul des accumulations des photons ::: - Avantages: - Permet de modeliser plus proprement les sources secondaires, les ombres portees (...) et surtout les objets transparents (caustiques) - Faire des ombres correctes sous les objets transparents - Inconvenients - Calculs - Complexite - Penible a coder Resultats: video manquante :( Ameliorations: - Projection Maps - Visual importance map (3-pass Technique) - Shadow photons - ... # *Path Tracing/Bidirectional Path Tracing* - Modelisation des proprietes de reflexion des surfaces: (Bidirectional reflectance distribution function BRDF) (idem pour la transmission) - Si on a une surface et qu'on lance un laser, qu'elle est l'energie ressortante en fonction de l'angle d'incidence? - Solution pour resoudre l'illumination :::info BRDF: Biderectional reflectance distribution function (Reflectivite bidirectionnelle) ![](https://i.imgur.com/iz40gTo.png) ::: Conservative: $$ \int f_r(x,\theta,\theta_o)L_{input}(x, \theta_i)\vert\theta_i.N_x\vert\delta w_0\le 1 $$ Reciprocite de Helmholtz: $$ f_r(x, \theta_i, \theta_o) = f_r(x,\theta_o^{-1}, \theta_i^{-1}) $$ - Mesuree - Goniophotometer - ... - Modele - Blinn-Phong - Cook-Torrance - GGX - ... Principe du rendu: ![](https://i.imgur.com/vgBHuLT.png) ![](https://i.imgur.com/e460Nwq.png) ## *Path Tracing* - Avantages: - Rendu realiste - Convient bien aux scenes d'exterieurs - Prend bien en compte l'apport des autres objets - Rend les caustiques - Possibilite de modeliser les effets (profondeur de champ...) - Inconvenients: - len - bruite (Il faut bcp d'iterations pour converger) - difficile pour scenes avec des petites sources lumineuse (ou sources cachees) ## Bidirection Path Tracing :::success Amelioration du calcul du rendu - Lancement des rayons depuis l'observateur et depuis les sources ::: ![](https://i.imgur.com/ncO43q6.png) Avantages: - Facilite la recherche du chemin vers la source lumineuse - Permet de modeliser les petites sources lumineuses # *PBGI*: Point-Based Global Illumination - Tres peu enseigne - Beaucoup utilise dans l'industrie du cinema - *Monster Academy*: 1er long-metrage en raytracing - *La-haut*: utiliser PBGI - *SFX de Pirates des Caraibes* avec PBGI :::info Methode pour estimer l'illumination globales ::: - Avantages: - Rapide - Image non bruitee (*pas d'artefacts temporel*) - Inconvenients - Pas aussi precis que le *raytracing* - Difficile de gerer les effets miroir :::success Approximation de la scene par nuage de points - Un point - un disque de couleur - Calcul de l'illumination direct de la scene ![](https://i.imgur.com/PTti6X4.png) ::: - Approximation de la scene par nuage de points - Un point = un disque de couleur - Calcul de l'illumination directe de la scene ![](https://i.imgur.com/Pue2PMH.png) :::danger **Regroupement des points** ::: Calcul de l'illumiantion globale - Calcul de la contribution des points sur un disque - Pour les points eloignes - Utilisation du cluster - Pour les points proches - Raytracing - Pour les autres points - Utilisation directe du disque ![](https://i.imgur.com/nFbMjm5.png) # Bilan et remarques ## Rendus Rendu simple ![](https://i.imgur.com/IRWfVp1.png) Rendu simple avec anti-aliasing ![](https://i.imgur.com/EuVak4o.png) Rendu avec la radiosite ![](https://i.imgur.com/DpeSYc3.png) Rendu avec les photons ![](https://i.imgur.com/gf5sKoA.png) Rendu avec la radiosite et les photons ![](https://i.imgur.com/X29fpso.png) Rendu avec anti-aliasing ![](https://i.imgur.com/ei34Jje.png) ## Bilan - Raytracing - Calcul de l'illumination en fonction d'un point de vue - Calcul l'illumination approximatif : gère mal les objets transparents, les lumières secondaires, les ombres portées... - On peut combiner cet algorithme avec des techniques de calcul d'illumination globale pour palier à ces problèmes - Radiosity - Calcul l'illumination globale - Gère que la diffusion mais améliore l'apport des lumières secondaires - PhotonMap - Calcul l'illumination globale - Plus diffcile à mettre en ÷uvre (implémentation, artéfacts...) - Gère bien les objets transparents (caustiques) et éventuellement les ombres portées et les sources secondaires - PathTracing - Gère bien les objets transparents, les lumières secondaires, les ombres portées - Calcul très long - Risque d'apparition de bruit - PBGI ## Remarques sur l'implementation - Doit être bien réfléchie - Parallélisation possible - Utilisation du GPU possible - ... ## Modelisation Pour chaque "forme" il faut être capable de: - calculer la normale en chaque point - calculer l'intersection avec une droite, - éventuellement calculer les coordonnées de la texture *Calcul des intersections : dans le repère monde ou le repère objet ?* ## Pour aller plus loin - Textures - Autres effets (Brouillard, Bleu atmosphérique, ...) - ... - génération d'anaglyphes (cyan et rouge (espacement $\frac{1}{30} ∗ f$ )) ![](https://i.imgur.com/oNNnUh8.png) # Post scriptum ## Raycasting :::info *Principe*: On ne lance que les rayons depuis l'observateur et on ne calcul pas les rebonds... ::: *(Raytracing est une extension du raycasting ?)* Wolfstein: - On lance des rayons dans le plan! ![](https://i.imgur.com/4XDr8cR.png) ![](https://i.imgur.com/fnRUjtf.png) La longueur du rayon permet de conclure sur la hauteur du mur - 1 rayon donne 1 colonne de l'image + gestion des objets Avanatages: - Algorithme rapide :::warning On est loin du rendu photoréaliste... :::