Normal-Mapping
+ =
Low-poly mesh
(uv-mapped!)
Bump-map
(here: a tangent space normal map)
lots of cheap geometric detail
(apparently)
Low-poly mesh
assets courtesy of “Mount&Blade” (Talesworlds)
Normal-map
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, usuallyarpoccio detto “Texture-for-Geometry”
much cheaper to render/store than real geometry!
details may extrude
outor be encarved
inthe 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
Bump-map
Dal punto di vista del modellatore:
macro-struttura
dell’oggetto
low-poly mesh es: la forma generale del cavalloes: la forma generale del viso es: la forma generale del drago
meso-struttura
dell’oggetto
bump-map es: la muscolatura del cavalloes: le rughe sul viso es: le scaglie del drago
micro-struttura
dell’oggetto
parametri del materiale es: la peluria del cavalloes: 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
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: (spazioTBN)
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 :
superficie dettagliata (che vorrei modellare) testa della vite
low-poly mesh
(approssimaz di ^) (qui: piatta )
displacement map (scalare)
0 0 0 0 .1 .5 .6 .6 .7 .5 .4 .2 0 0 0 0 0 0 0 0 0 0
0.2 0.6 0.4
Displacement map (scalare):
note
Ogni texel:
distanzadella sup descritta lungo la direzione dellanormale
(della mesh low-poly)
1 scalareper 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) dato intermedio per la costruzione di una normal map
white = verso alto black = verso il basso
VEDREMO
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
superficie dettagliata (che vorrei modellare)
low-poly mesh
(approssimaz di ^) (qui: piatta )
displacement map (vettoriale)
“sottosquadro”!
non un campo di altezza
Variante più espressiva, ma più cara e meno utlizzabile.
Non molto usata (nei games).
½ · + ½·( 1- ) = lighting
Displacement map (scalare):
Rendering - effetto embossing
Displ.-map Displ.-map
(approssimato)
shifted: !
Approx troppo cruda:
non più usato (nei games)
Metodo image processingper approssimare il lighting su una displ map (scalare)
concept:
differenze finite : approssima gradiente 2D approssima (X,Y) normali sup approssima lighting
Displacement map (scalare):
Rendering – parallax mapping
Tecnica per simulare l’effetto parallasse (su un Displacement Map scalare)
Vedremo, nella lez sul rendering
Normal Map:
concept
Store the Normals of the detailed surfaces
example -- a normal-map for a screw-head :
superficie dettagliata (che vorrei modellare)
testa della vite
low-poly mesh
(approssimaz di ^) (qui: piatta )
normal map (una normale per texel)
Normal Map:
note
Modifica il lighting
nonil parallassenonla 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
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 diversiogni 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?
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 vettoriSpazio tangente (aka spazio TBN)
Come li calcolo
Normaleas usual (vedi lez. sulle mesh) Tangente
&
Bi-Tangentecalcolabili dall’ UV mapping!
sono i gradientidella 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é?)
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. tileablee.g. sfruttamento simmetrie
☺ normal map costruibile a prescindere dall’oggetto
a partire da un displacement maplo spazio tangente
(si può ottimizzare il suo storage, non necess. 3 vettori)
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 da più oggetti
☺ normal map con UV-mapping anche non-iniettivi
e.g. tileablee.g. sfruttamento simmetrie
☺ normal map costruibile a prescindere dall’oggetto
a partire da un displacement maplo spazio tangente
in pratica, la normal map specifica come modificarela normale memorizzata per vertice, invece di sovrascriverla
Mesh GPU Object
LOAD
Tangent Directions (B+T) as per vertex attributes
DISK CENTRAL RAM GPU RAM
PREPROCESS:
COMPUTE TANGENT DIRS
Mesh Object
IMPORT
Mesh File
Stored negli asset mesh, or computed after import:
CON TANGENT DIRS
(per vetex)
Normal-maps:
Storage
Idea:
come RGB texture
R XG Y B Z
ma X,Y,Z
∈ [-1,+1]e
R,G,B∈ [0,+1]quindi necessario remapping:
Vantaggio: stessa compressione delle RGB textures/images
Semplice, ma ∃ rappresentaz. più efficienti di vett. unitari!+1
-1 0
1.0
0.0
X∈ R∈
X = 2R – 1 R = ½ (X + 1 )
(normals = unitvectors)
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)
Per es: Tiled
(tangent space) Normal Maps
+ =
UV-mapping con tiling!
Tangent dirs.
Tileable!
Low-poly mesh
assets courtesy of “Mount&Blade” (Talesworlds)
Normal-map Object Space NM!
Bump-maps assets at a glance
(can you tell which is which?)
Object Space Normal map Tangent Space
Normal map
Displacement Map (scalar)
the default kind
Nota
Object Space Normal map UV-mapping 1:1 gamba destra !=
gamba sinistra
(Tangent Space) Normal map UV-mapping NON iniettivo
simmetrie sfruttate!
Normal maps:
come si ottengono (1/4)
Da displacement maps!
Displacement map come grayscale
= estruso - in fuori
= profondo - incassato
Filtro (e.g.
photoshop) 2D texture
painter / etc
Normal map
see demo!
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])
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, dunqueo 5x5, o 7x7…
Normal maps:
come si ottengono (2/4)
Photometric Stereo (una forma di
“inverse lighting”)
da: N immagini (N>=4) reali
Stesso punto di vista Illuminazione diversa(possibilmente, controllata e nota)
a Normal Map
in spazio vista!convertire in spazio oggetto, o TBN
Normal maps
come si ottengono (3/4)
Normal-Painting sul modello (e.g. con Z-brush, Sculptris Alpha…) simile a pittura delle diffuse maps
ma painting di dettagli geometrici
simile a scuplting
ma il sistema scrive direttamente normali, non geometria
Normal maps
come si ottengono (4/4)
Detail recovery
“detail texture” synthesis baking delle tessiture
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)
Detail texture synthesis (aka detail preservation)
Idea:
input:
a low res mesh A, with (injective) UV-map a hi-res mesh B with per vertex attributes
output:
a texture for A
capturing the vertex attributes in B
normals? a normal map is produced (in object space, convert to TBN if necessary) base color? a diffuse maps is produced baked (global lighting)? a light-map is producedfully automatic!
es: A ottenuto da B tramite semplificazione automatica
Modelling + Texturing:
Pipeline production example
Concept drawings 2D artists Low-poly model A
3D modeller, low poly editing tools (Injective) UV-mapping of A
UV-mapper, or automatic tool, to build UV-map for A Subdivision, digital sculpting of Hi-Res model B
3D modeller, digital sculpting Painting over B
per vertex painting Detail Recovery:
Automatic construction of Textures for A with attributes from B:
Normals from B, (normal map) Colors from B (diffuse map) Baked lighting from B (light-map)