see demo! Bump-Mapping + = Low-poly mesh (uv-mapped!) Bump-map Bump-map (here: a tangent space normal map) lots of cheap geometric detail (apparently) assets courtesy of Mount&Blade (Talesworlds) Bump-map (*) texture preposta a fornire un illusione di dettaglio geometrico (non modellato nella mesh) recall: mesh can only be low-res (low-poly) not much detail in it, usually arpoccio detto Texture-for-Geometry much cheaper to render/store than real geometry! details may extrude out or be encarved in the mesh surface usually: this affects lighting only sufficient to trick the eye! especially with dynamic lighting (*) Terminologia non universalmente adottata Spesso, per «bump-map» si intendono le sole «displacement map», o altri tipi Marco Tarini - 2015/2016 1
Bump-map Dal punto di vista del modellatore: macro-struttura dell oggetto low-poly mesh es: la forma generale del cavallo es: la forma generale del viso es: la forma generale del drago meso-struttura dell oggetto bump-map es: la muscolatura del cavallo es: le rughe sul viso es: le scaglie del drago micro-struttura dell oggetto parametri del materiale es: la peluria del cavallo es: la struttura del derma / del sebo es: la variabile ruvidità / liscezza delle scaglie Bump maps: Categorie Bump maps Displacement maps Normal maps Scalar Vectorial Object Space Tangent Space most common Marco Tarini - 2015/2016 2
Bump maps: Categorie Bump map: qualunque tessitura che codifica dettagli hi-freq ( meso-struttura ) su una sup low-res Displacement Map Dettagli codificati memorizzando le differenze fra low-res e hi-freq Come scalari (distanza lungo la normale) oppure come vettori Usati per re-tasselation, o per effetto parallasse (parallax mapping) Normal Map: Dettagli codificati memorizzando le normali della sup hi-freq Modificano il lighting In quale spazio (in che base vettoriale)? Tangent Space: (spazio TBN) Riutilizzabili su più superfici indipendentemente dall oreintamento Richiede direzioni Tangenti-Bitangenti (e normali) def su superifcie Object Space: Solo per UV-mapping 1:1 Displacement map (scalare): concept Store the Distances of the detailed surfaces from the low-poly mesh example -- a bump-map for a screw-head : testa della vite superficie dettagliata (che vorrei modellare) 0.2 0.6 0.4 low-poly mesh (approssimaz di ^) (qui: piatta ) 0 0 0 0 0 0 0.1.5.6.6.7.5.4.2 0 0 0 0 0 0 0 displacement map (scalare) Marco Tarini - 2015/2016 3
Displacement map (scalare): note Ogni texel: distanza della sup descritta lungo la direzione della normale (della mesh low-poly) 1 scalare per texel texture a 1 canale Verso: in fuori (estrusione) in dentro (scavo) entrambi Valori positivi: estrusione Valori negativi: scavo, in dentro Storage: immagine a gray-scale (1 scalare per pixel) rimappando i valori nell intervallo [0..1] Usi: lighting diretto, approssimato? effetto embossing calcolo illuminazione globale (ambient occlusion) VEDREMO dato intermedio per la costruzione di una normal map white = verso alto black = verso il basso facili da dipingere manualmente! praticamente, un campo di altezza (height field) def. sulla sup. della mesh Displacement map vettoriale: concept Store Vectors from the low-poly mesh to the detailed surfaces sottosquadro! non un campo di altezza Variante più espressiva, ma più cara e meno utlizzabile. Non molto usata (nei games). superficie dettagliata (che vorrei modellare) low-poly mesh (approssimaz di ^) (qui: piatta ) displacement map (vettoriale) Marco Tarini - 2015/2016 4
Displacement map (scalare): Rendering - effetto embossing ½ Displ.-map + ½ ( 1- Displ.-map ) = lighting shifted:! (approssimato) Metodo image processing per approssimare il lighting su una displ map (scalare) concept: differenze finite : approssima gradiente 2D approssima (X,Y) normali sup approssima lighting Approx troppo cruda: non più usato (nei games) Displacement map (scalare): Rendering parallax mapping Tecnica per simulare l effetto parallasse (su un Displacement Map scalare) Vedremo, nella lez sul rendering Marco Tarini - 2015/2016 5
Normal Map: concept Store the Normals of the detailed surfaces example -- a normal-map for a screw-head : testa della vite superficie dettagliata (che vorrei modellare) low-poly mesh (approssimaz di ^) (qui: piatta ) normal map (una normale per texel) Normal Map: note Modifica il lighting non il parallasse non la sagoma dell oggetto il lighting riflette il dettaglio hi-freq dell oggetto dinamicamente (con luci variabili!) illusione totale: molto convincente se non si tenta di modellare macro-strutture In rendering: usare la normale dalla tessitura (per il lighting) invece che la normale per-vertice interpolata Le normali sono espresse in coord cartesiane Spesso ma non sempre ( modi migliori per esprimere vett unitari!) Domanda: ok, ma in quale spazio??? more later Marco Tarini - 2015/2016 6
Normal Maps: in che spazio esprimo le norm? Spazio oggetto: Object-Space Normal-Maps (lo stesso in cui esprimo le pos dei vertici) la normale per vertice diventa superflua! (basta la normale dalla texture!) banale in fase di rendering normal map legata ad uno specifico oggetto no riuso delle normal map su oggetti diversi ogni regione della normal map legata alla sua regione preposta nell oggetto! solo mapping iniettivi!!! e.g. no tiling, no sfruttamento simmetrie Normal Maps: in che spazio esprimo le norm? Intuizione: sarebbe più pratico definire le normali relativamente allo spazio texture : X: verso destra della texture Y: verso il basso della texture Z: ortogonale al piano di texture ma, come portare questo spazio sul modello 3D? Marco Tarini - 2015/2016 7
Spazio tangente (aka spazio TBN) Spazio vett definito punto della superficie: asse Z: Normale (alla superficie) assi X e Y: vettori Tangenti (alla superficie) X = Tangente Y = Bi-Tangente (a volte, ma inappropriatamente: Bi-Normale ) memorizzato: per vertice sulla mesh come attributo interpolato nel resto della sup possibile ottimizzare! non necessariamente 3 vettori Spazio tangente (aka spazio TBN) Come li calcolo Normale as usual (vedi lez. sulle mesh) Tangente & Bi-Tangente calcolabili dall UV mapping! sono i gradienti della coord U e della coord V riespett. (dettaglio implementativo: calcolare per faccia, mediare per vertice) Note: non necessariamente esattamente ortonormale left-handed o right-handed, anche nella stessa mesh richiede discontinuità seams (le stesse dell UV mapping? non solo! perché?) Marco Tarini - 2015/2016 8
Normal Maps: in che spazio esprimo le norm? Spazio tangente: Tangent Space Normal-Maps (le bump-maps di default, nei games) servono, per vertice, attributi extra: direzione Normale direzione Tangente direzione Bitangente normal map condivisibile per più oggetti normal map con UV-mapping anche non-iniettivi e.g. tileable e.g. sfruttamento simmetrie normal map costruibile a prescindere dall oggetto a partire da un displacement map lo spazio tangente (si può ottimizzare il suo storage, non necess. 3 vettori) Normal Maps: in che spazio esprimo le norm? lo spazio tangente Spazio tangente: Tangent Space Normal-Maps (le bump-maps di default, nei games) servono, per vertice, attributi extra: direzione Normale direzione Tangente direzione Bitangente normal map condivisibile da più oggetti normal map con UV-mapping anche non-iniettivi e.g. tileable e.g. sfruttamento simmetrie normal map costruibile a prescindere dall oggetto a partire da un displacement map in pratica, la normal map specifica come modificare la normale memorizzata per vertice, invece di sovrascriverla Marco Tarini - 2015/2016 9
Tangent Directions (B+T) as per vertex attributes Stored negli asset mesh, or computed after import: DISK CENTRAL RAM GPU RAM IMPORT LOAD Mesh File Mesh Object Mesh GPU Object PREPROCESS: COMPUTE TANGENT DIRS CON TANGENT DIRS (per vetex) Normal-maps: Storage Idea: come RGB texture R X G Y B Z ma X,Y,Z [-1,+1] e R,G,B [0,+1] quindi necessario remapping: X +1 0-1 (normals = unit vectors) 1.0 0.0 Vantaggio: stessa compressione delle RGB textures/images Semplice, ma rappresentaz. più efficienti di vett. unitari! R R = ½ ( X + 1 ) X = 2 R 1 Marco Tarini - 2015/2016 10
Normal-maps: Storage Esempi: caso tangent space normal-map normale prevalente: X=~0, Y=~0, Z=~1 colore prevalente: R =~0.5, G=~0.5, B=~1 ( ~azzurro) Non sarebbe possible con Per es: Tiled Object Space NM! (tangent space) Normal Maps + = Low-poly mesh UV-mapping con tiling! Tangent dirs. Normal-map Tileable! assets courtesy of Mount&Blade (Talesworlds) Marco Tarini - 2015/2016 11
Bump-maps assets at a glance (can you tell which is which?) Tangent Space Normal map Object Space Normal map Displacement Map (scalar) the default kind Nota Object Space Normal map (Tangent Space) Normal map UV-mapping 1:1 gamba destra!= gamba sinistra UV-mapping NON iniettivo simmetrie sfruttate! Marco Tarini - 2015/2016 12
Normal maps: come si ottengono (1/4) Da displacement maps! see demo! 2D texture painter / etc Displacement map come grayscale = estruso - in fuori = profondo - incassato Filtro (e.g. photoshop) Normal map Normal maps: come si ottengono (1/4) Da: displacement map a: normal map algoritmo: texel t di displacement map nota: ad ogni texel corrisponde un punto 3D (x, y, z = height[x,y]) o 5x5, o 7x7 compute best fitting plane piano che minimizza la distanza dai punti dei i 3x3 texel centrati su t semplice problema di minimizzazione quadratica la normale di questo piano è la normale per t Nota: si ottiene la normal map relativa allo spazio tessitura una tangent space normal map, dunque Marco Tarini - 2015/2016 13