Bump-Mapping
see demo!
+ =
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)
Bump-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, usually
arpoccio detto “Texture-for-Geometry”
much cheaper to render/store than real geometry!
details may extrudeoutor be encarvedin the mesh surface
usually: this affects lighting only sufficient to trick the eye!
especially with dynamic lighting (*) Terminologia non universalmente adottata…
Bump-map
Dal punto di vista del modellatore:
macro-strutturadell’oggetto low-poly mesh es: la forma generale del cavallo
es: la forma generale del viso es: la forma generale del drago
meso-strutturadell’oggetto bump-map es: la muscolatura del cavallo
es: le rughe sul viso es: le scaglie del drago
micro-strutturadell’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
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 Distancesof 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 Vectorsfrom 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 processing per 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 Normalsof 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 parallasse
nonla 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 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?
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 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. 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?
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
lo 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 X G 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
+1
-1 0
1.0
0.0
X∈ ∈ R
X = 2 R – 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 Normal-map
Non sarebbe possible con 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, dunque
o 5x5, o 7x7…