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 ycu 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 : Ot 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