Video Game Dev 2015/2016 Univ Insubria
Textures
Marco Tarini
Texture mapping
geometria 3D
(insieme di quadrilateri)
+
RGB texture 2D (qui: color-map)
=
Esempio (color-map)
+ =
Texture maps!
Uno degli assets + comuni e importanti di un games
Uno dei maggiori consumatori
di GPU RAM
Texture maps: strutture dati
Sostanzialmente, un’immagine raster
Texture sheet
«Texel»
Tessiture (nei games)
Texture sheet
=
def. di un segnale sulla superficie (la mesh)
scopo simile di quello dei per-vertex attributes!
ma…
# texels >> # vertices segnali più complessi!
Un texel = un campione di quel segnale
fra i campioni: interpolazione (bilineare)
Campionamento del segnale:
su griglia 2D regolare (immagine raster) ad una risoluzione data (NON adattiva!)
Tessiture: campionamenti regolari, e densi (dettaglio a buon mercato!) Attributi: campionamenti irregolari (adattivi), e sparsi
I segnali tipicam. memorizzati in tessiture (nei games)
ogni texel un base-color (componenti: R-G-B)
la tessitura è una “diffuse-map” / “color-map” / “RGB-map”
ogni texel una fattore di trasparenza (componenti: α) la tessitura è una “alpha-map” o “cutout-texture”
ogni texel una normale (componenti: X-Y-Z)
la tessitura è una “normal-map” o “bump-map” (more later)
ogni texel contiene un valore di specularità
la tessitura è una “specular-map”
ogni texel contiene un valore di glossiness
la tessitura è una “glossiness-map”
ogni texel contiene un valore di lighting baked...
la tessitura è una (baked) “light-map”
ogni texel contiene un valore di dist. dalla superficie
la tessitura è una “displacemnt map” o “height texture”
MIP map levels
Pre-filtering delle tessiture
“LOD pyramid, per immagini”!
Hardware sceglie livello giusto (per pixel) Evitare artefatti di sottocampionamento
1024x1024
512x512
256x256
1x1
Texture maps come assets
Caratteristiche:
Size:
risoluzione
canali (es: alpha?) MIP-map
(presenti o no?) Compressione?
e.g. “color-map”, quantizzazione o schemi di compressione specifici
Vincoli ricorrenti:
potenze di 2 per lato
(richiesto da sempre meno engines) sia in U che in V
(es: 256x256 o 1024x512)
res < max
(es: max = 4096 o 2048)
La maggior parte della ricchezza visuale percepita nel tipico videogames è dovuta alle tessiture!
Textures res
più impattanti (quality wise) di Meshes res!
GPU rendering of a Mesh in a nutshell
(reminder)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”
Texture Sheet on GPU
LOAD
Life of a Texure in a Game Engine
DISK CENTRAL RAM GPU RAM
Image Object
IMPORT
Image File
(as, basically, any 3D assets)
Texture Sheets (in GPU RAM)
Immagini rasterizzate, ma con perculiarità …
mipmap levels
channels per texels: 1,2,3, or (usually) 4 bits per channels:
usually 8, fixed point («true-color») – or compression
resolution: powers of 2 (usually)
Texture Sheets (in GPU RAM)
Durante il rendering:
meccanismi GPU (hardwired!) di accesso alla texture:
1. selezione del livello di MIPmap appropriato (opz)
2. decompressione
3. gestione di accessi fuori dal bordo (e.g. repeat)
4. passaggio da coord UV [0..1]2
a coord in texel [0..RESX]x[0..RESY]
5. interpolazione bilineare (opz)
Texture Sheets (in GPU RAM)
schemi di
compressione appositi:
quantizzazione
(e.g. 16 bits per texel: 5 red 5 green 5 blue 1 alpha) color-table (or “palette”)
(e.g. tabella di 256 colori, un indice a 8 bit per texel) schemi appositi per tessiture
(poiché devono consentire la random accessibility della texture!) molto lossy,
rate di compressione poco efficiente e rate fisso!
schema più diffiuso S3TC, con varianti DXT1
DXT2 DXT3 DXT4 DXT5
(diversi compromessi fra qualità, costo, canali…)
“no / 1-bit alpha”
“rough alpha”
“smooth alpha ”
Texture Shhets:
formati files
per immagini generiche:
.JPG /.JPEG lossy,
☺ottimo rate compressione,
☺immagini “fotografiche”: best solo 3 canali (no choice) 8 bit x canale (no choice) .PNG
☺lossless
< compression ratio
☺disegni: best
☺anche canale alpha possibile
☺anche 16 bits possibile .TIFF e.RAW (rari)
☺lossless
appositi per textures:
(opzione più usata) .DDS
(«direct draw surface») stesso indentico formato usato in GPU. Quindi:
☺inlcude MIPmap levels (volendo) compressione: molto lossy
e compression ratio pessimo (e rete fisso)
☺GPU ready!
Just read from disk &
load on GPU memory
Texture maps come assets:
formati files
x immagini generiche
(decomprimere tutta immagine prima di poter accedere ai pixel)
☺compressione: ottima loading: pesante:
decomprimere da RAM, (forse) ricomprimere in GPU-RAM
MIP-map lvls etc:
controllato dall’engine
x textures
(random accessibility ai texels, senza decomprimere tutta l’imm)
compressione: cattiva
☺loading: leggero
direct copy Disco => RAM =>
GPU RAM
☺MIP-map lvls etc:
controllato dall’artista
Texture maps assets e Mesh assets
Vari texture «sheets»
associati ad una mesh
o anche: più meshes sullo stesso sheet (bene)
tipica struttura :
ognimeshassociata a un materiale ognimateriale:
1 sheet di diffuse-map 1 sheet bumpmap (se serve) 1 sheet di alphamap (se serve) 1 vertex shaders + fragment shader vari parametri
(es, shininess, …)
se parti diverse di mesh associate a tessiture diverse:
scomporre oggetto in sotto-mesh
Texture maps assets e Mesh assets
Non necessariamente 1:1
1:N -- vari texture «sheets» associati ad una mesh N:1 -- più meshes sullo stesso sheet (bene)
se parti diverse di mesh associate a tessiture diverse:
scomporre oggetto in sotto-mesh
MATERIAL MESH A
B MESH
A
TEXTURE 1 BUMPMAP
TEXTURE 2 COLORMAP
Come si legano fra loro
tessiture & mesh?
3D Models i.e. tri-meshes with:
per vertex attrib normals, color, AO, … LODs
uv-mapping keyframes
cyclic animations face-morphs, …
“skinning”
Materials
lighting model stats / flags textures
RGB maps normal maps alpha maps … shaders
vertex, fragments, …
La parte 3D dei game assets
Animations
blend shapes skeletal animations kinematic animations geometry caches skeletons (rigs)
Geometric proxies
hit-boxes bounding objects AI-meshes
Particle systems
Environments
3d scenes skydomes env. maps scene props
UV-Mapping di una mesh
Serve un mapping (una corrispondenza):
superficie mesh spazio tessitura 2D
«parametrizzazione» della superficie
Idea: memorizzo questo mapping come attributo: (s,t ) per vertice
l’«u-v mapping» della mesh (u,v) == (s,t)
[0..1]
2Task di modellazione:
costruz dell’ “u-v mapping”
Texture “atlas”
(composto di vari “charts”)
u
v
UV mapping:
esempio
…
u
N = A
A N
B
B C
M C M
Notazione di spazio texture
Texture 2D u
v
Texture Space (o "spazio parametrico" o "spazio u-v")
Texture Space = [0,1] x [0,1]
es: 512 texels
es: 1024 texels
1.0
1.0
Due notazioni
s-t (es OpenGL)
s t
1.0
1.0 u
1.0
1.0
u-v (es DirectX) (0,0)
(0,0)
più diffusa
(in game industry)
più diffusa
(in game industry)
Nota: Spazio tessitura non dipende da risoluz
(o forma)Texture 2D
s t
1.0 1.0
1024x512
s 1.0 1.0
128x64
Conveniente!
si può ridurre la res dei texture sheets (bilanciando qualità / memoria) senza alcuna conseguenza sull’UV mapping delle mesh.
Es: caricare in GPU RAM solo i livelli MIP-MAP alti t
Due tipi di UV-mapping:
UV mapping NON iniettivo
Zone diverse della mesh fanno riferimento allo stessa regione della tessitura
es: with overlapping charts
☺Ottimizzazione spazio tessiutra
Sfruttamento simmetrie / ripetizioni del segnale
UV mapping iniettivo
Ogni punto della tessitura (non vuoto):
1 solo punto sulla mesh es: non-overlapping charts
☺Genericità / Flessibilità
Utilizzabile per vari scopi (e.g. light backing)
Scopi diversi
spesso, presenti entrambi: 2 UV mapping distinti
aka: “Unwrapping”
o: “Unwrapped UVs”
o:“1:1UV-mapping”
o:“LightmapUV-mapping”
aka: “UV-mapping”
(standard)
Costruzione dell’UV-mapping
Tipico task del modelling
programmi (semi-)automatici (molto studiati) modellatori professionisti
usando tools appositi
In pratica, bisogna trovare un posto in spazio tessitura per ogni triangolo della mesh
Analogo a:
sbucciare una mela (cutting)
stendere ogni buccia prodotta (unfolding)
disporre le buccie su un rettangolo piano (packing)
Nota richiede (quasi sempre) di “tagliare” la superficie:
discontinuità dei valori u,v cioè vertex-seams
Task di modellazione:
“u-v mapping”
(“u-v” == “s-t”)strategie pratiche:
1. selezionare edge di taglio
…o…
1. assegnare facce a charts
decidere dove sono i “texture seams”
2. unfolding
minimizzare “distorsione”
3. packing dei charts minimizzare spazi vuoti
assegnare aree secondo necessita’
(es, parti importanti maggiore spazio tessitura) (campionamento dei texel diviene in parte adattivo!)
DEMO!
Tileable Textures
A A
B
B
Tileable textures
Tileable textures
Tipico utilizzo:
Molto efficiente in spazio!
RGB maps:
come si ottengono
Image first, then UV-mapping
e.g. immagine da fotografie e.g. tileable images
UV-mapping
first, thenpaint 2D
paint with 2D app(e.g. photoshop)
UV-mapping
first, thenpaint 3D
paint within 3D modelling software,
or: 1. export 2D rendering,
2. paint over with e.g. photoshop, 3. reimport images
UV-mapper
UV-mapper 2D painter
UV-mapper 3D painter