Video Game Dev - Uni Insubria 24/10/2015 Video Game Dev 2015/2016 Univ Insubria Textures Marco Tarini Texture mapping = + geometria 3D (insieme di quadrilateri) Marco Tarini - 2015/2016 RGB texture 2D (qui: color-map) 1 Video Game Dev - Uni Insubria 24/10/2015 Esempio (color-map) + = Texture maps! Uno degli assets + comuni e importanti di un games Uno dei maggiori consumatori di GPU RAM Marco Tarini - 2015/2016 2 Video Game Dev - Uni Insubria 24/10/2015 Texture maps: strutture dati Sostanzialmente, un’immagine raster «Texel» Texture sheet Tessiture (nei games) Texture sheet = def. di un segnale sulla superficie (la mesh) scopo simile di quello dei per-vertex attributes! ma… Tessiture: campionamenti regolari, e # texels >> # vertices segnali più complessi! densi (dettaglio a buon mercato!) Attributi: campionamenti irregolari (adattivi), e sparsi 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!) Marco Tarini - 2015/2016 3 Video Game Dev - Uni Insubria 24/10/2015 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 1x1 256x256 512x512 1024x1024 Marco Tarini - 2015/2016 4 Video Game Dev - Uni Insubria 24/10/2015 Texture maps come assets Caratteristiche: Vincoli ricorrenti: potenze di 2 per lato (richiesto da sempre meno engines) sia in U che in V (es: 256x256 o 1024x512) Size: risoluzione canali (es: alpha?) res < max (es: max = 4096 o 2048) MIP-map (presenti o no?) Compressione? e.g. “color-map”, quantizzazione o schemi di compressione specifici La maggior parte della ricchezza visuale percepita nel tipico videogames è dovuta alle tessiture! Marco Tarini - 2015/2016 Textures res più impattanti (quality wise) di Meshes res! 5 Video Game Dev - Uni Insubria 24/10/2015 GPU rendering of a Mesh in a nutshell (reminder) Load… store all data on GPU RAM Geometry + Attributes Connectivity Textures Shaders Parameters / Settings THE MESH THE “MATERIAL” …and Fire! send the command: “do it” ! Life of a Texure (as, basically, any 3D assets) in a Game Engine DISK CENTRAL RAM LOAD IMPORT Image File Marco Tarini - 2015/2016 GPU RAM Image Object Texture Sheet on GPU 6 Video Game Dev - Uni Insubria 24/10/2015 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. 2. 3. 4. 5. Marco Tarini - 2015/2016 selezione del livello di MIPmap appropriato (opz) decompressione gestione di accessi fuori dal bordo (e.g. repeat) passaggio da coord UV [0..1]2 a coord in texel [0..RESX]x[0..RESY] interpolazione bilineare (opz) 7 Video Game Dev - Uni Insubria 24/10/2015 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 “no / 1-bit alpha” “rough alpha” “smooth alpha ” (diversi compromessi fra qualità, costo, canali…) 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 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!) .PNM (davvero raro) compressione: ahah ☺ ma parsing facilissimo! (no lib) Marco Tarini - 2015/2016 8 Video Game Dev - Uni Insubria 24/10/2015 Texture maps come assets: formati files x immagini generiche x textures (decomprimere tutta immagine prima di poter accedere ai pixel) (random accessibility ai texels, senza decomprimere tutta l’imm) ☺ 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 assets e 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 Marco Tarini - 2015/2016 9 Video Game Dev - Uni Insubria 24/10/2015 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 MESH A MESH B TEXTURE 1 BUMPMAP MATERIAL A TEXTURE 2 COLORMAP Come si legano fra loro tessiture & mesh? Marco Tarini - 2015/2016 10 Video Game Dev - Uni Insubria 24/10/2015 La parte 3D dei game assets 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, … 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 [0..1]2 Idea: memorizzo questo mapping come attributo: (s,t ) per vertice l’«u-v mapping» della mesh (u,v) == (s,t) Marco Tarini - 2015/2016 11 Video Game Dev - Uni Insubria 24/10/2015 Task di modellazione: costruz dell’ “u-v mapping” u Texture “atlas” v (composto di vari “charts”) UV mapping: esempio u … A M N=A B (vertex seam) MESH Marco Tarini - 2015/2016 B C M N C v TEXTURE SPACE 12 Video Game Dev - Uni Insubria 24/10/2015 Notazione di spazio texture Texture Space (o "spazio parametrico" o "spazio u-v") 1.0 es: 512 texels Texture 2D u 1.0 v es: 1024 texels Texture Space = [0,1] x [0,1] Due notazioni più diffusa (in game industry) u-v (es DirectX) s-t (es OpenGL) t (0,0) 1.0 (0,0) Marco Tarini - 2015/2016 1.0 s 1.0 u 1.0 v 13 Video Game Dev - Uni Insubria 24/10/2015 Nota: Spazio tessitura non dipende da risoluz (o forma) t 1.0 Conveniente! si può ridurre la res dei texture sheets (bilanciando qualità / memoria) senza alcuna conseguenza sull’UV mapping delle mesh. Texture 2D 1024x512 s 1.0 t 1.0 Es: caricare in GPU RAM solo i livelli MIP-MAP alti 128x64 s 1.0 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 aka: “UV-mapping” (standard) 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à aka: “Unwrapping” o: “Unwrapped UVs” o: “1:1 UV-mapping” o: “Lightmap UV-mapping” 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? Marco Tarini - 2015/2016 14 Video Game Dev - Uni Insubria 24/10/2015 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 DEMO! 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!) Marco Tarini - 2015/2016 15 Video Game Dev - Uni Insubria 24/10/2015 Tileable Textures B A A B Tileable textures Marco Tarini - 2015/2016 16 Video Game Dev - Uni Insubria 24/10/2015 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-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: 1. export 2D rendering, 2. paint over with e.g. photoshop, 3. reimport images 4. goto 1 Marco Tarini - 2015/2016 17