• Non ci sono risultati.

Bump-map (*)

N/A
N/A
Protected

Academic year: 2021

Condividi "Bump-map (*)"

Copied!
8
0
0

Testo completo

(1)

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, 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

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

(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: (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).

(3)

½ · + ½·( 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 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 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

(4)

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é?)

(5)

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

RX

GY BZ

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

XR

X = 2R – 1 R = ½ (X + 1 )

(normals = unitvectors)

(6)

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!

(7)

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…

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

(8)

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 produced

fully 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)

Riferimenti

Documenti correlati

 Object space: Object-Space Normal-Maps (The same in which I express the vertex pos).   the normal per vertex

Spazio tangente: Tangent Space Normal-Maps (le bump-maps di default, nei games). servono, per vertice,

[r]

– Scegli la variabile con il maggior numero di vincoli sulle altre variabili Scegli la variabile con il maggior numero di vincoli sulle altre variabili rimaste (si applica quando

(at the end of the list, or inserts them at the given index) contains(value) returns true if given value is found somewhere in this list containsAll(list) returns true if this

Scuola di Ingegneria - Dipartimento di Ingegneria dell'Energia, dei Sistemi, del Territorio e delle Costruzioni Corso di Laurea Magistrale in Ingegneria Edile-Architettura - Tesi

and rare cross lamination organized in metric to decametric strata. Thickness:

Kamienna Góra - “Specjalna Strefa Ekonomiczna Małej Przedsiębiorczości S.A.” - SEZ Legnica - “Legnicka Specjalna Strefa