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)
…