Cours Monde3D 2017 09-Geometry
Cours Monde3D 2017 09-Geometry
Cours Monde3D 2017 09-Geometry
(des surfaces)
gael.guennebaud@inria.fr
http://www.labri.fr/perso/pbenard/teaching/mondes3d
2
Programme
1) Intro + Intro lancer de rayons (GG)
2) Modèle d’éclairage local, BRDFs (PB)
3) Lancer de rayon++ (PB)
4) OpenGL : rasterisation, Z-buffer, pipeline (GG)
5) Transformations de l'espace (PB)
6) Compléments OpenGL (PB)
7) Textures (GG)
8) Géométrie : tour d'horizon (GG)
9) Géométrie : courbes paramétriques (Bézier, BSpline) (GG)
10) Géométrie : surfaces de subdivision / halfedge (GG)
11) Animation : intro, forward/inverse kinematics (PB)
12) Animation : skinning + déformation (PB)
3
Modélisation géométrique ?
Construction / Design
• Maquette virtuelle
– Contraintes de fabrication (continuité, découpage, assemblage, résistance, …)
5
Simulations
• Modèles en entrées
• Mesures pour les
modèles physiques
• Extraction de surfaces
6
Domaine médical
Reconstruction de surface
synthèse
fabrication
représentation
acquisition numérique
analyses &
mesures
création
optimisation & traitements
déformations & conversions
Programme
• Préliminaires
• Courbes/surface paramétriques
– Bézier, Bspline, NURBS
– Produit tensoriel
• Maillages :
– surfaces de subdivisions
– half-edges
Modélisation Géométrique
• Dimensions
– Dimension de l' « espace ambiant »
• Ex : courbe dans le plan (R^2) ou dans R^3, ou dans R^d
• Manifold (variété)
un manifold de dimension n est un espace topologique de dimension n qui est
en tout point localement homéomorphe à un espace Euclidien de dimension n
y
« C-1 »
f
x0 x
Si f - (x0) = f + (x0) et fx - (x0) ≠ fx + (x0)
y y fx
f C0
x
x0 x x0
Continuité d'une courbe
Si f - (x0) = f + (x0) , fx - (x0) = fx + (x0) et fxx - (x0) ≠ fxx + (x0)
C1
y f y y fxx
fx
x
x0 x x0 x x0
Si f - (x0) = f + (x0) , fx - (x0) = fx + (x0) , fxx - (x0) = fxx + (x0) et fxxx - (x0) ≠ fxxx + (x0)
y y C2
y
f fx fxx
x0 x x0 x x0 x
Continuité
• C^-1 : trous
• C^0 : arêtes franches
• C^1 : « lisse » mais reflets avec
des coins
• C^2 : reflets lisse
• C^3 : etc.
Tangentes (C^1 ou plus)
• Surfaces :
– plan tangent : ensemble de toutes les droites tangentes en un point
– vecteur normal : vecteur orthogonal au plan tangent
19
Orientabilité
20
Courbure normale
22
Courbures principales
23
Point d'inflexion
Genus
Générer une surface à partir de courbes
• Surface de révolution
– courbe + révolution autour d'un axe
Formes remarquables
28
• Définitions (intuitives) :
– Une propriété ou mesure d'une courbe ou surface est dite intrinsèque si elle
ne dépend pas du plongement de l'objet dans l'espace ambiant.
• Exemples :
– Vecteurs tangents : ?
– Vecteur normal : ?
– Distance géodésique : ?
– Courbure d'une courbe : ?
– Courbures principales : ?
– Courbure moyenne : ?
– Courbure Gaussienne : ?
– Déformation isométrique (qui préserve les distances) : ?
Modélisation Géométrique
– Forme paramétrique
→ courbe paramétrique, surface paramétrique
– Forme implicite
→ équation cartésienne, surface implicite, iso-curve, iso-surface
• Cas particulier : représentations volumiques discrètes
Surface paramétrique
v
s
s(M)
u
32
s
u s(M)
33
Difficulté : paramétrisation ?
« champ de hauteur »
(ou « graphe » ou « patch de Monge »)
• Courbe : y(x) = ...
• Surface : z(x,y) = …
– ex : image en niveau de gris
– cas particulier des surfaces paramétriques,
beaucoup plus simple
– paramétrisation implicite
– pas de repliement possible
– Notion de « +0.5D »
35
Surfaces Implicites
S = { x∈ Rd ; f (x)=0 } , f : Rd → R
– Courbe, exemple :
courbes de niveaux d'un champ de hauteur
– Notion de volume,
connaissance de l'intérieur & extérieur
– Cas particulier :
f = distance à la surface
– Difficultés :
• où est la surface ? → comment contrôler la surface ?
• pas de paramétrisation naturelle
n' = M * n correct
=> Faux !
• Représentation explicite
discrète
(ex. maillage dense)
• + contraintes
& processus d'optimisation
• Exploite la puissance
de calcul des processeurs
38
Courbes paramétriques
Intro géométrie différentielle
• Torsion dB ṗ . p̈∧ p
= N =
ds ∥ ṗ∧ p̈∥
2
– Si torsion=0 ? Si courbure = 0 ?
Qques preuves
• D'où,
dT est orthogonal au vecteur tangent T, et par définition, est aligné avec N
ds
et
d
∥ ṗ∥2 p̈− ṗ ∥ ṗ∥2
dT d ṗ du N
κ= ⋅N = ⋅N = ⋅N
ds du ∥ ṗ∥2 ∥ ṗ∥4
θ p̈
p̈⋅N sin θ ∥ ṗ∥∥ p̈∥ ∥ ṗ∧ p̈∥
= = =
∥ ṗ∥2 ∥ ṗ∥3 ∥ ṗ∥
3
θ ṗ
Cubique d'Hermite
2 3
x(u) a 0 +b 0 u+c 0 u +d 0 u
( )(
p(u)= y(u) = a1 +b1 u+c1 u 2 +d 1 u3
z (u) a 2 +b 2 u+c 2 u 2 +d 2 u3 )
Cubique d'Hermite
• Courbes de Bézier
– Objectifs : généraliser aux degrés supérieurs, manipulations plus simple
– Somme de fonctions de bases
→ combinaison affine/centre de masse,
→ enveloppe convexe si poids > 0
– Reformulation de la forme :
n n
n d
p(u)=∑ Bi (u) P i u∈[a , b] ∑ Bi (u)=1 ∀ u∈[a , b]
i =0 i=0
– B = Polynomes de Bernstein :
n n!
n
i
n
i
B u= u i 1−u
n−i
, i=0,... , n =
i i ! n−i !
Courbes de Béziers
• Propriété n n
n i
– partition de l'unité :
n
1=( u+ ( 1−u ) ) =∑
i=0
()
i
n−i
u ( 1−u ) =∑ B in (u)
i=0
– symétrique
– positif sur [0:1]
– combinaison affine de n+1 points (degré=n, ordre=n+1)
– portée des fonctions de bases
Graphe des polynômes de Bernstein
n=1 n=2
n=3 n=6
Exemples de courbes de Bézier
P1 P2
P5 P6
P1
P2
P0
P3
0
P0
P4
P3
Enveloppe convexe
La courbe est inclue dans l'enveloppe convexe de son polygone de contrôle (car les polynômes
de Bernstein sont positifs sur [0,1]).
P5 P6
P1
P2
P4
P0 P3
Boîte englobante
P5 P6
P1
P2
P4
P0 P3
Bezier
• Algorithme de De Casteljau
– Récursivité :
n1 n n
• D'ou : Bi u=u B i−1 u1−u B i u
• D'ou : n n−1 0
n 0 n−1
p u=∑ B u P =∑ B i i i u P ==∑ B0i u P in = P n0
1
i
i=0 i=0 i=0
P20
P11
P1 0
P21
k +1 k k P12
P i =(1−u) P +u Pi i +1
P30
P03
P01 P02
P00
Bezier
• Algorithme de De Casteljau
– Propriétés différentiels : tangent et plan osculateur
– Applications :
• discrétisation, visualisation
• subdivision
Propriété de variation
Une courbe de Bézier ne peut pas avoir plus d'intersections avec
une droite que le maximum d'intersection possible entre son
polygone de contrôle et une droite quelconque.
P20
P10
P30
Au plus 2 intersections
P00 entre la courbe et une droite
Exercices :
Quel impact a cette propriété sur les oscillations de la courbe ?
Que peut-on dire des oscillations des morceaux de courbe lorsque l'on subdivise ?
Raccordement de deux courbes
Exercice :
soient deux courbes de Bézier :
p(u) de degré n, u dans [0,1], points de contrôle Pi
q(v) de degré m, v dans [0,1], points de contrôle Qj
Donnez les conditions sur les polygones de contrôle pour que les courbes soient raccordées
en u=1 et v=0 avec :
une continuité C0
une continuité G1
une continuité C1
une continuité C2
Exemple de modélisation de courbe
complexe
• Avantages :
– contrôle intuitif
– courbe incluse dans le polygone convexe
– simplicité de mise en oeuvre
• Désavantages :
– support global
– degré lié au nombre de points de contrôle
Les courbes B-spline
Les courbes B-spline sont plus « souples » que les courbes de Bézier. Elles
permettent notamment un contrôle local de la courbe à partir des points de
contrôle. Ici encore, chaque point de contrôle est associé à une fonction de
base :
n
p u=∑ N ki u P i , u min uu max
i =0
Les Nik sont les fonctions de base d'ordre k et le degré de la courbe est k-1.
u0 , u1 ,, u k n u j u j1 ∀ j
1 , ui ⩽u<ui +1
N 1i (u)= {
0 , sinon
k u−u i k −1 u i+ k −u k −1
N (u)=
i N i (u)+ N i+1 (u)
ui + k −1−u i u i+k −ui+1
Comment contrôler une B-spline ?
• Exemples :
– Déplacer un point de contrôle
– Ajouter un point de contrôle
– Utiliser un point multiple
– Changer l'ordre k
– Changer le type de vecteur nodal (uniforme, ouvert uniforme, ...)
– Changer l'espacement des noeuds uj dans le vecteur nodal
– Utiliser des noeuds multiples dans le vecteur nodal
• Exercices :
– Comment créer un « coin » ?
– Comment définir une courbe fermée ?
– Application aux champs de hauteurs ?
NURBS
Modélisation Géométrique
Surfaces paramétriques
Définition générale
Une surface paramétrique dans l'espace R3 est définie par une
fonction f : 3
f : D× E ℝ
x u , v= f x u , v
u ,v
{
p u , v= y u , v= f y u , v
z u , v= f z u , v
p(b,d)
p(u,d)
p(b,v)
p(a,d)
p(b,c)
p(a,v)
p(u,c)
p(a,c)
Exemple : surface paramétrique
à partir de 2 courbes
• Surface de révolution
– courbe + révolution autour d'un axe
a 33 a 32 a 31 a 30 v3
p u , v=U AV T = [ u 3 u 2
[
a
u 1 ] 23
a 13
a 03
a 22
a 12
a 02
a 21
a 11
a 01
a 20
a 10
a 00
][ ]
v2
v
1
S11
Les points de contrôles S12 S21
sont les sommets Sij
du maillages et ils S22
sont numérotés dans
les directions de u et S02 S31
S23 S32 S20
de v
S13
S01 S10
S33
Les (n+1) points de
contrôle en u donnent le S03 S30
degré n des courbes en
u. Ici n = 3.
v
Les (m+1) points de u
contrôle en v donnent le
degré m des courbes en
S00
v. Ici m = 3.
Produit tensoriel : principe
Une façon de construire surface paramétrique est de faire le produit
tensoriel de deux courbes paramétriques. Une courbe fd(u) est
appelée courbe directrice et l'autre courbe fg(v) est appelée courbe
génératrice.
La surface est obtenue en déplaçant et déformant la courbe
génératrice le long de la courbe directrice.
génératrice
directrice
Carreaux de Bézier : produit tensoriel
Pour évaluer un point p(u0,v0) sur la courbe, on effectue un produit tensoriel :
Si nous choisissons les directrices dans la direction de u
Il y a une directrice dj(u), (j=0..m) par polygone de contrôle dans la direction des u
Le polygone de contrôle de la
directrice dj(u) est défini par
les points de contrôle Sij
(i=0..n)
d2(u)
d1(u)
Une directrice est une courbe de
Bézier définie par :
n
d3(u)
n
d j u=∑ B i u S ij
i=0
v do(u)
u
Carreaux de Bézier : produit tensoriel
Pour chaque directrice (en rouge), on évalue le point dj(u0) :
n
n
d j u 0 =∑ Bi u 0 S ij , j=0. . m
i =0
d1(u0)
d2(u0)
Les dj(u0) sont les sommets du
polygone de contrôle (en
bleu) de la courbe
génératrice g(v) : d3(u0)
m do(u0)
m
g v = ∑ B v d j u 0
j
j=0
v
u
Carreaux de Bézier : produit tensoriel
La génératrice est sur la surface et le
point de la surface p(u0,v0) est alors
celui de la courbe génératrice g(v) en d1(u0)
v=v0 d2(u0
m
m
)
g v 0 =∑ B j v 0 d j u 0
j=0 g(v0)
d3(u0)
do(u0)
g(v0) = p(u0,v0)
v u
n, m
n,m 2
p u , v= ∑ Bij u , v S ij , u , v∈[0,1]
i=0, j =0
B023,3 B123,3
1
Bijn,m(u,v) v
B01 3,3
B113,3 0
0
0
u
1
B003,3 B103,3
Modélisation Géométrique
Surfaces de subdivision
gael.guennebaud@inria.fr
http://www.labri.fr/perso/guenneba/mg_2016
Surfaces paramétriques
Les carreaux de Bézier (1960)
Les surfaces splines (B-spline, NURBS,...)
standard pour la construction et l'animation
m1 n1
k l
p u , v = ∑ ∑ N i u N j v P i , j
i=1 j=1
+
Modélisation par carreaux type couture
Chaque carreau est défini par un polygone de contrôle
-
Difficulté de contrôle des connections inter-carreaux
Difficulté d'ajuster la surface à un polygone de contrôle quelconque
Exemple de subdivision
• Maillage
initial
Exemple de subdivision
• Le maillage
après un pas
de subdivision
Exemple de subdivision
• Le maillage
après deux pas
de subdivision
Exemple de subdivision
• La surface
limite
Un standard pour l'animation
Pixar 1997 : Geri's game
• Les NURBS sont abandonnées au profit des surfaces de subdivision
– Un maillage grossier est directement subdivisé pour produire une surface lisse
– La multi-résolution est « gratuite » : un objet peut être représenté/modifié à
différents niveaux de subdivision
1 6 1
• Les sommets sont
déplacés par une
1 6 36 6 combinaison
64 affine des
sommets du
maillage
1 6 1
Principe de subdivision
4 4 • Des nouveaux
sommets sont
1 ajoutés par une
64 combinaison
24 24 affine des
sommets du
maillage
4 4
Principe de subdivision
16 16 • Des nouveaux
sommets sont
1 ajoutés par une
64 combinaison
16 16 affine des
sommets du
maillage
Principe de subdivision
• Le processus de
déplacement /
insertion est
répété sur
l'ensemble du
polygone initial
Principe de subdivision
• Les nouveaux
points sont
maillés
Principe de subdivision
1 pas de subdivision :
2 pas de subdivision
3 pas de subdivision
Après une infinité de subdivisions les polygones convergent vers une courbe limite
Le polygone initial est un polygone de contrôle de la courbe limite
Chaque nouveau polygone est un polygone de contrôle de la courbe limite
Les Box-spline
Dans le cas des courbes (un seul paramètres, ou spline univariée), les
Box-spline ont les mêmes fonctions de base que les B-spline
uniformes. Ainsi la seule différence entre courbes Box-spline et
courbes B-spline, c'est que le vecteur nodal des courbes Box-spline
est obligatoirement uniforme alors que celui des courbes B-spline
peut être quelconque.
Subdivision et Box-spline
Une courbe Box-spline est définie par son polygone de contrôle.
Appliquer un pas de subdivision dyadic revient créer un nouveau
polygone de contrôle définissant la même courbe et ayant le double
de points de contrôle.
pi0 pi+10
p2i1 p2i+1 p2(i+1)1
1
p2(i-1)1
p2i-11 p2i+31
pi-10 pi+20 p2(i+2)1
•
k
k=3 1 k
n
k
N u=
i
2
k −1 ∑
l =0
l
k
N 2il 2u
•
k
k=3 1 k
n
k
N u=
i
2
k −1 ∑
l =0
l
k
N 2il 2u
•
k
k=3 1 k
n
k
N u=
i
2
k −1 ∑
l =0
l
k
N 2il 2u
• k=4
n
p(u) = ∑ N i4 (u) p0i =...
i=1
n
4 p0i−1 +6 pi0 + p0i+1 4 4 p0i +4 p i0+1
= ∑ N (2u)
2i + N 2i+1 (2u)
i=1 8 8
Des courbes aux surfaces
- les schémas les plus utilisés –
1 4 6 4 1
1
64
[ 4 16 24 16 4
6 24 36 24 6
4 16 24 16 4
1 4 6 4 1
]
Catmull-Clark : règles de subdivision
D'où les règles de subdivision (stencils) pour le cas régulier :
1 6 1 4 4 16 16
1
1 1 64
64 6 36 6 24 24 16 16
64
1 6 1 4 4
Afin de s'adapter à un maillage quelconque, le schéma est appliqué avec la formule suivante :
Les points de face sont les équibarycentres des sommets de chaque face originelle
Les points d'arête sont les équibarycentres des deux sommets de l'arête et des deux nouveaux
points de face des deux faces adjacentes à l'arête
Les anciens sommets de valence n sont replacés selon l'équation suivante :
Q est l'équibarycentre des nouveaux points de face des faces passant par
l'ancien sommet
1
Q2RS n−3 R est l'équibarycentre des milieux des arêtes passant par l'ancien sommet
n
S est l'ancien sommet
Catmull-Clark : exemple
Exercices
Montrez que les règles dépendantes du nombre n d'arêtes sortantes
du sommet subdivisé (valence) sont équivalentes aux règles de
subdivision classiques quand n=4.
Schéma de Loop
z22 1 1 2
1 1
z2 16
1 10 1
16 6 6
1 1 2
1 z1 z 12
anciens sommets insertion
Loop aux sommets irréguliers
Déplacement d'un sommet de valence n :
β
β
2
1−nβ
β
β =
1 5 3 1
− cos
n 8 8 4
2
n
1
16 6 6
2
Arêtes franches pour Loop
et Catmull-Clark
Arêtes : plis ou bords
On applique le schéma de la Box-spline cubique univariée dont les règles de subdivision sont les
suivantes :
Insertion
1 1
2 2
Déplacement
6
c 8
c
c 1
1 8
8
Exercice
Sommets extraordinaires
Sommets extraordinaires
• Heuristiques :
108
LOD
(Level Of Details)
109
LOD : Objectif
• Observations :
– objet détaillé → énormément de polygones
– coût de rendu = fonction du nombre de polygones
– taille des polygones en espace image = fonction de la distance à l'observateur
→ objet lointain → nombreux micro polygones se projetant sur un même pixel
• Idée :
– adapter la résolution (le nombre de polygones) du maillage en fonction du
point de vue
• Défis :
– comment calculer des versions simplifiées du maillage ?
– comment choisir la résolution adaptée ?
– comment rendre cela efficace du point de vu du GPU ?
LOD discret
• Différentes représentations du même objet sont
calculées, chacune à un niveau de détail différent.
Pendant l'exécution de l'application, une
représentation de l'objet est sélectionnée et visualisée.
LOD LOD
LOD discret
• Critères ?
– Minimiser la distance entre le maillage simplifié
et le maillage original
– Distance de Hausdorff
• difficile en pratique
– Heuristiques...
Edge collapse
Edge
collapse
Vertex split
Quand ne pas utiliser “Edge collapse”
Edge
collapse
Edge
collapse
114
Edge flip
• Edge flip
– uniformiser les valences
– aligner les arêtes avec les angles saillants
Edge flip
• Améliorations :
– contracter plusieurs arêtes en même temps
– passe de edge-flip pour régulariser le maillage
– prise en compte de différents critères dans le calcul de l'erreur (géométrie,
normales, texture, forme des triangles, etc.)
LOD continu
• Métrique d'erreur
– Dépend de nombreux facteurs
• distance à l'observateur, résolution de l'image,
• orientation, courbure,
• attributs, éclairage, effets de masquage,
• texture, etc.
120
Halfedges
• Objectifs
– Accès rapide aux informations géométriques et topologiques
– Représentation compact (faible cout mémoire)
• Principe
– une arêtes est décomposée en deux demi-arêtes orientées
• pour chaque demi-arête, on mémorise :
– la demi-arête opposée (6)
– le sommet vers lequel elle pointe (3)
– la face à laquelle elle appartient (4)
– la demi-arête suivante (5)
– la demi-arête précédente (7)
– chaque sommet contient un pointeur sur une demi-arête sortante (1)
– chaque face, un pointeur vers une de ses demi-arête (2)
122
Halfedges
• Implémentation(naive):
struct HalfEdge {
HalfEdge *next ;
HalfEdge *opposite ;
Face *face ;
Vertex *vertex;
/* attributes */
} ;
struct Face { v→he
HalfEdge *he;
/* attributes */
h→n
} ; v
h→
v tx
ext
struct Vertex { f
HalfEdge *he; h→op.
/* attributes */
} ; h→
fac f→he
e
struct Mesh {
std::vector<HalfEdge> halfedges ;
std::vector<Vertex> vertices;
std::vector<Face> faces;
} ;
123
Halfedges
struct HalfEdge { struct Vertex { HalfEdge *he; };
HalfEdge *next ;
HalfEdge *opposite ; struct Mesh {
Face *face ; vector<HalfEdge> halfedges ;
Vertex *vertex; vector<Vertex> vertices;
}; vector<Face> faces;
struct Face { HalfEdge *he; }; } ;
h→n
v
h→
...
v tx
ext
f
h→op.
h→
fac f→he
e
124
Halfedges
struct HalfEdge { struct Vertex { HalfEdge *he; };
HalfEdge *next ;
HalfEdge *opposite ; struct Mesh {
Face *face ; vector<HalfEdge> halfedges ;
Vertex *vertex; vector<Vertex> vertices;
}; vector<Face> faces;
struct Face { HalfEdge *he; }; } ;
h→n
v
h→
HalfEdge *h = f.he;
v tx
ext
do { f
h→op.
cog += h->vertex->position; h→
fac f→he
e
h = h->next ;
} while (h!=f.he) ;
127
Halfedges
struct HalfEdge { struct Vertex { HalfEdge *he; };
HalfEdge *next ;
HalfEdge *opposite ; struct Mesh {
Face *face ; vector<HalfEdge> halfedges ;
Vertex *vertex; vector<Vertex> vertices;
}; vector<Face> faces;
struct Face { HalfEdge *he; }; } ;
h→n
v
h→
...
v tx
ext
f
h→op.
h→
fac f→he
e
128
Halfedges
struct HalfEdge { struct Vertex { HalfEdge *he; };
HalfEdge *next ;
HalfEdge *opposite ; struct Mesh {
Face *face ; vector<HalfEdge> halfedges ;
Vertex *vertex; vector<Vertex> vertices;
}; vector<Face> faces;
struct Face { HalfEdge *he; }; } ;
h→n
v
h→
HalfEdge *h = v.he;
v tx
ext
do { f
h→op.
cog += h->vertex->position; h→
fac f→he
e
h = ????
} while (h!=v.he) ;
129
Halfedges
struct HalfEdge { struct Vertex { HalfEdge *he; };
HalfEdge *next ;
HalfEdge *opposite ; struct Mesh {
Face *face ; vector<HalfEdge> halfedges ;
Vertex *vertex; vector<Vertex> vertices;
}; vector<Face> faces;
struct Face { HalfEdge *he; }; } ;
h→n
v
h→
HalfEdge *h = v.he;
v tx
ext
do { f
h→op.
cog += h->vertex->position; h→
fac f→he
e
h = h->opposite->next ;
} while (h!=v.he) ;
130
Halfedges
Halfedge
• Mise en œuvre
– utilisation aisée
– mise en oeuvre robuste des opérateurs assez complexe
• Bibliothèques open-sources
– SurfaceMesh (http://graphics.uni-bielefeld.de/publications/imr11/)
– OpenMesh (http://www.openmesh.org)
– VCG-lib (http://vcg.sf.net - MeshLab)
– CGAL – http://www.cgal.org
et le GPU....
LOD hybride
+ =
Displacement Maps
• Simplification de maillage
– + displacement map (offset le long de la normale, ou vecteur 3D)
– + normal map
• Compact : pas de coordonnées 3D, pas
Cas particulier : terrain
Mount Rainier
Olympic
Mountains
Geometry clipmaps [Losasso04]
• En entrée
– une primitive (POINT, LINE, TRIANGLE)
• = tableau des sommets (+ attributs) en sortie du vertex shader
• En sortie
– gl_Position + variables « out »
• EmitVertex() pour générer un sommet
• EndPrimitive() pour finaliser une primitive
– POINTS, LINE_STRIP, TRIANGLE_STRIP
– peut être différent du type en entrée (POINT → TRIANGLE)
– variables en sorties (out) interpolées par le raster et deviennent entrées du
fragment shader
– on peut générer plusieurs primitives (ou zéro → culling)
• Feedback-buffer
– les sommets en sortie peuvent être empilés (sauvegardés) dans un VBO
– permet de mettre en cache la géométrie ainsi générée
Geometry Shader
layout (triangles) in;
layout (triangle_strip, max_vertices=6) out;
uniform mat4 mat_mvp;
in vec3 in_normals[3];
in vec3 in_positions[3];
out vec3 out_normal;
void main() {
• Limitations
– efficace uniquement si le nombre de primitives générées est ~ constant
• en caricaturant :
– cost = #input_primitives * #max_output_vertices
– peu efficace pour faire du raffinement, LOD, …
• Applications
– Occlusion culling
– Rendu dans les 6 faces d'une cube map en une seule passe
– Shadow volume : génération des faces des volumes d'ombres
– Silhouette drawing, Line drawing (outline)
– Fourrure
– etc.
Tessellation Engine
Patch
Vertex Shader
Tessellator
Geometry Shader
Rasterization
Fragment Shader
Tessellation Engine
• En entrée
– Nouveau type de primitive : « patch »
• nombre arbitraire de sommets (points de contrôle), pas de topologie
– ex. : NURBS
• Vertex Shader
– transformation des points de contrôle
• ex. : animation, déformation, skinning, etc.
• → calculs couteux réalisés à une plus faible résolution
Tessellation Engine
• Tessellator
– Base → Triangles + uv(w) (coordonnées barycentriques)
– Non programmable
– Symétrique
• Idée
– Remplacer chaque triangle par un triangle de Bézier
– Points de contrôles dépendent des normales
C^0 seulement !
PN – triangles
Entrée :
* points de contrôles
(triangle grossier)
Tessellation
Control Entrée :
Sortie : * niveaux de tessellation
* points de contrôles
du triangle de Bézier Tessellator
Sortie:
* coordonnées u,v,w
Tessellation
Evaluation
Sortie:
* un sommet interpolé