Synthèse d'images I Venceslas BIRI IGM Université de Marne La
La synthèse d'images II. Rendu & Affichage 1. Introduction Venceslas BIRI IGM Université de Marne La
Introduction Objectif Réaliser une image Nécessité de choix d un point de vue Caméra d un environnement virtuel Nécessité de modéliser le monde virtuel Objets éclairé (réaliste) Nécessité de concevoir de l éclairage Lumières 3
Introduction Rendu A l aide d une caméra, d objets et de lumière, dessiner une image des objets visibles éclairé par les lumières. Source lumineuse La projection La perception Interaction lumière matière 4
Introduction Le coté caméra Position d une caméra dans l environnement virtuel Association d un écran (virtuel) à la caméra Cet écran est constitué de pixel Appelé «buffer» ou «framebuffer» Souvent en RGB 5
Introduction L environnement virtuel / les objets Modélisation géométrique Positionnement dans la scène Modélisation colorimétrique Modélisation physique 6
Introduction Les lumières A positionner dans la scène Peuvent être de tout type : Ponctuelle Surfacique voire volumique Directionnelle Isotrope ou anisotrope 7
Introduction Cas d étude : Illumination locale : La couleur d un objet ne dépend que des caractéristiques (locales) de celui-ci et des lumières de la scène. Modèle d illumination simple Possibilité d illumination plus complexe Réflexion & réfraction Ombres 8
Introduction Deux grandes approches Rasterisation Lancer de rayons 2 philosophies : Rasterisation : polygone par polygone Lancer de rayons : pixel par pixel 9
Introduction Rasterisation : On part de la scène, et on envoie sur la caméra Lancer de rayon : On part de la caméra, et on envoie sur la scène virtuelle 10
La synthèse d'images II. Rendu & Affichage 2. Anciennes techniques Venceslas BIRI IGM Université de Marne La
De vieilles techniques Rendu mode fil de fer (<1960) Approche polygone par polygone Algorithme : Pour chaque polygone Projeter ses points sur l écran Pour chaque couple de point : dessiner la droite Problème : pas de gestion des occlusions Rendu pauvre 12
De vieilles techniques (2) Algorithme du peintre (<1970) Philosophie simple : Ordonner les triangles du plus lointain au plus proche Les dessiner dans cet ordre Problème pour certaines intersections entre triangles 13
De vieilles techniques (3) Scanline rendering (1967 1970) Proche de la rasterisation Mix entre la rasterisation et le lancer de rayon Approche ligne par ligne Exemple de rendu avec le moteur Scanline Rendering Engine de 3DS max 14
De vieilles techniques (3) Scanline rendering Algorithme On ordonne les polygones en Y On initialise la liste des polygones visible de la première ligne On avance ligne par ligne : On calcul les intersections entre la ligne (de vue) et les polygones On actualise la liste en enlevant les polygones non visibles 15
De vieilles techniques (3) 16
De vieilles techniques (3) Scanline rendering Avantages : Permet de n avoir qu un nombre limité d objet en mémoire à chaque instant (l ensemble des polygones coupant la scanline) Chaque pixel est visité une seule fois Inconvénient : Il faut trier les primitives (objets) Les structures de données à maintenir et qui peuvent dépasser la taille mémoire d un Z-buffer 17
De vieilles techniques (4) Hidden line drawing Rendu fil de fer mais en conservant l occlusion En fait, rendu de surface en ne dessinant que les bords 18
De vieilles techniques (4) Render cache (1999) : philosophie Source : «Interactive Rendering using the Render Cache» Bruce Walter, George Drettakis, Steven Parker Rendering techniques '99, Volume 10, page 235--246 - Jun 1999 19
De vieilles techniques (4) Aperçu Display process renderer project Render cache depth cull interpolate renderer image sampling 20
De vieilles techniques (4) Render cache : résultat après chaque étape Projection Depth cull Interpolation 21
De vieilles techniques (4) Render cache : sampling Importance Sampling 22
La synthèse d'images II. Rendu & Affichage 3. Rasterisation Venceslas BIRI IGM Université de Marne La
Rasterisation Rasterisation ou algorithme du Z-buffer Fondé sur : Algorithme de remplissage des polygones Quels pixels sont concernés par la projection d un triangle (ou autre polygone convexe) sur un écran 2D? Algorithme du Z-buffer En anglais : to rasterize Omniprésent dans les applications temps réel Jeux vidéo Simulateurs & RV 24
Rasterisation : principe Idée générale Chaque polygone convexe est projeté sur l écran (image de pixels) Les occlusions sont gérées grâce à une image de profondeur : le Z-buffer Philosophie orienté objet La complexité est dépendante du nombre de primitive 25
Rasterisation : algorithme Transformation repère caméra Illumination Projection des primitives Rasterisation Gestion occlusion Insertion dans l image Déterminer les coordonnées des points relativement à la caméra Éventuellement, déterminer la couleur des sommets par rapport aux Projeter lumières les sommets des primitives sur l image 2D. Comprend le culling Déterminer les pixels recouvert par la primitive Utilisation du Z-buffer pour comparer les profondeurs Écriture des couleurs des pixels dans l image finale 26
Rasterisation : le Z-buffer Précision sur le Z-buffer Principe simple : on conserve la plus proche profondeur dans le buffer Si on veut insérer un nouveau pixel dans l image finale, on compare sa «profondeur» à celle présente dans le Z-buffer Plus proche, on insére dans l image finale et on stocke la nouvelle profondeur dans le Z-buffer Plus loin, on écarte le pixel Nécessité de transmettre, pour chaque pixel à insérer, sa profondeur vis-à-vis de la caméra 27
Rasterisation : pipeline 28
La synthèse d'images II. Rendu & Affichage 4. Lancer de rayon Venceslas BIRI IGM Université de Marne La
Lancer de rayons Algorithme du «ray casting» ou «ray tracing» «ray tracing» plutot pour des algorithmes évolué Illumination globale Fondé sur Aspect particulaire de la lumière Algorithme d intersection & de géométrie Omniprésent Dans les techniques réalistes non temps réel 30
Lancer de rayons Idée générale : Depuis une caméra, lancer un rayon passant par un pixel Suivre le rayon dans la scène A l intersection, calculer la couleur Philosophie orienté image La complexité est dépendante du nombre de pixel de l image 31
Lancer de rayons Lancer un rayon Calcul intersection Transformation rayon Illumination Pour chaque pixel de l image, lancer un rayon entre le centre optique et Calcul la 1ère ce de pixel intersection entre le rayon et les objets Le rayon est transformé dans les repères locaux des objets à intersecter Éventuellement calculer la couleur de l objet par rapport aux lumières Écriture des couleurs des pixels dans l image finale Insertion dans l image 32
Lancer de rayons Algorithme Image Image lancer_rayon(scene lancer_rayon(scene s) s) {{ pour pour chaque chaque pixel pixel pp {{ Calcul Calcul du du rayon rayon rr passant passant par par la la focale focale caméra caméra et et le le pixel pixel pp last_inter == +infini +infini pour chaque chaque objet objet oo de de la la scène scène ss {{ si si (intersection( (intersection(rr,,oo)) << last_inter) last_inter) {{ calcul calcul illumination illumination cc au au point point d intersection d intersection }} } fixer fixer la la couleur cc au au pixel pixel }} renvoie renvoie image image }} Complexité? 33
Lancer de rayons : algorithme Plusieurs étapes : 1. Calcul des rayons r 2. Calcul de l intersection 3. Calcul de l illumination Amélioration de la complexité : Boucle for orange! Augmentation de la complexité : Récursivité sur l instruction en bleue 34
Lancer de rayons : rayons Calcul des rayons : rayons centrés Détermination d un coin de la grille Plus un demi pixel en hauteur et en largeur Pour chaque rayon on avance de la taille d un pixel Autres techniques : Détermination d un point de manière stochastique dans le pixel Détermination de n rayons dans un pixel Pixel sampling 35
Lancer de rayons : intersections Calcul de l intersection : On utilise des primitives graphiques Sphère, cylindre, plan, carré, triangle, tore, ellipsoïde Chaque primitive définie dans un repère canonique On détermine précisément les conditions d intersection rayon / objet Chaque primitive est placée dans la scène par transformation Les rayons subiront la transformation afin de les ramener dans le repère canonique des primitives 36
Lancer de rayons : intersections Stratégie de calcul d intersection Équation paramétrique du rayon Équation cartésienne de l objet Donne une condition sur le paramètre du rayon Exemple d intersections : rayon / plan { x=o x t u x y=o y t u y z=o z t u z Ou, vectoriellement : a x by c z d = 0 a O x b O y c O z d t au x bu y cu z =0 t= a O x b O y c O z d au x bu y cu z equplan O t= n. u 37
Lancer de rayons : intersections Exemple d intersection : plan / rayon Avec objet canonique : plan z = 0 Oz t= uz Rapidité de calcul après transformation Exemple d intersection : sphère / rayon Vectoriellement, c est plus simple! 38
Lancer de rayons : optimisations Optimisation sur boucle orange Objectif : Se libérer de la dépendance à la scène Utilisation de structure de données (scène) accélératrice : BSP Tree Grille uniforme KDTree Octree Hiérarchie de volume englobant Autres variantes (Hierarchie de grille uniforme ) Algorithme de traversée rapide 39
Lancer de rayons : optimisations Algorithme de traversé rapide d un rayon Amanatides & Woo (Eurographics 87) Exemple en 2D Équation du rayon : O t Initialisation : v Trouver le voxel X,Y origine de O Si pas dans la grille : trouver le premier point O Initialiser stepx et stepy à +1 ou -1 suivant le signe des coordonnées de v Calcul de tmaxx et tmaxy, mesure du déplacement (en t) avant de croiser la prochaine cellule sur l axe des x et des y Calcul de tdeltax, tdeltay, déplacement (en t) pour se décaler d un pixel en largeur et hauteur 40
Lancer de rayons : optimisations Algorithme de traversé rapide d un rayon loop loop {{ }} if(tmaxx if(tmaxx < tmaxy) { tmaxx= tmaxx= tmaxx + tdeltax; X= X= X X ++ stepx; stepx; }} else else { tmaxy= tmaxy= tmaxy + tdeltay; Y= Y= Y Y ++ stepy; stepy; }} NextVoxel(X,Y); NextVoxel(X,Y); Comportement identique en 3D 41
Lancer de rayons : optimisations Problème de la traversée rapide : A 1 2 3 B Solution : vérifier la valeur d intersection de t par rapport au tmax autorisée pour la cellule donnée Optimisation supplémentaire : Chaque objet stocke l identifiant du dernier rayon à l avoir intersecté. Ainsi on ne calcule jamais deux fois la même intersection objet / rayon 42
Lancer de rayons : optimisations Traversée rapide et structure hierarchique Pour BSP Tree / Octree / Hiérarchie de volume englobant / KDTree Tous ont des structures d arbre Méthode d intersection récursive Parcours de l arbre : Test sur le nœud Détermination de l ordre de test sur les fils Récursivité dans cet ordre sur les fils Explications détaillées (octree) dans Geometric Data Structures for Computer Graphics Gabriel Zachmann & Elmar Langetepe Course notes 43
Lancer de rayons Illumination : possibilités Couleur constante Modèle d éclairement pour chaque source blinn-phong Tir de rayon d ombre vers les sources Suivi du rayon : Dans la direction de réflexion spéculaire pure Dans la direction de transmission Algorithme récursif 44
La synthèse d'images II. Rendu & Affichage 5. Comparaison des 2 approches Venceslas BIRI IGM Université de Marne La
Comparaison Dernières technologies en lancer de rayons OpenRT VIDEO! Nvidia : OptiX Lancer de rayon sur GPU VIDEO! 46
Comparaison Rasterisation Toujours à la pointe Nombre de processeur augmentant Ambiant Occlusion Alléger la dépendance à la scène : Deferred Shading (Rendu différé) 47
Comparaison Avantages Lancer de rayons : Peut être indépendant du nombre de primitive de la scène avec structure de données Souplesse de calcul Représente la physique sous jacente Rasterisation Peut travailler dans l espace image (deferred shading) Adapté à la parallélisation 48
Comparaison Inconvénient Lancer de rayons Stockage de la scène problématique pour parallèlisation Complexité peut exploser Dépendance à la résolution Rasterisation Dépendance à la scène Z-test final : beaucoup de travail pour rien Limitation sur les effets représentables 49