Modelli 3D nei games Modelli 3D
Transcription
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