• Aucun résultat trouvé

1 Introduction : modèles d illuminations

N/A
N/A
Protected

Academic year: 2022

Partager "1 Introduction : modèles d illuminations"

Copied!
6
0
0

Texte intégral

(1)

Chapitre 9 : Eclairage

Master Informatique - UE Modélisation 3D

2021-2022

[email protected] Eclairage 2021-2022 1 / 33

1 Introduction : modèles d’illuminations

[email protected] Eclairage 2021-2022 2 / 33

Modèles d’illuminations

I Modèle local : on calcule l’intensité en un point donné d’une surface en ne tenant compte que de l’intensité des sources lumineuses. Exemple : modèle de Phong.

I Modèle global : on tient compte de la contribution de tous les points de la scène environnants pour le calcul de l’éclairement en un point (échanges lumineux entre toutes les surfaces de la scène). Exemple : radiosité.

I Modèle semi-global : s’appuie sur un modèle local enrichi pour tenir compte des objets de la scène. Exemple : lancer de rayons.

[email protected] Eclairage 2021-2022 3 / 33

Principe du lancer de rayons

ISuivre le chemin inverse de la lumière (but : calculer la couleur en chacun des pixels de l’écran).

IDans sa version simple, on détermine pour chaque point rencontré un éclairage local (i.e.

éclairage direct par les sources) auquel on ajoute l’éclairage indirect provenant d’un rayon réfléchi (miroir) et d’un rayon transmis (réfraction)⇒Modèle de Whitted (80).

α α

rayon d’ombrage Surface2

rayon reflechi

normale au sommet rayon primaire Observateur

Surface1 rayon transmis Source

Modèle global : équation de Kajiya

I(x,x0) =g(x,x0)

ε(x,x0) + Z

Aρ(x,x0,x00)I(x00,x)dx00

(1)

avec

II(x,x0)l’intensité véhiculée dexversx0,

Ig(x,x0)la fonction de visibilité entre les pointsxetx0(0 s’il ne se voient pas, sinon g varie comme l’inverse du carré de la distance entrexetx0),

Iε(x,x0)l’intensité propre transférée dexversx0,

Iρ(x,x0,x00)est la réflectance bi-directionnelle au pointxcorrespondant aux directionsx0et x00.

IAensemble des surfaces constituant la scène (remarque :S0fait partie deA).

Méthode de Radiosité

I Résoudre l’équation de Kajiya en considérant des reflectances parfaitement diffuses uniquement.

Source

S"

S S’

step 1 step 79

lien vidéo Source :http://dudka.cz/rrv

(2)

Ombres portées

IIl s’agit, au point considéré, de l’occultation d’une source lumineuse par d’autres éléments de la scène.

IObjet récepteur : l’objet qui subit l’ombre d’un autre objet (celui qui "reçoit" l’ombre portée).

IObjet emetteur : l’objet qui provoque l’ombre.

IIntrinsèque au lancer de rayons et à la radiosité.

IPlus délicat en rendu projectif (OpenGL) : depth map, shadow volumes.

[email protected] Eclairage 2021-2022 7 / 33

Autres méthodes d’éclairage

IMéthodes hybrides lancer de rayon (spéculaire, transparence) + radiosité (diffus) IRadiosité étendue : résolution de l’équation de kajiya avec modèle diffus compléxifié

(BRDF).

IPhoton mapping : diffuser des « photons » en partant des sources ; stockage directement sur les surfaces de l’énergie reçue ; rediffusion pour le spéculaire ; puis lancer de rayons en calculant l’éclairement selon l’énergie stockée « autour du point d’intersection »(rendu de caustique).

IModèle volumétrique pour simulation d’atmosphère.

[email protected] Eclairage 2021-2022 8 / 33

2 Ombres portées avec Depth Map (réalisation OpenGL)

[email protected] Eclairage 2021-2022 9 / 33

Principe

[email protected] Eclairage 2021-2022 10 / 33

Capturer la visualisation depuis la source lumineuse

IPlacer la caméra sur la source lumineuse puis tracer la scène.

ITracer la scène directement dans une texture (technique "render to texture").

[email protected] Eclairage 2021-2022 11 / 33

Render to texture

I Définition d’un frame buffer object et attachement d’un color buffer et d’un depth buffer (qui peuvent être des textures).

I Exemple :

/ / t e x t u r e C o l o r et textureDepth = 2 t e x t u r e s ( de même dimensions ) / / textureDepth d o i t ê t r e en format GL_DEPTH_COMPONENT / / generate fbo

glGenFramebuffers (1 ,& _idFrame ) ; glBindFramebuffer (GL_FRAMEBUFFER, _idFrame ) ;

glFramebufferTexture2D (GL_DRAW_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D, t e x t u r e C o l o r . i d ( ) , 0 ) ; glFramebufferTexture2D (GL_DRAW_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_2D, textureDepth . i d ( ) , 0 ) ; glBindFramebuffer (GL_FRAMEBUFFER, 0 ) ;

I (nombreuses autres possibilités !)

[email protected] Eclairage 2021-2022 12 / 33

(3)

Render to texture

Texture _depthMap ; FrameBufferObject _ r t t ; voidi n i t i a l i z e ( ) {

_ r t t . create (512 ,512);

_ r t t . attachDepth (&_depthMap ) ; }

voiddraw ( ) { _ r t t . begin ( ) ;

g l C l e a r (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ; apply ( _lightCamera ) ;/ / p r o j e c t i o n M a t r i x / modelviewMatrix drawObjects ( ) ;

_ r t t . end ( ) ;

/ / => _depthMap c o n t i e n t l e s profondeurs de chaque p i x e l . }

[email protected] Eclairage 2021-2022 13 / 33

Test de visibilité

IUne fois la depth map disponible : elle stocke toutes les profondeurs de la scène vue depuis la source lumineuse.

ILors du tracé "normal" de la scène, on projette chaque sommet sur la textureon obtient les coordonnées normalisées incluant la profondeur (cf calcul sur transparent suivant).

IExemple : projeter Bobtention deBDde coordonnées(s,t,rB).

IComparer la profondeur (rBsur l’exemple) avec celle stockée dans la depth map (rB0) pour en déduire si le point est éclairé ou non.

IExemple : pour B la valeur stockée estrB0. Elle est plus petite, donc on sait que B est occulté. Pour A les profondeurs seront égales : A est éclairé.

ITout ce traitement est effectué dans les shaders (cf TP pour mise en oeuvre).

[email protected] Eclairage 2021-2022 14 / 33

Changement de repère sur Depth Map

Lors du tracé, il faut, à partir des coordonnées de chaque sommet(x,y,z)(repèreLocal), retrouver ses coordonnées dans la Depth Map (i.e. les coordonnées de sa projection sur la depth map ; noté repèreTexture).

I Calcul des coordonnées de texture selon les positions :

s t r q

Texture

=MTextureLocal

x y z w

Local oùMTextureLocal=

as bs cs ds

at bt ct dt

ar br cr dr

aq bq cq dq

(matrice de passage du repère texture au repère objet).

I Le texel final a pour coordonnée(sq,qt,rq)(passage en NDC) I Projection perspective depuis la source lumineuse :

MTextureLocal=ProjectionLightMLightWorldMWorldLocal

lien vidéo

les sommets de la scène ont les co- ordonnées de textures calculées avec MTextureLocal pour la texture "diaposi- tive"

[email protected] Eclairage 2021-2022 15 / 33

3 Mise en oeuvre d’un lancer de rayons

Principe

ISuivre le chemin inverse de la lumière en partant de l’oeil.

ITrouver la couleur de chaque pixel.

IRayon = droite définie par (oeil, pixel) (rayon dit primaire).

ICalculer la couleur du pixel en trouvant l’intersection de ce rayon avec la scène.

Rayon primaire

I Une fois le pointPtrouvé (i.e. intersection la plus proche de l’oeil et devant l’écran), on calcule sa couleur.

I On peut se contenter d’un éclairement local (calcul par Phong par exemple avec les directions d’éclairement L1 et L2).

I Remarque : il faut retenir l’objet dont P appartient pour avoir la normale, les caractéristiques de matériaux, etc...

I Remarque : le principe contient intrinsèquement l’élimination des parties cachées (la couleur provient de l’intersection la plus proche).

I Problème principal du lancer de rayon : calculer l’intersection d’une droite avec la scène.

(4)

Eclairement semi-global

IUne fois l’intersection avec la scène mis en place, on peut aisément compléxifier l’éclairement. L’éclairement dePprovient (éventuellement) de :

•L’éclairement direct par une source (éclairement local, par exemple Phong).

•L’éclairement indirect par d’autres objets : réflexion (objet spéculaire) et réfraction (objet transparent).

•Une source peut être occultée par un autre objet (ombres portées).

[email protected] Eclairage 2021-2022 19 / 33

Principe récursif

IOn peut se retrouver confronté à une récursivité infinie (exemple : 2 miroirs face à face).

I⇒limiter selon une profondeur maximale.

I⇒limiter selon le cumul des contributions (si la contribution devient négligeable : arréter le calcul).

[email protected] Eclairage 2021-2022 20 / 33

Calcul d’éclairage en chaque pixel

I Il suffit d’itérer pour tous les pixels de l’écran :

Pour t o u t p i x e l _ i =( x_i , y _ i ) de l ’ écran f a i r e

rayon_primaire = Ray ( eye , p i x e l _ i ) ; / / exprimé dans l e repè re world

couleur ( p i x e l _ i )= computeRayColor ( rayon_primaire , 1 0 , 1 ) ; / / profondeur r é c u r s i v i t é maximale = 10 , c o n t r i b u t i o n = 1 Fin Pour

[email protected] Eclairage 2021-2022 21 / 33

Calcul d’éclairement pour un rayon donné

Coulor computeRayColor(Ray d, int level, float contribution) { Si level=0 ou contribution<CONTRIBUTION_MIN alors

resultat=noir;

Sinon

P=intersect(d,scene); // + retenir les caractéristiques de l’intersection (matériel, normale,...) Si P=Vide alors resultat=noir;

Sinon couleur=noir;

// rayons d’ombre et Phong : Pour toute source s_i faire

Si intersection(Ray(P,S_i),scene) non Vide Alors couleur = couleur+computeLocalColor(P,S_i); // Phong Fin Si

Fin Pour

// rayons secondaires (appels récursifs) : couleur=couleur+

computeRayColor(RayReflexion(P),level-1,contribution*alpha_P_Refracte);

couleur=couleur+

computeRayColor(RayRefracte(P),level-1,contribution*alpha_P_Reflexion);

resultat=contribution*couleur;

Fin Si }

[email protected] Eclairage 2021-2022 22 / 33

Intersections : changement de repères du rayon

IEquation du rayon dans le monde :PWorld=AWorld+λuWorld

IPour les intersections avec un objet, il est (généralement) plus simple de calculer dans le repère local de l’objet⇒on transforme le rayon dans le repère local.

IOn transforme alorsAWorldetuWorldpour obtenir l’équation dans le repère souhaité.

I⇒siMWorldLocalest le passage qui positionne l’objet, alors

PLocal=MLocalWorldAWorld+λMLocalWorlduWorldest l’équation du rayon dans le repère Local.

ILeλest indépendant du repère de résolution !

I(pour déterminer l’intersection la plus proche deA, il suffit de prendre leλle plus petit parmis toutes les intersections sans se préoccuper du repère de résolution).

[email protected] Eclairage 2021-2022 23 / 33

Calcul du rayon primaire

I Données :

•Pixelipar lequel passe le rayon =(xi,yi)connu enwindow coordinates.

•Données de la caméra : viewport, matrice de projection (frustum, ortho, ...), et positionnement (i.e.MWorldEye).

I Calcul :

1 Pixel en coordonnées normalisées : application inverse du viewport surxietyi, et poserzndc=−1 (z de l’écran)⇒(xndc,yndc,zndc).

2 Pixel en coordonnées Eye : application de la matrice inverse de projection

⇒(xEye,yEye,zEye)

3 Origine du rayon :AEye= (0,0,0)

4 Direction du rayon :uEye= (xEye,yEye,zEye).

5 Transformation du rayon dans le repère world en appliquantMWorldEye.

6 Transformation du rayon dans le repère local de chaque objet à intersecter en appliquantMLocalWorld.

I ⇒intersection la plus proche donnée parminλtels queλ>1 (visible).

[email protected] Eclairage 2021-2022 24 / 33

(5)

Rayon d’ombre

IPour savoir si un point P est éclairé par une source lumineuse, il suffit de lancer un rayon depuis P dans la direction de la source : s’il y a intersection avant la source, la source est occulté par un autre objet.

IA = P (point d’intersection avec rayon incident),u=−−−−−→P Source ICalcul d’intersection : siλ∈]0,1]⇒occultation.

IProblème d’imprécision numérique :

•Résolution par epsilon ? problème pour déterminer le bon epsilon.

[email protected] Eclairage 2021-2022 25 / 33

Rayons secondaires

Normale Observateur

Source lumineuse

Direction N D R L

Réfléchi

Transmis

IA = P (point d’intersection avec rayon incident),u=Rpour réfléchi ouTpour réfracté.

IDirection réfléchie : à un signe près, nous l’avons déjà vu pour l’éclairement : R=−2(D·N)N+D.

IDirection transmise par réfraction : application de la loi de descartes : T=M1/M2D+ [M1/M2∗(D.N)−p

1.0−(M1/M2)2∗(1.0−(D.N)2)]N IAu delà d’un angle d’incidence critique, la réfraction devient réflexion (i.e. lorsque

1.0−(M1/M2)2∗(1.0−(D.N)2)<0).

[email protected] Eclairage 2021-2022 26 / 33

Intersection arbre CSG

I Représentation bien adaptée au lancer de rayon (algo d’intersection en exercice : intersection dans le repère des feuilles, puis tri desλpar fusion).

I ... à condition que les primitives soit « simples ».

[email protected] Eclairage 2021-2022 27 / 33

Intersection B-rep polygonaux

IUniquement des intersections de droites avec des plans (et localisation dans les facettes).

IIl faut prendre garde à éviter les problèmes liés aux erreurs numériques, en tenant compte de la topologie des objets (cas de 2 triangles adjacents par exemple).

ICalcul de la normale en l’interpolant avec les valeurs aux sommets.

IIl est rapidement nécessaire de mettre en place des techniques d’accélérations pour éviter les nombreux calculs (nombreux polygones).

Intersection surfaces polynomiales

ISi on obtient une équation polynomiale enλde degré plus petit que 5, on peut tenter la résolution brutale par radicaux (instabilités numériques peuvent devenir critiques).

Exemple : surface composées de patches de béziers cubiques⇒résolution d’une équation de degré 3.

IAdopter des méthodes itératives de résolution.

IExemple : dichotomie en(u,v)sur une surface de Bézier en exploitant la propriété d’enveloppe convexe et de normalisation.

Accélérations

Volumes englobants

Volumes englobants Objets de la scene

Observateur

Partition de l’espace

(6)

Volumes englobants

[email protected] Eclairage 2021-2022 31 / 33

Hiérarchie de volumes englobants

⇒« descendre »dans les niveaux de précision si une intersection avec une sphère est trouvée.

Principal problème : construire la hiérarchie automatiquement.

[email protected] Eclairage 2021-2022 32 / 33

Partition de l’espace

Observateur

I Le rayon « avance »de cube en cube (lancer de rayon dit discret : parcours du rayon incrémentalement)

I Si un objet se trouve dans un cube :

•ou bien on effectue l’intersection avec l’objet.

•ou bien on augmente en résolution (éventuellement hiérarchiquement).

I Principal problème : énumération des objets dans les cubes.

[email protected] Eclairage 2021-2022 33 / 33

Références

Documents relatifs

Pour cette question seulement, on prend en compte l’existence d’un frottement solide entre la bille et le plan de coe ffi cient µ, notable uniquement dans la phase O 1 M &gt; 0..

Déterminer les coordonnées du point H, projeté orthogonal du point A sur la droite (

On considère un cube ABCDEF GH (voir exercice précédent pour une figure)1. En déduire l’aire du

À l’aide du logiciel Geogebra et d’un curseur m, représenter P et D m et conjecturer, selon les valeurs de m, le nombre de points d’intersection de la parabole P et de la droite D

On appelle durée d’attente le temps qui s’écoule entre le moment où la voiture se présente à l’entrée du parking et le moment où elle franchit la barrière d’entrée

f est une fonction définie et continue sur un intervalle I. Ces bornes s’interprètent comme des abscisses dans le 5°). L’ordre des bornes a une importance. On n’a pas forcément

Comme il y a convergence normale sur D f (r) et que chaque terme de la série est continu, il en est de même de la somme. On remarquera que la continuité sur le domaine de convergence

D´ emontrer que si la condition pr´ ec´ edente est remplie, alors pour tout entier n ≥ 2 il existe dans U une d´ etermination holomorphe de la racine n-i` eme de f.. Montrer que f