Lancer de Rayon
Transcription
Lancer de Rayon
Lancer de Rayon et structures de partitionnement Objectifs 2 Objectifs 3 Limites 4 Rastérisation – 3 mn Comment ça fonctionne ? Quels en sont les avantages et inconvénients ? 5 Rastérisation (rappel) Pour chaque primitive Pi, trouver les rayons intersectant Pi Rendu en deux étapes § projection des primitives sur l'écran (forward projection) § discrétisation (conversion des primitives en pixels) Scène = ensemble de primitives « rastérisables » 6 Rastérisation (rappel) Rendu de base ⟹ OK Effets § ombres portées sources ponctuelles ⟹ OK (shadow map / shadow volumes) sources étendues ⟹ ?? § réflexions planaires ⟹ OK environnement mapping ⟹ limité § réfractions/transparence ⟹ ?? Comment aller plus loin ? ⟹ Besoin d’une nouvelle approche 7 Tracé de rayon Pour chaque pixel, lancer un rayon trouver la primitive la plus proche intersectant le rayon Pour chaque rayon, trouver la primitive la plus proche intersectant le rayon Propagation d'un rayon à partir des pixels Scène = ensemble de primitives « intersectables » 8 Principaux intérêts Haute qualité par défaut § § § § 9 éclairage par pixel ombres projetés réflexions réfractions Projet : Lancer de rayons 10 Génération des rayons primaires Un rayon : r(t) = o + t d § origine o=(ox, oy, oz), direction d=(dx, dy, dz) avec ||d||=1 Hypothèse : “Pinhole camera” (sténopé) § § § § o : origine (point de vue) f : axe optique (vecteur vers le centre de l'image) x, y : axes sur l'image width, height : résolution de l'image for(i=0; i<width; i++) for(j=0; j<height; j++) { d = f + 2(i/width – 0.5)x + 2(j/height – 0.5)y; d = d/|d|; // normalisation color = ray_tracing(o, d); write_pixel(i,j,color); } 11 x y d o f Extension du modèle [Turner Whitted 1980] Trois nouveaux rayons sont générés : § un rayon réfracté*, § un rayon réfléchi*, § un rayon d'ombre ⟹ lancer de rayon récursif réflection réfraction En 1980, 74 min de calcul. 12 (*) formules réflexion et réfraction L’arbre des rayons Œil ombre Objet 1 réfracté réfléchi Objet 2 réfléchi 13 Source lumineuse ombre réfracté ombre Objet 3 réfléchi réfracté Encore plus de rayons [Cook et al.1984] Ombres douces plusieurs rayons par source de lumière étendue Source ponctuelle ombre 14 source ponctuelle Encore plus de rayons source ponctuelle [Cook et al.1984] Ombres douces plusieurs rayons par source de lumière étendue Source étendue source étendue pénombre 15 ombre pénombre Ombres douces source étendue Moyenner un grand nombre de sources ponctuelles 16 Ombres douces 17 1 source Ombres douces 18 2 sources Ombres douces 19 4 sources Ombres douces 20 16 sources Ombres douces 21 256 sources Encore plus de rayons [Cook et al.1984] Anti-aliasing § 1pixel ≠ 1 point ⟹ 1 pixel = petit élément de surface § idéalement : intégrer sur toute la surface du pixel § en pratique : plusieurs rayons par pixel et moyenner 1 rayon 22 2 rayons 3 rayons Encore plus de rayons [Cook et al.1984] Flou cinétique plusieurs rayon au cours du temps 23 Encore plus de rayons Image [Cook et al.1984] Profondeur de champ § plusieurs rayons par pixel en considérant une lentille § changements de direction dû à l'objectif 24 Distance focale Simulation avancée En pratique les optiques ne sont pas parfaites 25 Intersection rayon-scène Rayon : r (t) = o + t d o =(ox , oy , oz), d =(dx , dy , dz) ⟹ équation explicite Sphère : ||p - c||² - r2 = 0 c : centre de la sphère, r : rayon de la sphère ⟹ équation implicite Plan : (p - a)· n = 0 n : normale à la surface, a : un point sur le plan ⟹ équation implicite Triangle : partie d'un plan 26 Intersection rayon-sphère Rayon : r (t) = o + t d o =(ox , oy , oz), d =(dx , dy , dz) Sphère : ||p - c||² - r2 = 0 c : centre de la sphère, r : rayon de la sphère Point d’intersection ? r c d o 27 Intersection rayon-sphère Étant donnée l'équation de la sphère : ||x-c||² - r² = 0 c : centre de la sphère, r : rayon de la sphère Remplacer x par l'équation du rayon : t2 d.d + 2t d.(o-c) + ||o-c||² – r² = 0 équation du second degré en t discriminant négatif = pas d’intersection 2 racines : garder la plus proche positive (généralement t-) ⟹ Permet d'obtenir des sphères exactes d o 28 r c Intersection rayon-plan Rayon : r (t) = o + t d o =(ox , oy , oz), d =(dx , dy , dz) Plan : (p - a)· n = 0, ||n|| = 1 n : normale à la surface, a : un point sur le plan Point d’intersection ? n a 29 Intersection rayon-plan Équation du plan : x· n - D = 0 , |n| = 1 § Normale : n § Distance du plan au centre (0, 0, 0) : D = a . n Remplacer x par l'équation du rayon : (o + td)· n – D = 0 La solution devient : 4 cas: § § § § 30 t= D o·n d·n t infini ⟹ rayon parallèle et distinct du plan t non-défini ⟹ rayon confondu avec le plan t < 0 ⟹ intersection derrière la caméra t > 0 ⟹ intersection devant la caméra Intersection rayon-triangle (1) C Coordonnées barycentriques § § § § 1 Pour un triangle non-dégénéré ABC x = λ1A +λ2B + λ3C λ1 + λ2 + λ3 = 1 λ3 = Aire(ΔAxB) / Aire(ΔACB) 0 ⟹ Aire relative signée A x Test d'appartenance au polygone § à l'intérieur si tous les λi sont plus grand ou égal à zéro Interpolation des attributs aux sommets § normales, couleurs, coordonnées de texture, etc. 31 λ3 B Intersection rayon-triangle (1) Calculer l'intersection avec le plan § Attention aux cas tangents ! Test d'appartenance au polygone Possibilité de le faire en 2D projection sur un des plans du repère global (choix de l’axe en fonction de la normale) d = ignorer une coordonnée test avec les coordonnées barycentriques 32 n Intersection rayon-triangle (2) λ1 + λ2 + λ3 = 1 ⟺ λ3 = 1 - λ1 - λ2 Réécriture avec u = λ1 et v = λ2 : x = u A + v B + (1 – u + v) C = u (A – C) + v (B – C) + C C Système de coordonnées du plan non-orthogonal x(u,v) B A 33 Intersection rayon-triangle (2) Test d'intersection rapide § t : distance à l'origine § u,v : coordonnées dans le triangle (u,v dans [0,1]) o + td = u (A – C) + v (B – C) + C § Système de 3 équations à 3 inconnues, forme matricielle : [-d, A - C, B - C ][t, u, v]T = o - C M : matrice 3x3 § Optimisation : stopper dès que u ou v est négatif Méthode de référence ! « Fast, minimum storage ray-triangle intersection » Tomas Möller and Ben Trumbore, Journal of Graphics Tools, 1997 34 Intersection rayon-triangle (2) O Interprétation géométrique : M-1[O-C] O-C D B translation D B-C A Cramer's rule E1 = A avec E2 = B T =O C C 3 t 4 u 5= ⇥ v C où déterminant : |A B C| = D’où : 2 3 D 1 E1 (A ⇥ C) · B = 2 1 A-C C :2 v M-1 E2 2 ⇤4 1 T E 1 E2 D T E2 D E1 T (C ⇥ B) · A 3 2 u 3 5 3 t (T ⇥ E1 ) · E2 Q · E2 1 1 4 u 5= 4 (D ⇥ E2 ) · T 5 = 4 P ·T 5 (D ⇥ E2 ) · E1 P · E1 v (T ⇥ E1 ) · D Q·D 35 avec P = (D ⇥ E2 ) et Q = (T ⇥ E1 ) Intersection rayon-triangle (2) Avantages Möller-Trumbore : § Rapide produits scalaires et vectoriels (1 ÷, 27 ×, 17 ±) § Faible coût mémoire équation du plan pas stockée normale pas stockée § Coordonnées barycentriques en bonus ! 36 Boîte englobante alignée sur les axes y=Y2 y=Y1 x=X1 37 x=X2 Boîte englobante alignée sur les axes § § t2x y=Y2 § t2y t1x y=Y1 t1y x=X1 38 x=X2 Boîte = 6 plans Calculer toutes les intersections Conserver la plus proche à l’intérieur de la boîte Simplifier les calculs Chaque paire de plan a la mêmes normale § Une seule composante de la normale est non-nulle ⟹ considérer une dimension à la fois § t2x y=Y2 t2y t1x y=Y1 t1y x=X1 39 x=X2 Tester si le rayon est parallèle dx = 0 y=Y2 …et s’il n’y a pas d’intersection : ox < X1 ou ox > X2 (Idem en Y et Z, bien-sûr) d y=Y1 o x=X1 40 x=X2 Trouver les intersections par axe § t2x y=Y2 t2y Intervalle entre X1 et X2 t1x Intervalle entre Y1 etY2 y=Y1 t1y x=X1 41 § Déterminer un intervalle par dimension Calculer l’intersection de ces intervalles 1D x=X2 Intersection Intersection d’intervalles 1D t1y 42 tnear = max des mins tfar = min des max t1x t2y t2x Boîte englobante alignée sur les axes t2x tfar y=Y2 t2y tnear y=Y1 x=X1 43 § t1x = (X1 – ox) / dx § t2x = (X2 – ox) / dx puis : t1x t1y Calculer les distances d'intersection t1 et t2 pour chaque axe : x=X2 § tnear = max (t1x, t1y) § tfar = min (t2x, t2y) Boîte englobante alignée sur les axes Si tnear > tfar, pas d'intersection tfar tnear y=Y2 y=Y1 x=X1 44 x=X2 Boîte englobante alignée sur les axes Si tfar< tmin, la boîte est derrière tfar y=Y2 tnear y=Y1 x=X1 45 x=X2 Boîte englobante alignée sur les axes Si tnear> tmin, l'intersection se fait à la distance tnear tfar y=Y2 tnear y=Y1 x=X1 46 x=X2 Boîte englobante alignée sur les axes Sinon, elle se fait à tfar tfar y=Y2 tnear y=Y1 x=X1 47 x=X2 Intersection rayon-scène § § § § § § § § § § 48 Polygones : Quadriques, CSG : Torres : Patches bi-cubiques : Surfaces algébriques : Swept surfaces : Fractales : NURBS : Surfaces de subdivision : Points : [Appel ’68] [Goldstein & Nagel ’71] [Roth ’82] [Whitted ’80, Kajiya ’82, Benthin ’04] [Hanrahan ’82] [Kajiya ’83, van Wijk ’84] [Kajiya ’83] [Stürzlinger ’98] [Kobbelt et al. ’98, Benthin ’04] [Schaufler et al. ’00, Wald ’05] Problème de précision Un point n'est jamais exactement § sur le plan ou la sphère § dans le triangle Le calcul d'ombrage peut créer des ombres non-souhaités À cause des imprécisions, le point est juste derrière la surface 49 Transformations Deux options : 1. Laisser chaque primitive gérer ses transformations et calculer les intersections en espace monde § Compliqué pour certaines primitives (e.g., ellipses) § Coûteux lorsque le nombre de primitives est grand (e.g., transformer chaque triangle d’un maillage) 50 Transformations Deux options : 1. Laisser chaque primitive gérer ses transformations et calculer les intersections en espace monde 2. Transformer les rayons en espace objet oEM dEM r1 (x,y) r2 pEM = M pEO pEO = M-1 pEM oEO dEO r =1 Espace monde 51 Espace objet Transformer un rayon Nouvelle origine : oEO = M-1 oEM Nouvelle direction : dEO = M-1 (oEM + dEM) - M-1 oEM dEO = M-1 dEM oEM Attention, la composante w d’une direction est nulle ! dEM qEM = oEM + tEM dEM oEO dEO qEO = oEO + tEO dEO Espace monde 52 Espace objet Transformer un rayon Si M inclut une mise à l’échelle, la direction dEO n’est plus normalisée après transformation Deux solutions : 1. Re-normaliser la direction ⟹ tEM ≠ tEO ⟹ tEO doit être transformé après intersection tEM tEO Espace monde 53 Espace objet Transformer un rayon Si M inclut une mise à l’échelle, la direction dEO n’est plus normalisée après transformation Deux solutions : 1. Re-normaliser la direction 2. Ne pas re-normaliser ⟹ tEM = tEO ⟹ Pratique, mais attention ||dEO|| ≠ 1 lors des calculs d’intersection tEM tEO Espace monde 54 Espace objet Transformer les normales (rappel) Ne se transforme pas comme un point N T QN MN MT Quelle est la bonne transformation Q ? § Avant transformation : § Après transformation : > N · T = 0 , N>T = 0 (QN) (MT ) = N > Q> MT = 0 ) Q> M = I ) Q = (M 1 )> …pas en coordonnées homogène (seulement la matrice 3x3 supérieure) 55 Lancer de rayon : avantages Pas de calculs supplémentaires pour § § § § l’élimination des parties cachées les ombres la transparence le plaquage de textures (y compris procédurales) Inter-réflexions spéculaires entre objets Primitives graphiques quelconques § pas seulement pour les polygones ! 56 Lancer de rayon : limitations Arbre limité à une certaine profondeur § Les objets complexes peuvent avoir un problème (diamant, cristal…) Limité à Snell-Descartes § Tous les objets réfléchissant sont métalliques § Pas d’inter-réflexion entre objets diffus Lent § 95 % du temps est utilisé pour les intersections 57 Structures d’accélération Trouver l'intersection la plus proche § Tester l’intersection du rayon avec tous les objets § N objets, M rayons ⟹ O(NM) § Trop coûteux ! Objectif § Faire en sorte que la 1ère intersection calculée soit la bonne § En pratique : compromis Solution : partitionnement de l'espace (souvent hiérarchique) 58 Grille régulière 59 Grille régulière Construction § Subdivision de la boîte englobante § Résolution : souvent ~ 3√n § Une cellule : liste des objets l’intersectant Parcours § De proche en proche § De l'origine vers l'arrière § Arrêt si une intersection est trouvée 60 Parcours dans la grille 3DDDA Three Dimensional Digital Difference Analyzer Similaire à la rastérisation …mais on veut toutes les cellules intersectant le rayon 61 Initialisation Calculer l'intersection avec la boite englobante tmin (Attention, l'origine du rayon peut être dans la boîte) tmin tmin 62 L'intersection est répétitive Les intersections sur les axes sont équidistantes grilley dtx = grillex /dirx (dirx , diry ) 63 grillex Choisir la cellule suivante tnextx Calculer les 2 intersections suivantes avec les axes tnexty tnexty tmin tnextx tnexty tmin 64 tnextx Choisir la cellule suivante if tnextx < tnexty then i i + signx tmin = tnextx tnextx tnextx + dtx else j j + signy tmin = tnexty tnexty tnexty + dty end if Cellule(i,j) Cellule(i+1,j) tnexty tmin tnextx dty (dirx , diry ) if dirn > 0 then signn 65 1 else signn 1 end if Choisir la cellule suivante if tnextx < tnexty then i i + signx tmin = tnextx tnextx tnextx + dtx else j j + signy tmin = tnexty tnexty tnexty + dty end if Cellule(i,j) tnexty tnextx tmin (dirx , diry ) if dirn > 0 then signn 66 Cellule(i+1,j) 1 else signn dtx 1 end if Choisir la cellule suivante if tnextx < tnexty then i i + signx tmin = tnextx tnextx tnextx + dtx else j j + signy tmin = tnexty tnexty tnexty + dty end if Cellule(i,j) Cellule(i,j+1) tnexty tmin dtx (dirx , diry ) if dirn > 0 then signn 67 tnextx 1 else signn 1 end if Test à faire sur chaque cellule Intersection(s) dans la cellule ? § Oui : retourner la plus proche § Non : continuer Optimisation marquer les objets déjà testés (mais plus compliqué) 68 Grille adaptative : Octree 69 [Meagher '80] Grille adaptative : Octree Partitionnement hiérarchique de l'espace § Subdivise adaptivement chaque voxel en 8 sous-voxels de manière récursive § Différents critères possibles nombre de primitives par cellules ratio de « vide » 70 Question – 3 mn Comparer grille régulière et Octree 71 Comparaison Grille régulière ✓ construction facile et rapide ✓ parcours simple ✗nombreuses cellules vides ✗cellules avec beaucoup d’objets ✗choix de la résolution Octree ✓ initialisation rapide ✓ peu de cellules vides ✗parcours récursif couteux ✗convergence lente pour les zones complexes 72 Grille adaptative : BSP- et Kd-Trees Arbres binaires § Nœud = plan de subdivision de l'espace Binary Space Partition [Fuchs et al. 1980] § Plans quelconques « judicieusement » placés § Couteux à construire, stocker et utiliser § Kd-Tree [Bentley 1975, Fussell and Subramanian 1988] § Plans alignés sur les axes § Simple, léger et très efficace 1 1.2 1.1 1.1.1 73 1.1.1.1 KD-tree : définition Subdivision récursive 74 KD-tree : parcours récursif tmin < t⇤ < tmax ) Intersect(L,tmin ,t⇤ ) et Intersect(R,t⇤ ,tmax ) L tmin R t⇤ partition 75 tmax KD-tree : parcours récursif tmax < t⇤ ) Intersect(L,tmin ,tmax ) t⇤ tmin L tmax partition 76 KD-tree : parcours récursif t⇤ < tmin ) Intersect(R,tmin ,tmax ) R tmin t⇤ partition 77 tmax KD-tree : construction Algo « naïf » § Axe de coupe : le long de la plus grande dimension § Position de coupe : au centre ou médian de la géométries (arbre équilibré) § Critère d'arrêt : nombre de primitives, profondeur max. 78 KD-tree : construction Couper au milieu § Prob(Hit L) = Prob(Hit R) § Ne prend pas en compte le coût de L & R 79 KD-tree : construction Couper à la médiane § Cost(L) = Cost(R) § Ne prend pas en compte les probabilités d’entrer dans L et R 80 KD-tree : construction Algo « intelligent » § Objectif : choisir le plan de coupe qui rend le tracé de rayon le moins couteux possible § Définir un modèle de coût et le minimiser § Quel est le coût de tracer un rayon au travers d'une cellule ? Cost(cell) = C_trav + Prob(hit L) x Cost(L) + Prob(hit R) x Cost(R) 81 KD-tree : construction Optimisation de la fonction de coût § Isole automatiquement et rapidement les zones complexes § Génère de grands espaces vides / concentre les primitives dans de petits nœuds 82 KD-tree : construction [MacDonald and Booth 1990] Probabilité de rentrer dans une cellule ⟹ proportionnel à l'aire de la surface de la cellule (SA) Coût de parcours d'une cellule ⟹ nombre de triangles (TriCount) Cost(cell) = C_trav + Prob(hit L) x Cost(L) + Prob(hit R) x Cost(R) = C_trav + SA(L) x TriCount(L) + SA(R) x TriCount(R) Critère d'arrêt ⟹ quand subdiviser ne réduit plus le modèle de coût (seuillage) Résultats ⟹ un « bon » KD-tree est de 2 à 5 fois plus rapide 83 Boites englobantes Intersection avec une boite englobante conservative ⟹ rejeter certains rayons au plus tôt 84 Boites englobantes Sphère englobante Boite englobante non-alignée sur les axes Boite englobante alignée sur les axes Région convexe arbitraire 85 Hiérarchie de boites englobantes BVH = KD-tree avec 1 boîte par nœud 86 BVH : intersection Tester la boîte parente 87 Hiérarchie de boites englobantes Si Intersection, descendre sur les fils Tester la boîte avec l'intersection la plus proche 88 Hiérarchie de boites englobantes Attention, les boîtes peuvent se superposer ! ⟹ vérifier si la plus proche intersection n’est pas incluse dans la 2nde boîte 89 Question – 3 mn Comparer KD-tree et BVH 90 Comparaison KD-tree § léger en mémoire (si bien codé) § parcours simple et rapide § construction optimale plus facile BVH § arbre moins profond § permet de décaler légèrement un objet sans avoir à reconstruire entièrement l'arbre Conclusion § Scènes statiques ⟹ KD-tree § Scènes dynamiques ⟹ BVH (les préférences semblent converger vers le tout BVH) 91 Lancer de rayon cohérent Idée : 2 rayons proches ont de fortes chances d'intersecter la même primitive § § § § Tracer des paquets de KxK rayons en même temps (e.g., 8x8) Amortissement du coût de traversée de l'arbre Permet d'exploiter au mieux les instructions SIMD (e.g., SSE) Réduit les défauts de cache Gros facteur d'accélération (~ x10) Attention aux rayons secondaires ! (vectorisation par rayon préférable) 92 [Wald et al. EG 2001] Parallélisation Plusieurs possibilités : § distribution image § distribution scène § distribution rayon / fonctionnelle Dépend de l'architecture de la machine, souvent combinaison des 3 ! Exemple (quake4 RT, distribution image) 93 Cohérence + Parallélisation Exemple : Intel Embree [Wald et al. Siggraph 2014] Kernels bas-niveau optimisés + API 94 Lancer de rayon temps réel Exploitation des GPU Structures de données sophistiquées Peu adaptées aux GPU des générations précédentes OK pour les GPU les plus récents, et futures 95 KD-tree GPU Scènes animées : Real-Time KD-Tree Construction on Graphics Hardware Zhou et al. SIGGRAPH 2008 96 BVH GPU Fast BVH Construction on GPUs, Lauterbach et al., Eurographics 2009 97 Lancer de rayon sur GPU Nvidia OptiX [Parker et al. Siggraph 2010] bibliothèque bas-niveau destinée aux développeurs structure de données : *BVH génération des rayons entièrement configurable Autres § § § § § 98 Lightworks : basé sur OptiX Arion : GPU(CUDA)/CPU OctaneRender (CUDA) V-Ray RT (OpenCL) …