Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 1
Video Game Dev 2015/2016Univ Insubria
Textures
Marco Tarini
Texture mapping
geometria 3D(insieme di quadrilateri)
+
RGB texture 2D
(qui: color-map)
=
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 2
Esempio (color-map)
+ =
Texture maps!Uno degli assets + comuni e
importanti di un games
Uno dei maggiori consumatori
di GPU RAM
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 3
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
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 4
I segnali tipicam. memorizzatiin 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
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 5
Texture mapscome assets
� Caratteristiche:
� Size:
� risoluzione
� canali (es: alpha?)
� MIP-map
� (presenti o no?)
� Compressione?
� e.g. “color-map”, quantizzazioneo 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!
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 6
GPU rendering of a Meshin 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”
TextureSheet
on GPU
LOAD
Life of a Texurein a Game Engine
DISK CENTRAL RAM GPU RAM
ImageObject
IMPORT
ImageFile
(as, basically, any 3D assets)
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 7
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)
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 8
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
� � compressione: vabbe’
☺ max flessibilità canali etc
� .PNM (davvero raro)
� � � compressione: ahah
☺ ma parsing facilissimo! (no lib)
� 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
(no decompress / recompress!)
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 9
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 assetse Mesh assets
� Vari texture «sheets»associati ad una mesh� o anche: più meshes sullo stesso sheet (bene)
� tipica struttura :� ogni mesh associata a un materiale� ogni materiale:
� 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
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 10
Texture maps assetse 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
AMESH
B
MESH
A
TEXTURE 1
BUMPMAP
TEXTURE 2
COLORMAP
Come si legano fra loro tessiture & mesh?
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 11
� 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 deigame 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]2
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 12
Task di modellazione:costruz dell’ “u-v mapping”
Texture “atlas”(composto di
vari “charts”)
u
v
UV mapping:esempio
MESH TEXTURE SPACE
…
u
vN = A
A N
B
B C
C
(vertex seam)
MM
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 13
Notazione di spazio texture
Texture 2Du
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
v
1.0
1.0
u-v(es DirectX)
(0,0)
(0,0)
più diffusa (in game industry)
più diffusa (in game industry)
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 14
Nota: Spazio tessitura non dipende da risoluz (o forma)
Texture 2D
s
t
1.0
1.0
1024x512
s1.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
� (2 attributi UV per ogni vertici)Quali degli UV mapping
mostrati fin’ora sono di
quale tipo?
aka: “Unwrapping”o: “Unwrapped UVs”
o: “1:1 UV-mapping”
o: “Lightmap UV-mapping”
aka: “UV-mapping”(standard)
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 15
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!
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 16
Tileable Textures
AA
B
B
Tileable textures
Video Game Dev - Uni Insubria 24/10/2015
Marco Tarini - 2015/2016 17
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, then paint 2D� paint with 2D app (e.g. photoshop)
� UV-mapping first, then paint 3D� paint within 3D modelling software, � or: 1. export 2D rendering,
2. paint over with e.g. photoshop, 3. reimport images4. goto 1
UV-mapper
UV-mapper 2D painter
UV-mapper 3D painter