Textures - Texture mapping - Marco Tarini
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Video Game Dev - Uni Insubria 24/10/2015 Video Game Dev 2015/2016 Univ Insubria Textures Marco Tarini Texture mapping + = geometria 3D RGB texture 2D (insieme di quadrilateri) (qui: color-map) Marco Tarini - 2015/2016 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 densi (dettaglio a buon mercato!) segnali più complessi! 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 Vincoli ricorrenti: potenze di 2 per lato Caratteristiche: (richiesto da sempre meno engines) sia in U che in V Size: (es: 256x256 o 1024x512) res < max risoluzione (es: max = 4096 o 2048) canali (es: alpha?) MIP-map (presenti o no?) Compressione? e.g. “color-map”, quantizzazione o schemi di compressione specifici La maggior parte della Textures res ricchezza visuale percepita più impattanti (quality wise) nel tipico videogames è dovuta di Meshes res! alle tessiture! Marco Tarini - 2015/2016 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 THE MESH Connectivity Textures Shaders THE “MATERIAL” Parameters / Settings …and Fire! send the command: “do it” ! Life of a Texure (as, basically, any 3D assets) in a Game Engine DISK CENTRAL RAM GPU RAM IMPORT LOAD Image Image Texture File Object Sheet on GPU Marco Tarini - 2015/2016 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. 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) Marco Tarini - 2015/2016 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 “no / 1-bit alpha” DXT2 “rough alpha” DXT3 DXT4 “smooth alpha ” DXT5 (diversi compromessi fra qualità, costo, canali…) Texture Shhets: formati files per immagini generiche: .JPG / .JPEG lossy, ☺ ottimo rate compressione, appositi per textures: ☺ immagini “fotografiche”: best (opzione più usata) solo 3 canali (no choice) .DDS 8 bit x canale (no choice) («direct draw surface») .PNG stesso indentico formato ☺ lossless usato in GPU. Quindi: ☺ inlcude MIPmap levels (volendo) < compression ratio compressione: molto lossy ☺ disegni: best e compression ratio pessimo ☺ anche canale alpha possibile (e rete fisso) ☺ anche 16 bits possibile ☺ GPU ready! .TIFF e .RAW (rari) Just read from disk & ☺ lossless load on GPU memory compressione: vabbe’ (no decompress / recompress!) ☺ max flessibilità canali etc .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 (random accessibility ai texels, prima di poter accedere ai pixel) senza decomprimere tutta l’imm) ☺ compressione: ottima compressione: cattiva loading: pesante: ☺ loading: leggero decomprimere da RAM, direct copy (forse) ricomprimere in Disco => RAM => GPU-RAM GPU RAM MIP-map lvls etc: ☺ MIP-map lvls etc: controllato dall’engine 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 TEXTURE 1 BUMPMAP MESH A MATERIAL TEXTURE 2 A COLORMAP MESH B 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 Animations i.e. tri-meshes with: blend shapes per vertex attrib skeletal animations normals, color, AO, … kinematic animations LODs geometry caches uv-mapping skeletons (rigs) keyframes cyclic animations face-morphs, … Geometric proxies “skinning” hit-boxes bounding objects Materials AI-meshes lighting model stats / flags textures Particle systems RGB maps normal maps alpha maps … Environments 3d scenes shaders vertex, fragments, … 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 B C M N M N=A B C (vertex seam) v MESH TEXTURE SPACE Marco Tarini - 2015/2016 12
Video Game Dev - Uni Insubria 24/10/2015 Notazione di spazio texture Texture Space (o "spazio parametrico" o "spazio u-v") 1.0 u Texture 2D es: 512 texels 1.0 v es: 1024 texels Texture Space = [0,1] x [0,1] Due notazioni più diffusa (in game industry) s-t u-v (es OpenGL) (es DirectX) t (0,0) 1.0 1.0 u s 1.0 (0,0) 1.0 v Marco Tarini - 2015/2016 13
Video Game Dev - Uni Insubria 24/10/2015 Nota: Spaziotessitura non dipende da risoluz (o forma) t 1.0 Conveniente! si può ridurre la res Texture 2D 1024x512 dei texture sheets (bilanciando qualità / memoria) s senza alcuna 1.0 conseguenza t sull’UV mapping 1.0 delle mesh. Es: caricare in 128x64 GPU RAM solo i livelli MIP-MAP alti s 1.0 Due tipi di UV-mapping: UV mapping NON iniettivo Zone diverse della mesh fanno riferimento allo stessa regione della tessitura aka: “UV-mapping” es: with overlapping charts (standard) ☺ Ottimizzazione spazio tessiutra Sfruttamento simmetrie / ripetizioni del segnale UV mapping iniettivo Ogni punto della tessitura (non vuoto): aka: “Unwrapping” 1 solo punto sulla mesh o: “Unwrapped UVs” es: non-overlapping charts o: “1:1 UV-mapping” ☺ Genericità / Flessibilità 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 DEMO! …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!) 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-mapping first, then paint 3D paint within 3D modelling software, or: 1. export 2D rendering, 2. paint over with e.g. photoshop, UV-mapper 3D painter 3. reimport images 4. goto 1 Marco Tarini - 2015/2016 17
Puoi anche leggere