L’attributo più comune:
la normale
Vettore direzione unitario
Rappresenta l’orientamento della superficie Usato per il lighting
A volte, calcolate automaticamente dalla geometria
…
Ma l’artista decide quali edges sono
softe quali hard
(1)
v3 v1
v2
(2)
Calcolo normali dalla geometria
Geometria
=(1)=>
normali x faccia
=(2)=>
normali x vertice
e1
e2
e1×e2
N ˆ
v1
Nˆ
2
Nˆ
3
Nˆ
4
Nˆ
5
Nˆ
6
Nˆ
Nn
N N
N
ˆ ˆ ... ˆ
2
1
+ + +
=
|
| ˆ
N N = N
Calcolo normali dalla geometria
Nota:
l’orientamento delle facce deve essere coerente
1
3 2 1
3 2
senso opposto, edge coerente A
B C
D
Coherently oriented faces:
can you check it?
V2
V3
V5 V4
V1
T1
T2
T3
Tri:
Wedge 1:
Wedge 2:
Wedge 3:
T1 V4 V1 V2
T2 V4 V2 V5
T3 V5 V2 V3
vert X Y Z R G B
V1 x1 y1 z1 r1 g1 b1 V2 x2 y2 z2 r2 g2 b2 V3 x3 y3 z3 r3 g3 b3 V4 x4 y4 z4 r4 g4 b4 V5 x5 y5 z5 r5 g5 b5 GEOMETRIA + ATTRIBUTI
CONNETTIVITA’
Crease edges
(aka “hard edges”)
Edges di discontinuità delle normali.
Come si ottiene una discontinuità(C0) negli attributi?
No Creases:
(all edges “soft”)
With Creases:
(red edges “hard”)
risposta:
Vertex seams
Vertex seam = due vertici coincidenti in xyz
(attributi diversi assegnati ad ogni copia)
es: vertex seams per implementare hard edges
a literal
“seam”
Vertex seams
Necessari per ogni discontinuità di attributo Replicazione dati… un male necessario)
Tri:
Wedge 1:
Wedge 2:
Wedge 3:
T1 V4 V1 V2
T2 V4 V2 V5
T3 V5 V2 V3
vert X Y Z R G B
V1 x1 y1 z1 r1 g1 b1 V2 x2 y2 z2 r2 g2 b2 V3 x3 y3 z3 r3 g3 b3 V4 x4 y4 z4 r4 g4 b4 V5 x5 y5 z5 r5 g5 b5
GEOMETRIA + ATTRIBUTI
CONNETTIVITA’
Mesh processing
aka Geometry Processing
Librerie:
VCG-Lib(CNR, )
Vision and Computer Graphic Lib
OpenMesh(RWTH, de ) + open flipper
CGAL(INRIA, )
Computational Geometry Algorithms Library
(tutte: C++, open-source.)
Mesh processing
aka Geometry Processing
Un buon manuale x programmare mesh processing:
Reminder:
note sulla risoluzione delle mesh
costo: lineare con il numero di triangoli
in memoria (disk, CPU RAM, GPU RAM) in tempo (di rendering, di caricamento, etc)
(e, num. vertici lineare con num. triangoli)
(rule of thumb: K verts 2K tris)
reminder: risoluzione adattiva possibile
higher-res in alcune zone lower-res in altre
Risoluzione e
qualità di rendering
Una piramide di Livelli di Dettaglio
p e r f o r m a n c e
q u a l i t y
Piramidi LoD
(Level Of Detail)
LoD 1
2K faces
LoD 2
400 face
LoD 3
160 faces
LoD 4
60 faces
usare quando visto da vicino
usare quando visto da lontano
Piramidi LoD
(Level Of Detail)
<5 m 5m ..10 m 10 .. 30 m >30 m
Piramidi LoD
(Level Of Detail)
Scopo:
diminiuire iltriangle budget (numero totale di triangoli)
ideale: dim. dei triangoli in spazio schermo (in pixel): costante a parità di elementi come importanza / compl
Task: determinazione del Livello da usare (dinamicamente)
a seconda della distanza dall’osservatore a seconda del carico di rendering
es: lagging rendering diminumizione delle soglie (task del rendering engine)
Task: costruzione dei LOD (asset creation)
a partire dal LOD-0 (higer-res)
manuale, o assistita, o automatica… (vedi poi) spesso, manuale
a volte: un “LoD -1” extra, usato solo in scene particolari e.g. (procedural) cut-scenes
calcolata dallo scene graph
Piramidi LoD
(Level Of Detail)
LOD 0 (mesh)
GEOMETRIA + ATTRIBUTI CONNETTIVITA’
LOD 1 (mesh)
GEOMETRIA + ATTRIB C
ONNET.
LOD 2 (mesh)
G. + A. C.
~ ¼ size
(per es.)
per es.:
1 K+ ¼ K+ ¼ ¼ K + ¼ ¼ ¼ K + …
= (1+ ⅓) K
Costo in Memoria: piuttosto limitato.
…
~ ¼ size
(per es.)
Piramidi LoD
(Level Of Detail)
Mesh (all LoDs)
GEOMETRIA + ATTRIBUTI
C O N NE T TI V I T A’
vertices of any LoD
LoD0
LoD1
LoD2 Es. struttura
dati alternativa:
Piramidi LoD
(Level Of Detail)
Popping artefact: beware
per attuenarli: soglie variabili, es:
when current = LoD 2:
if (dist > 30m) switch to LoD3 when current = LoD 3:
if (dist < 25m) switch to LoD2
LoD 0 LoD 1
LoD 0 LoD 1
LoD 2 LoD 3 LoD 4
LoD 2 LoD 3 LoD 4
to decrease LoD level (go higer res):
to increase LoD lovel (go lower res):
0
0 dist
dist