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