Modelli 3D nei games Modelli 3D

Transcript

Modelli 3D nei games Modelli 3D
Game Dev - Tools Programming
13/02/2014
Game Dev - GAME TOOLS
Modelli 3D nei games
Marco Tarini
Modelli 3D
Modello 3D = Mesh poligonale
Di triangoli, o mista (quadrilateri + triangoli)
Struttura dati per modellare oggetti 3D
GPU friendly
Risoluzione (potenzialmente) adattiva
“Complessità” = numero facce
Marco Tarini - Verona 2014
1
Game Dev - Tools Programming
13/02/2014
Mesh triangolare
(o mesh simpliciale)
Un insieme di triangoli adiacenti
facce
vertici
spigoli
(o edges)
Mesh di triangoli
discretizzazione lineare a tratti
di una superfice continua (un “2 manifold”)
immersa in R3
Componenti:
geometria
i vertici, ciascuno con pos (x,y,z)
un campionamento della superficie!
connettività
come sono connessi i vertici
(es.: in una tri-mesh, i triangoli)
attributi
es: colore, materiali, normali, UV, …
Marco Tarini - Verona 2014
2
Game Dev - Tools Programming
13/02/2014
Mesh: geometria
Insieme di posizioni dei vertici
Un vettore posizione (x,y,z) per ogni vertice
Mesh: connettività
Triangoli (e edges) che connettono
fra loro i vertici
Come nodi in un grafo
Marco Tarini - Verona 2014
3
Game Dev - Tools Programming
13/02/2014
Mesh: attributi
Proprietà che variano sulla superficie
Di solito memorizzati per vertice
(almeno, nei games)
Attributi più diffusi nei games:
Normale
per: re-lighting dinamico
Colore
per: baked lighting (ambient occlusion)
per: aggingere varietà (RGB)
Coordinate tessitura (“uv mapping”)
per: texture mapping
Direzioni tangenti
per: bump mapping
Bone assignment (“rigging” o “skinning”)
per: animazioni skeletali
Meshes: complessità
crescente
1994
70.000 △
Marco Tarini - Verona 2014
4
Game Dev - Tools Programming
13/02/2014
Meshes: complessità
crescente
1997
1.200.000 △
Meshes: complessità
crescente
2002
2.000.000.000 △
Marco Tarini - Verona 2014
5
Game Dev - Tools Programming
13/02/2014
Ma… in ambiente games
LOW POLY MODELLING!
Low-poly modelling
by Phillip Heckinger (3D modeller)
Marco Tarini - Verona 2014
6
Game Dev - Tools Programming
13/02/2014
low-poly
model
pixel
art
(high-res)
: mesh
=
: (high res)
image
Solomons’s key
(1986, Temco)
on Z80
reminder:
per tutti gli ‘80,
il principale asset dei games
è consistito da
sprites / tilemaps in pixel art ...
Marco Tarini - Verona 2014
Metal Slug (1996, Nazca Copr), on Neo Geo (SNK)
7
Game Dev - Tools Programming
13/02/2014
Anche nei games
800 △
Unreal Torunement
(1999)
Anche nei games
3000 △
800 △
Unreal Torunement
(1999)
Unreal Torunement 2K3
(2002)
Marco Tarini - Verona 2014
8
Game Dev - Tools Programming
13/02/2014
Anche nei games
3000 △
800 △
Unreal Torunement
(1999)
Unreal Torunement 2K3
(2002)
4500 △
solo l’arma
800 △
(1999)
Marco Tarini - Verona 2014
questa,
12000 △
Unreal Torunement 3
(2007)
3000 △
(2002)
15000 △
(2006)
9
Game Dev - Tools Programming
13/02/2014
Anche nei games
230 △
(1996)
300 △
(1998)
4.000 △
(2002)
48.000 △
30.000 △
(2012)
(2008)
Come rappresento una mesh?
(quali strutture dati)
Una tri-mesh è un insieme di triangoli adiacenti
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
Marco Tarini - Verona 2014
10
Game Dev - Tools Programming
13/02/2014
Come rappresento una mesh?
(quali strutture dati)
Modo indexed:
Geometria: array di vertici
in ogni vertice, posizione e attributi
Attributi:
coi vertici
(e.g. campi della classe “vertice”)
Connettività:
Array di triangoli
Per ogni triangolo:
tripletta di indici a vertice
Come rappresento una mesh?
(quali strutture dati)
Modo indexed:
class Vertex {
vec3 pos;
rgb color;
/* attribute 1 */
vec3 normal; /* attribute 2 */
};
class Face{
int vertexIndex[3];
};
class Mesh{
vector<Vertex> vert; /* geom + attr */
vector<Face> tris;
/* connettivita’ */
};
Marco Tarini - Verona 2014
11
Game Dev - Tools Programming
13/02/2014
Esempio di mesh indexed:
guardiamo dentro un file in formato OFF
# facce # edges
# vertici
x,y,z
2ndo
vert
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
indice 0
indice 1
indice 2
indice 3
LetteraL.off
1
0
4
4
4
4
4
4
4
4
4
4
5
5
3
5
6
6
0
1
2
3
4
5
1
1
2
4
7
9
1
2
3
4
5
0
prima faccia:
4 vertici:
con indici
3, 2, 1 e 0
1 0
3 0
8 9
10 11
7 6
8 7
9 8
10 9
11 10
6 11
Come rappresento una mesh?
(quali strutture dati)
Alternativa x storare la connettività :
come vettore di half-edges
V1
V2
V3
V4
V5
Marco Tarini - Verona 2014
12
Game Dev - Tools Programming
13/02/2014
Come rappresento una mesh?
(quali strutture dati)
connettività con indexed triangles
V1
V2
T1
V3
T3
T2
V4
V5
Tri:
Wedge
1:
Wedge
2:
Wedge
3:
T1
V4
V1
V2
T2
V4
V2
V5
T3
V5
V2
V3
Come rappresento una mesh?
(quali strutture dati)
connettività con half-edges
V1
V2
H2
H1
H8
H3
H4 H5
V4
H7 H9
H6
V5
Marco Tarini - Verona 2014
V3
Half
edge:
Da:
A:
Next:
Opposite:
H1
V4
V1
H2
--
H2
V1
V2
H3
--
H3
V2
V4
H1
H4
H4
V4
V2
H5
H3
H5
V2
V5
H6
H7
H6
V5
V4
H4
--
H7
V5
V2
H8
H5
H8
V2
V3
H9
--
H9
V3
V5
H7
--
13
Game Dev - Tools Programming
13/02/2014
Strutture per connettività
a confronto
INDEXED
HW friendly
HALF-EDGES
Rendering… complicato
(directly maps to:
vertex arrays, VBO)
Navigazione… complicata
richiede strutture dati
ulteriori (“di adiacenza”)
Navigazione semplice
es: x trovare tutti i vertici nella
“stella 1” di un vertice…
Ok per: mesh “pure”
(di soli tri, o, al max, di soli quad)
Ok anche per: polygonal mesh
(poligoni misti a piacere)
Compatta: 3 indici x tri
Prolissa: 12 indici per tri
> adatta per
rendering
> adatta a mesh
processing
Mesh processing
aka Geometry Processing
Un buon manuale
x programmare
mesh processing:
Marco Tarini - Verona 2014
14
Game Dev - Tools Programming
13/02/2014
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.)
Attributi comuni: normale
Vettore direzione unitario
Orientamento della superficie
Usato per il lighting
Di solito, calcolate
automaticamente
dalla geometria
…
Ma l’artista decide
quali edges sono
soft e quali hard
Marco Tarini - Verona 2014
15
Game Dev - Tools Programming
13/02/2014
Calcolo normali
dalla geometria
Geometria
=(1)=>
normali x faccia
=(2)=>
normali x vertice
(1)
v1
e1
v2
e1×e2
e2
v3
(2)
N̂ v
N̂1
N = Nˆ 1 + Nˆ 2 + ... + Nˆ n
N̂ 6
N̂ 2
N
Nˆ =
|N|
N̂ 5
N̂ 3
N̂ 4
Calcolo normali
dalla geometria
Nota:
l’orientamento delle facce
deve essere coerente
A
1
D
3
1
2
3
2
C
senso opposto, edge coerente
Marco Tarini - Verona 2014
B
16
Game Dev - Tools Programming
13/02/2014
Nota:
normali alla superficie
normali geometriche
normali come attributo
definite per faccia
implicite
“vere”
(verso dipende da
orientamento vertici
in faccia)
≠
usate per…
back face culling
definite per vertice
esplicitamente
memorizzate
arbitrio dell’artista
(nel caso generale)
usate per…
lighting
si possono usare come modo per calcolare
Crease edges
(aka “hard edges”)
Edges di discontinuità delle normali.
No Creases:
(all edges “soft”)
With Creases:
(red edges “hard”)
Come si ottiene una discontinuità (C0) negli attributi?
Marco Tarini - Verona 2014
17
Game Dev - Tools Programming
13/02/2014
risposta:
Vertex seams
Vertex seam = due vertici coincidenti in xyz
(attributi diversi assegnati ad ogni copia)
a literal
“seam”
es: vertex seams
per implementare hard edges
Attributi Comuni: colore
Utile per:
Differenziare modelli
Baked global lighting
(per vertex amient occlusion)
Marco Tarini - Verona 2014
18
Game Dev - Tools Programming
13/02/2014
Modelli 3D:
come ottenerli
Come tutti gli asset, possible aquistarli
Formati files per mesh …
(da xkcd.com)
Marco Tarini - Verona 2014
19
Game Dev - Tools Programming
13/02/2014
Formati files per mesh
(una Torre di Babele!)
3DS - 3D Studio Max file format
OBJ - Another file format for 3D objects
MA, MB - Maya file formats
3DX - Rinoceros file format
BLEND - Blender file format
DAE - COLLADA file format (Khornos)
FBX - Autodesk interchange file format
X - Direct X object
SMD - good for animations (by Valve)
MD3 - quake 3 vertex animations
DEM - Digital Elevation Models
DXF - (exchange format, Autodesk's AutoCAD)
FIG - Used by REND386/AVRIL
FLT - MulitGen Inc.'s OpenFlight format
HDF - Hierarchical Data Format
IGES - Initial Graphics Exchange Specification
IV - Open Inventor File Format Info
LWO, LWB & LWS - Lightwave 3D file formats
MAZ - Used by Division's dVS/dVISE
MGF - Materials and Geometry Format
MSDL - Manchester Scene Description Language
3DML - by Flatland inc.
C4D – Cinema 4D file format
SLDPTR - SolidWork "part"
WINGS - Wings3D object
NFF - Used by Sense8's WorldToolKit
SKP - Google sketch up
KMZ - Google Earth model
OFF - A general 3D mesh Object File Format
OOGL - Object Oriented Graphics Library
PLG - Used by REND386/AVRIL
POV - “persistence of vision” ray-tracer
QD3D - Apple's QuickDraw 3D Metafile format
TDDD - for Imagine & Turbo Silver ray-tracers
NFF & ENFF - (Extended) Neutral File Format
VIZ - Used by Division's dVS/dVISE
VRML, VRML97 - Virtual Reality Modeling Language (RIP)
X3D - tentato successore di VRML
PLY - introdotto by Cyberware – tipic. dati range scan
DICOM - Dalla casa omonima – tipic. dati CAT scan
Renderman - per l'omonimo visualizzatore
RWX - RenderWare Object
Z3D - ZModeler File format
etc, etc, etc...
Formati file per mesh
più usati nei games
.OBJ (wavefront)
più diffusi
☺ max diffusione
☺ indexed, normali , uv-mapping
no colori (solo indice materiale x faccia)
no skinning o ani
.SMD (
)
meno diffusi
☺ animazioni scheletali + skinning
☺ normali , uv-mapping
no indexed!
no colori
.MD3 (Quake, IDsoft)
☺ vertex animations, normali
no colori
.PLY (cyberware)
☺ customizzabile
“accademico”
semplici
Marco Tarini - Verona 2014
.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
complessi
20
Game Dev - Tools Programming
13/02/2014
Modelli 3D:
come ottenerli
Modellazione digitale manuale
Lavoro dei modellatori digitali
3D modeller
(modellatore
digitale 3D)
2D concept
artist
2D concepts
/ Sketches
3D low poly
mesh
Tecniche di modellazione
digitale di modelli 3D
Tecniche:
Low poly diretta
e.g. wings3D
Subdivision surfaces
e.g. con blender
Digital sculpting
e.g. con Z-brush
Marco Tarini - Verona 2014
21
Game Dev - Tools Programming
13/02/2014
Mesh editing:
applicativi generici
3D Studio Max (autodesk) , Maya (autodesk) , Cinema4D (maxon)
Lightweight 3D (NewTek), Modo (The Foundry) , …
generici, potenti, completi
Blender
idem, ma open-source e freeware (simile a: Gimp VS. Adobe Photoshop per 2D images)
MeshLab
open-source, grande collezione algoritmi di geometry processing …
AutoCAD (autodesk), SolidWorks (SolidThinking)
per CAD
ZBrush (pixologic), + Sculptris , Mudbox (autodesk)
metafora scultura virtuale, specializzato in ritocco manuale dettagli hi-freq, bumpmapping, normalmaps…
Wings3D
open-source, piccolo, specializzato in low-poly editing, subdivision surfaces
[Rhinoceros]
parametric surfaces (NURBS)
FragMotion
specializzato per mesh animate
…
+ moltissimi strumenti per contesti specifici
(editing di umani, di interni architetturali, di paesaggi, o editor specifici per game-engines, etc...)
Low poly diretta
(demo)
Marco Tarini - Verona 2014
22
Game Dev - Tools Programming
13/02/2014
Low poly diretta
(demo)
1
2
9
3
11
10
19
5
4
6
13
12
8
7
17
14
23
20
18
24
22
21
…
25
26
27
28
29
30
31
Tecniche di modellazione
digitale di modelli 3D
Subdivision surfaces
Raffinamento progressivo della mesh
da lowest res
hi res
Ottimo per oggetti dall’aspetto
smooth, organico e “pulito”
Marco Tarini - Verona 2014
23
Game Dev - Tools Programming
13/02/2014
Superfici di suddivisione
Modo molto diffuso per costruire mesh
1: fare mesh di controllo
a bassa risoluzione
"a mano"
2: raffinarla automaticamente
iterativamente
(ad ogni interazione si aggiungono facce e vertici)
molti schemi matematici differenti
con diverse peoprietà
Superfici di suddivisione
Esempio: schema butterfly (per mesh triangolari)
e' uno degli schemi 1=>4
(in un passo di suddivisione, da ogni triangolo se ne ottengono 4)
(aggiunta di un vertice per ogni edge)
Passo
di
suddivisone
MA... quali coordinate assegnare al nuovo vertice?
Ogni schema di suddivisone ha la sua formula. Ad esempio...
Marco Tarini - Verona 2014
24
Game Dev - Tools Programming
13/02/2014
Superfici di suddivisione
Esempio: schema butterfly
2
16
-1
16
8
16
8
16
-1
16
POS(
-1
16
-1
16
2
16
) =
+
+
8
16
2
16
-1
16
(POS(
(POS(
(POS(
) + POS(
))
) + POS(
))
) + POS(
) + POS(
) + POS(
))
Superfici di suddivisione
Ad ogni passo di suddivisione
(x,y,z) dei nuovi vertici inseriti
formula (estrapolazione dei vicini)
(x,y,z) dei vecchi vertici
si tiene la vecchia pos (schemi “interpolativi”)
oppure
formula (estrapolazione) (schemi “approssimativi”)
Marco Tarini - Verona 2014
25
Game Dev - Tools Programming
13/02/2014
Esempio: con schema
Catmull-Clark
level 0
(“control mesh”)
level 1
level 2
level 3
∞
lvl
(“limit surface”)
Superfici di suddivisione
mesh
di controllo
mesh
finale
Marco Tarini - Verona 2014
26
Game Dev - Tools Programming
13/02/2014
Superfici di suddivisione
Anche iterativamente:
1- Modellare “control mesh”
DEMO!
(editing manuale)
2- Suddivisione
(un passo)
3- Ritocco!
(editing manuale)
4- Goto 2
(fino a
raggiungimento
risultato voluto
alla risuolzione voluta)
Molti schemi…
Catmull-Clark
Doo-Sabin
Loop
sqrt(3)
Butterfly
Mid-edge
….
recente aumento
di popolarità
(GPU friendliness)
Marco Tarini ‧ Com
puter Graphics ‧ 2
011/12 ‧ Universit
à dell’Insubria
Marco Tarini - Verona 2014
27
Game Dev - Tools Programming
13/02/2014
Differenze fra gli schemi
di suddivisione
interpolativi VS approssimativi
solo triangoli, solo quads, qualunque cosa
incremento complessità
(per ogni passo di suddivisione)
proprietà della limit surface
(esistenza, smoothness)
esistenza forma chiusa per la limit surface
(esatta o approssimata)
…
Marco Tarini ‧ Com
puter Graphics ‧ 2
011/12 ‧ Universit
à dell’Insubria
Tecniche di modellazione
digitale di modelli 3D
Tecniche:
Low poly diretta
e.g. wings3D
Subdivision surfaces
e.g. con blender
Digital sculpting
e.g. con Z-brush
Marco Tarini - Verona 2014
DEMO
28
Game Dev - Tools Programming
13/02/2014
Digital Sculpting
cisel
(scalpello)
Modelli 3D:
come ottenerli
Modellazione digitale manuale
Lavoro dei modellatori digitali
3D modeller
(modellatore
digitale 3D)
2D concept
artist
2D concepts
/ Sketches
Marco Tarini - Verona 2014
3D low poly
mesh
29
Game Dev - Tools Programming
13/02/2014
Modelli 3D:
come ottenerli
Attraverso 3D scanning
Tecnologie per ottenere:
modelli digitali 3D
a partire da:
oggetti reali
3D scanning
Modelli 3D:
come ottenerli
3D scanning
A.k.a. automatic 3D model acquisition
Molte tecnologie diverse
Laser scanners
Time of flight
Structured light (kinect)
…
Caratteristiche diverse
Qualità risultati
Rumore / risoluzione
Automatismo
Invasività
Markers? Powder?
Real time? (kinect)
Costo
Dimensione massima oggetti
(full body scanner?)
Marco Tarini - Verona 2014
30
Game Dev - Tools Programming
13/02/2014
Modelli 3D:
come ottenerli
Attraverso 3D scanning
Scultore
(fisico)
3D scanning
Modello reale
Hi res model
Modelli 3D:
come ottenerli
PERFECT for games!
(much easier to: animate,
re-edit, uvmap, …)
VS
Dino,
scanned
by artec3d
(artistic)
manually edited
3D low poly mesh
Marco Tarini - Verona 2014
(scanned)
hi res model
30000 tri
31
Game Dev - Tools Programming
13/02/2014
Modelli 3D:
come ottenerli
Modellazione procedurale
parametri
Parentesi:
Programma
che genera la mesh
Procedural generation:
ottimo per games
Concetto: invece di avere un asset,
avere un programma che lo crea dinamicamente
Modellazione procedurale
AI procedurali, boss procedurali…
Livelli procedurali
Terreni procedurali
Musica procedurale
Scene procedurali
Minecraft,
Mojang, 2009
Elite,
Acornsoft, 1984
Left 4 dead,
Valve, 2008
Rescue the beagles
16x16, 2008
Vantaggi: varietà, no RAM, …
Marco Tarini - Verona 2014
32
Parentesi:
Game Dev - Tools Programming
13/02/2014
Procedural generation:
ottimo per games
Concetto: invece di avere un asset,
avere un programma che lo crea dinamicamente
Modellazione procedurale
AI procedurali, boss procedurali…
Livelli procedurali
Terreni procedurali
Musica procedurale
Scene procedurali
Vantaggi: varietà, no RAM, …
Elite, 1984
Semplificazione automatica
di modelli 3D
parametri:
un errore massimo
o un numero di facce obiettivo
automaticamente
mesh originale
mesh semplificata
500K triangoli
2K triangles
Marco Tarini - Verona 2014
33
Game Dev - Tools Programming
13/02/2014
Semplificazione automatica
di modelli 3D
performance
quality
Semplificazione automatica
Una piramide di Livelli di Dettaglio
LOD 1
usare quando
visto da vicino
Marco Tarini - Verona 2014
LOD 2
LOD 3
LOD 4
usare quando
visto da lontano
34
Game Dev - Tools Programming
13/02/2014
LoD pyramid
Demo
Semplificazione automatica
Molte tecniche diverse
Adattive oppure no
usare piu' triangoli dove c'e' bisogno (es non nelle zone cmq
piatte)
oppure no
Errore massimo introdotto:
misurato e/o limitato
oppure no
Topologia:
mantenuta
oppure no
Streaming
Possibile
Oppure no
...
Marco Tarini - Verona 2014
35
Game Dev - Tools Programming
13/02/2014
Texture mapping
=
+
geometria 3D
(insieme di quadrilateri)
RGB texture 2D
(color-map)
Altro esempio di color-map
+
Marco Tarini - Verona 2014
=
36
Game Dev - Tools Programming
13/02/2014
Altri esempi di color-map
Notazione
t
es: 512 texels
1.0
Texture Space
(o "spazio parametrico" o "spazio s-t" o "spazio u-v")
Texture 2D
1.0
s
es: 1024 texels
texel
Marco Tarini - Verona 2014
Una Texutre e' definita
nella regione [0,1] x [0,1]
dello "spazio parametrico"
37
Game Dev - Tools Programming
13/02/2014
Due notazioni
t
Texture Space
in DirectX
(u,v)
Texture Space
in OpenGL
(s,t)
1.0
(0,0)
1.0
(0,0)
u
1.0
v
1.0 s
Task: “u-v mapping” di una
mesh (“u-v” == “s-t”)
Assegnare una coppia di coordinate texutres
ad ogni vertice della mesh
In preprocessing
t
t
s
Marco Tarini - Verona 2014
s
38
Game Dev - Tools Programming
13/02/2014
Problema difficile: “u-v
mapping” (“u-v” == “s-t”)
fatto a mano,
oppure automatizzato
Texture mapping
Ogni texel è…
Un colore RGB (color map, RGB map, diffuse map)
Una normale (bump map, o normal map)
Il coefficiente speculare (specular map)
Un fattore di trasparenza (alpha map, o
cutout texture)
Una scavo dalla superfice
(displacemnt map, o height texture)
Un lighiting precalcolato (light map ,
baked light texture)
Marco Tarini - Verona 2014
39
Game Dev - Tools Programming
13/02/2014
Texture maps come assets
Vari texture «sheets»
associati ad una mesh
tipica struttura dati:
mesh divisa in sottomesh
ogni sottomesh associata a un materiale
ogni materiale:
1 sheet di diffuse-map
1 sheet bumpmap (se serve)
1 sheet di alphamap (se serve)
1 vertex + fragment shader
vari parametri
(es, shininess, …)
Texture maps come assets
Caratteristiche:
Vincoli ricorrenti:
res come potenze di 2
(richiesto da sempre meno engines)
sia in U che in V
(es: 256x256 o 1024x512)
Size:
risoluzione
canali (es: alpha?)
res per lato < max
(es: max = 4096 o 2048)
MIP-maps precalcolati?
Tileable?
B
A
A
B
Marco Tarini - Verona 2014
40
Game Dev - Tools Programming
13/02/2014
Tileable textures
Tileable textures
Tipico utilizzo:
Molto efficiente in spazio!
Marco Tarini - Verona 2014
41
Game Dev - Tools Programming
13/02/2014
Texture maps come assets:
formati files
x immagini generiche
x textures
(decomprimere tutta immagine
prima di accedere ai pixel)
(random accessibility ai texels
senza decomprimere)
☺ compressione: ottima
loading: pesante:
compressione: cattiva
☺ loading: leggero
decomprimere da RAM,
(forse) ricomprimere in
GPU-RAM
MIP-map lvls etc:
controllato dall’engine
direct copy
Disco => RAM =>
GPU RAM
☺ MIP-map lvls etc:
controllato dall’artista
Texture maps come assets:
formati files
x immagini generiche:
.JPG / .JPEG
lossy,
☺ > compresisone,
☺ immagini “fotografiche”: best
solo 3 canali (no choice)
8 bit x canale (no choice)
.PNG
☺ lossless
< compressione
☺ disegni: best
☺ anche canale alpha possibile
☺ anche 16 bits possibile
.TIFF e .RAW
(rari)
☺ lossless
compressione: vabbe’
☺ max flessibilità canali etc
x textures:
.DDS
(direct draw surface)
lossy
compresisone: poco (a rate fisso)
☺ GPU ready
☺ inlcude MIPmap levels (volendo)
con compressione a scelta
(S3TC):
“no / 1-bit alpha”
DXT1
DXT2
“rough alpha”
DXT3
DXT4
“smooth alpha ”
DXT5
(diversi compromessi fra qualità,
costo, canali…)
.PNM (davvero raro)
compressione: ahah
☺ ma parsing facilissimo! (no lib)
Marco Tarini - Verona 2014
42
Game Dev - Tools Programming
13/02/2014
RGB maps:
come si ottengono
Image first, then UV-mapping
e.g. immagine da fotografie
e.g. tileable images
UV-mapper
UV-mapping first, then paint 2D
paint with 2D app (e.g. photoshop)
UV-mapper
2D painter
UV-mapper
3D painter
UV-mapping first, then paint 3D
paint within 3D modelling software,
Or: export 3D images,
use e.g. photoshop,
reimport images
RGB maps:
come si ottengono
…or:
first Paint 3D
on hi-res model,
“paint” on vertex attributes
e.g. with Z bursh…
then coarsen
build / autobuild final low-poly version
then UV-map
the low-poly model
must be a 1:1 mapping!
then auto-texture
auto build texture
Marco Tarini - Verona 2014
more
about
this later…
43
Game Dev - Tools Programming
13/02/2014
Alpha mapping
(texels = lvl trasparenza)
Alpha map
RGB map
Alpha mapping
(texels = lvl trasparenza)
es: drappi, barba...
tessitura
by Micheal
Marco
Filipowskip u t e r
2004
Tarini ‧ Com
Graphics ‧ 2
011/12 ‧ Universit
à dell’Insubria
Marco Tarini - Verona 2014
44
Game Dev - Tools Programming
13/02/2014
Texture mapping e Alpha Test
es: alberi, foliage
Texture mapping e Alpha Test
Es: pelo, pellicce
tessitura
(ripetuta)
Marco Tarini ‧ Com
puter Graphics ‧ 2
011/12 ‧ Universit
à dell’Insubria
Marco Tarini - Verona 2014
45
Game Dev - Tools Programming
13/02/2014
Bump-Mapping
(see demo)
stessa geometria (una sfera)
bumpmaps diverse
Normal maps
Memorizzati come immagini
RGB => XYZ
(come?)
Marco Tarini - Verona 2014
caratteristico colore RGB
(0.5,0.5,1) - (128,128,255)
46
Game Dev - Tools Programming
13/02/2014
Normal maps
Espressi in spazio tangente
Memorizzare direzioni tangenti
Tangente e Bi-tangente
Attributi x vertice!
Computati automaticamente
a partire da UV mapping (come?)
Normal maps
Come si ottengono (1/3):
Filtro
(e.g.
photoshop)
2D texture
painter
Displacement map
come grayscale
Marco Tarini - Verona 2014
Normal map
47
Game Dev - Tools Programming
13/02/2014
Normal maps
Come si ottengono (2/3):
Photometric Stereo
da: N immagini (N>=4) reali
Stesso punto di vista
Illuminazione diversa
(e possibilmente controllata e nota)
a Normal Map
Normal maps
Come si ottengono (3/3):
Detail recovery
da:
1) mesh Hi-Res
2) mesh Low-res + UV mapping (senza ripetizioni)
a:
Normal map per 2
(che mimica il dettaglio presente in 1)
More about this later…
Marco Tarini - Verona 2014
48
Game Dev - Tools Programming
13/02/2014
Normal maps
Come si ottengono (bonus):
Proceduralmente
Semplificazione automatica
Strategie completamente diverse
Approcci iterativi
remove
vertex
repeat
compi l'azione di semplificazione
atomica meno costosa
(in termini di errore aggiunto)
aggiorna costi
edge
collapse
until (obiettivo raggiunto)
es: numero faccie,
errore
Marco Tarini - Verona 2014
remove
face
49
Game Dev - Tools Programming
13/02/2014
Detail preservation
(o "texture for geometry")
Idea:
semplificare una mesh
sintetizzare una tessitura
per ripristinare il dettaglio perso durante la
semplificazione
500mila
triangoli
TESSITURA
fatta apposta
detail
recover
(es. BumpMap
normali o
RGB map x colori)
semplificazione
automatica
2mila
triangoli
rendering
Marco Tarini ‧ [GAME
-DEV] ‧ Verona ‧
2013
Marco Tarini - Verona 2014
sempre duemila triangoli, ma con texture mapping
50
Game Dev - Tools Programming
13/02/2014
originale
semplificato
simplificato
ma con tessitura
500K triangles
2K
2Ktriangles
triangles
Marco Tarini ‧ [GAME
-DEV] ‧ Verona ‧
2013
Esempio
Marco Tarini - Verona 2014
51
Game Dev - Tools Programming
13/02/2014
Esempio
Mesh: task tipici nella game
industry
Semplificazione automatica
LOD construction
Light baking
Precomputazione Luce
Tipico esempio: Ambient Occlusion
U-V mapping
parametrizzazione
Texturing
creazione tessiture di vario tipo
Rigging / Animation
linear blend skinning
Marco Tarini - Verona 2014
52
Game Dev - Tools Programming
13/02/2014
Una classe di tool utili:
attribute transfer
Attribute transfer
Da mesh A a mesh B
Retargeting di:
Animazioni, UV-mapping, tessiture, …
3D assets and memory
Gli asset Mesh + Tessiture
sono tenuti in memoria VIDEO
Conseguenze per
Memorizzazione,
Gestione
Marco Tarini - Verona 2014
53