Video Game Dev 2015/2016 Univ. Insubira
3D Meshes
Marco Tarini
Mesh triangolari
i Modelli 3D universali dei games
Struttura dati per modellare oggetti 3D
GPU friendly
Risoluzione (potenzialmente) adattiva
“Complessità” = numero facce
Superfice lineare a tratti
composta da triangoli
(spesso adiacenti lato-a-lato)
Mesh triangolare (o mesh simpliciale)
Un insieme di triangoli adiacenti
facce
vertici
spigoli (o edges)
Mesh (di triangoli):
struttura dati
Componenti:
geometria
i vertici, ciascuno con pos (x,y,z) un campionamento della superficie!
connettività (a volte: “topologia”) come sono connessi i vertici (es.: in una tri-mesh, i triangoli) attributi
es: colore, materiali, normali, UV, …
Mesh: geometria
Insieme di posizioni dei vertici
Un vettore posizione (x,y,z) per ogni vertice (Spazio Oggetto)
V2
V3
V5 V4
V1
Mesh: connettività
(o topologia)Triangoli (o quads, o edges…)
che connettono fra loro i vertici
Come nodi connessi da archi, in un grafo
V2
V3
V4 V1
T1
T2
T3
Mesh: attributi
Quantità che variano sulla superficie
Campionati per vertice, interpolati nei poly
V2
V3
V5 V4
V1
T1
T2
T3
RGB3 RGB2
RGB5 RGB4
RGB1
Mesh: attributi
Proprietà che variano sulla superficie
vettoriali o scalari
Memorizzati per ogni vertice (almeno, nei games)
Interpolati all’interno delle facce
interpolazione lineare Nota: per costruzione, C0 continui fra facce adiacenti
E, in generale, C1 discontinui fra facce adiacenti
Attributi più diffusi nei games:
Colore
per: baked lighting (ambient occlusion)
per: base color (RGB)
Normale
per: re-lighting dinamico Coordinate tessitura (lo “uv mapping” della mesh)
per: texture mapping
Direzioni tangenti per: normal mapping Bone assignments (lo “skinning” della mesh)
per: animazioni scheletali
VEDREMO
VEDREMO
VEDREMO
VEDREMO
Meshes: complessità crescente
70.000 △
1994
Meshes: complessità crescente
1.200.000 △
1997
Meshes: complessità crescente
2.000.000.000 △
2002
Low Poly Meshes
Anche nei games
800 △ Unreal Torunement (1999)
Anche nei games
800 △ Unreal Torunement (1999)
Unreal Torunement 2K3 (2002)
3000 △
Anche nei games
800 △ Unreal Torunement (1999)
Unreal Torunement 2K3 (2002)
3000 △
Unreal Torunement 3 (2007)
4500 △
solo l’arma questa, 12000 △
800 △ (1999)
3000 △ (2002)
15000 △ (2006)
Anche nei games
230 △ (1996)
300 △ (1998)
30.000 △ (2008)
48.000 △ (2012) 4.000 △
(2002)
pixel art
: (high-res) mesh
(high res) image
= :
low-poly
model
Metal Slug (1996, Nazca Copr), on Neo Geo (SNK) Solomons’s key
(1986, Temco) on Z80
reminder:
per tutti gli ‘80,
il principaleassetdei games è consistito da
sprites / tilemapsin pixel art ...
Come rappresento una mesh?
(quali strutture dati) Modo
diretto:un vettore di triangoli
e per ogni triangolo: tre vertici e per ogni vertice: tre coordinate
Ma: replicazione dati poco efficiente in spazio oneroso fare updates
poichè molti dei triangoli di una una tri-mesh sono adiacenti (facce adiacenti condividono vertici)
Come rappresento una mesh?
(quali strutture dati) Modo
indexed:Geometria: array di vertici
in ogni vertice, posizione e attributi Attributi:
nei vertici
(e.g. campi della classe “vertice”)
Connettività: (a volte anche: “topologia”) Array di triangoli
Per ogni triangolo:
tripletta di indicia vertice
Tasks of the Game Engine for Meshes
Import (from disk)
Simple Pre-processing
e.g.: Compute Normals (if needed, i.e. rarely) e.g.: Compute Tangent Dirs
e.g.: Bake Lighting (sometimes)
Render
(graphic engine) GPU based
+ animate (more abot this later)
Rendering of a Mesh in a nutshell
Load…
store all data on GPU RAM Geometry + Attributes Connectivity
Textures Shaders
Parameters / Settings
…and Fire!
send the command: “do it” !
THE MESH
THE “MATERIAL”
Simplified schema of: “PC + Video Card”
BUS
26CPU
ALU
(main)
RAM
Disk Video Card
…
Internal bus Internal bus
(of video card)
RAM(GPU)
GPU
Mesh GPU Object
LOAD
Life of a Mesh in a Game Engine
DISK CENTRAL RAM GPU RAM
PREPROCESS (maybe) Mesh Object
IMPORT
Mesh File
Mesh FileMesh
FileMesh FileMesh
FileMesh FileMesh
FileMesh
Mesh GPU Object
Memory Management !
DISK CENTRAL RAM GPU RAM
Mesh Object Mesh
File
Mesh GPU Object Mesh
Object Mesh
File
Mesh GPU Object Mesh
Object Mesh
FileMesh FileMesh
FileMesh FileMesh
File Mesh
ObjectMesh ObjectMesh
ObjectMesh ObjectMesh
Object
Mesh File
A file of a given format sitting on the disk
Choices for the game engine:
which formats(s) to import?
proprietary, standard…
storing which attribute?
Issues:
storage cost loading time
LetteraL.off
Esempio di formato file di mesh indexed:
il formato OFF1 5 1 0 5 1 4 3 2 1 0 4 5 4 3 0 4 6 7 8 9 4 6 9 10 11 4 0 1 7 6 4 1 2 8 7 4 2 3 9 8 4 3 4 10 9 4 4 5 11 10 4 5 0 6 11 OFF
12 10 40 0 0 0 3 0 0 3 1 0 1 1 0 1 5 0 0 5 0 0 0 1 3 0 1 3 1 1 1 1 1
# vertici
# facce # edges
x,y,z 2ndo vert
prima faccia:
4vertici:
con indici 3, 2, 1 e 0 indice 0
indice 3 indice 2 indice 1
Formati file per mesh più usati nei games
.OBJ(wavefront)
☺max diffusione
☺indexed, normali , uv-mapping no colori (solo indice materiale x faccia) no skinning o ani
.SMD ( )
☺animazioni scheletali + skinning
☺normali , uv-mapping no indexed!
no colori .MD3 (Quake, IDsoft)
☺vertex animations, normali no colori
.PLY (cyberware)
☺customizzabile
“accademico”
.3DS ( )
☺si: colori, uv-mapping, indexed, materiali, tessiture…
no: normali
limite al numero di vert (64K) .COLLADA( )
☺completissimo
☺nato apposta per essere interscambio
☺open standard
quasi impossibile da parsare completamente .FBX ( )
☺completo, comprese animations complesso, difficile da parsare .MA /.MB ( )
☺completo, comprese animations complesso, difficile da parsare
semplici complessi
più diffusimeno diffusi
Mesh Object
A (C++ / Javascript / etc) structure in main RAM
Choices for the game engine:
which attribute to store?
storage formats… (floats, bytes, double…) which preprocessing to offer
(typically at load time)
Come rappresento una mesh?
(quali strutture dati) Modo
indexed in C++ :class Vertex { vec3 pos;
rgb color; /* attribute 1 */
vec3 normal; /* attribute 2 */
};
class Face{
int vertexIndex[3];
};
class Mesh{
vector<Vertex> verts; /* geom + attr */
vector<Face> faces; /* connettivita’ */
};
Mesh GPU Object
VBO / Vertex Arrays / etc
buffers storing “tables” for geometry, connectivity, etc.
Sitting in GPU RAM
The most precious one !
Ready to render!
Choices for Game Engine:
which GPU mechanism storage formats
balance storage cost / precision / computatuion
Indexed mesh in GPU RAM
Buffers
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’