Environment Mapping
Tamiazzo Claudio
EGD07
Cos’è
• Tecnica utilizzata in grafica digitale allo
scopo di realizzare oggetti riflettenti senza
ricorrere agli onerosi calcoli computazionali
del RayTracing.
Come Funziona
• L’environment mapping permette di
realizzare superfici riflettenti utilizzando
delle textures rappresentanti l’ambiente
da riflettere
• La riflessione dipende da una
environment map nella quale è
proiettata l’immagine da riflettere
• In base al punto di vista, si effettuano i
calcoli per determinare l’immagine
riflessa
Tecniche più Diffuse
• Standard Environment Mapping, o più
comunemente detta Spherical
Environment Mapping.
• Cube Environment Mapping
Spherical Environment Mapping
• Sviluppata da Blinn e Newell
• Si basa sull’utilizzo come environment
map di una sfera “texturizzata”
• Solitamente la texture consiste in
un’immagine ottenuta con una macchina
fotografica con lenti a grandangolo
Effetto ottenuto con lo spherical E.M.
Foto ottenuta con lente “fisheye”
Spherical Environment Mapping
• Questa tecnica porta con se delle grosse
limitazioni legate al punto di vista
dell’utente nella scena 3D
• Una volta che il punto di vista cambia,
sarebbe necessario disporre di una texture
apposita per ogni angolazione
Fronte
Riflessione corretta
Retro
Riflessione incoerente
Cube Environment Mapping
• Tecnica che utilizza il cube mapping per
ottenere oggetti riflettenti
• Una cube map consiste in 6 textures
quadrate che vanno a formare una
environment map cubica
Esempio: environment map di un paesaggio da riflettere ottenibile con sei foto
fatte in sei direzioni diverse
Cube Environment Mapping
• Per realizzare una superficie riflettente si
calcola il raggio dal punto di vista
all’oggetto ed, in base alla normale, il
raggio riflesso che va a intercettare un
punto su una delle sei facce del cubo.
• Il colore intercettato sulla texture sarà il
colore da riportare sull’oggetto nel punto di
riflessione
Cube Mapping In OpenGL
• Creazione Cube Map
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA,
imageSize, 0,GL_RGBA, GL_UNSIGNED_BYTE,image1);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA,
imageSize, 0,GL_RGBA, GL_UNSIGNED_BYTE,image2);
.
.
.
.
.
.
Cube Mapping In OpenGL
• Settaggio wrapping e filtering
glTexParameteri(GL_TEXTURE_CUBE_MAP,
GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP,
GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP,
GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_CUBE_MAP,
GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_CUBE_MAP,
GL_TEXTURE_WRAP_R, GL_REPEAT);
Cube Mapping In OpenGL
• Generazione delle coordinate della cube
map texture
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE,
GL_REFLECTION_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE,
GL_REFLECTION_MAP);
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE,
GL_REFLECTION_MAP);
GL_REFLECTION_MAP vs GL_NORMAL_MAP
GL_REFLECTION_MAP
GL_NORMAL_MAP
Immagini realizzate con programma cubemap.c da http://developer.nvidia.com/
Cube Mapping In OpenGL
• Abilitazione texturing
glEnable(GL_TEXTURE_CUBE_MAP_EXT);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
Applicazioni Cinematografiche
Flight of the navigator, 1986:
Superficie della navicella realizzata
Con l’uso dell’ environment mapping
Terminator 2: Judgement Day-1991
Il cyborg T1000 nelle sue metamorfosi è una delle più
celebri applicazioni dell’environment mapping
Bibliografia
• Libri:
“OpenGl Programming Guide” di
Shreiner, Woo, Neider, Davis
• Rete:
http://www.debevec.org/ReflectionMapping/
http://www.developer.com
http://en.wikipedia.org/wiki/Reflection_mapping
http://developer.nvidia.com
Scarica

Environment Mapping