Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Lightmaps

Iniciado por Degiik, 01 de Julio de 2004, 12:04:06 AM

« anterior - próximo »

Degiik

     Tengo algunos problemas de conceptos sobre la utilización de los lightmaps, la cuestión es la siguiente: renderizo una escena en la cual tengo una habitación ( con varios objetos, no importa ). A esta escena le añado iluminación que emana una lámpara cenital. Hasta aquí todo en orden, pero entonces ahora suponemos que pongo en juego algun elemento dentro de la habitación que produce algún tipo de luz propia, pongamos un televisor enchufado haciendo los típicos grumos b/n, me creo el lightmap que genera el televisor y lo aplico. El resultado es que el televisor+lightmap se ve afectado por la iluminación de la habitación, de forma que si apago la luz de la habitación la tele no se ve. Si renderizo el televisor sin computar los calculos de iluminación y el resto de la escena si, entonces el problema es que no solo se ve la pantalla iluminada, sino que el televisor completo ( caja ) con la luz apagada.

No se si me acabo de explicar del todo... espero vuestra ayuda.
Gracias.
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

DraKKaR

 No se si lo he entendido bien, pero lo que estás haciendo es calcular los lightmaps de una escena tantas veces como luces haya... la cosa no suele ir así: deberías calcular los lightmaps de toda la iluminación completa que afecta a una escena. Aunque los lightmaps pueden aplicarse a luces dinámicas con algunas variaciones del esuqmea inicial, lo más usual es aplicarlos a luces estáticas únicamente. Si lo que quieres es conseguir efectos de encendido o apagado de luces, podrías usar trucos de luces dinámicas, como proyección de texturas.

De todas formas apra resolver tu problema deberías dar más detalles sobre cual es tu algoritmo de mezclar las texturas, por ejemplo.

Degiik

 Como ya dije creo que no me explique del todo bien, voy a tratar de simplificarlo.

Renderizo una toda una habitacion con una luz normal.
Un objeto dentro de la habitacion emite luz propia. ( calculada con un lightmap: usando multitexturas )

Problema: El objeto que emite luz propia se ve afectado por la luz de la habitacion normal, así que si apago la luz de la habitación el lightmap a tomarpolculo.

A ver si ahora me explique mejor.

Un saludo.
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

Zaelsius

 ¿Pq no pones alguna captura? ¿qué es una luz "normal", una luz dinámica? :ph34r:  

Degiik

 con luz "normal" me refiero a la que activas con el OGL con...

glEnbale (GL_LIGHT0)

por supuesto es dinámica.
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

tamat

 Hasta donde yo se no es bueno mezclar ambas cosas, o iluminas la escena por openGL o iluminas por lightmaps, (no hablo de los modelos de la escena), pero si mezclas ambas cosas salen efectos raros como el que dices ya que el lightmap tambien se ve afectado por la iluminación lo que no es muy coherente...
Por un stratos menos tenso

BeRSeRKeR

 Lo más probable es que tu problema sea que al desactivar la luz de OpenGL, al renderizar la escena, ésta tendrá color negro. Así que al aplicar el lightmap (supongo que modulando éste con el framebuffer), el color resultante será negro porque:

color_lightmap * color_framebuffer = color_lightmap * 0 = 0

Lo que podrías hacer es, si se apaga la luz OpenGL, no sólo desactivas dicha luz sino que también desactivas la iluminación. De esa forma el escenario se pintara sólo con texturas de forma que cuando apliques el lightmap todo debería verse correctamente. De todas formas eso no es una solución ya que imagina que hay más de una luz OpenGL simultáneamente. Al desactivar la iluminación estarías también desactivando todas las luces.

La solución que se me ocurre ahora mismo es:

- Activas la escritura en el depth buffer y activas el depth test con modo GL_LEQUAL.
- Pintas la escena sin texturas, sólo con la iluminación de OpenGL.
- Desactivas la escritura en el depth buffer y activas el depth test con modo GL_EQUAL.
- Activas el blending en modo aditivo (GL_ONE, GL_ONE) ya que el resultado de la contribución de cada luz es la suma de cada una de éstas.
- Pintas el escenario sólo con los lightmaps aplicados.
* Llegados a este punto tendríamos en pantalla la escena única y exclusivamente con la luz aplicada (tanto de la luz OpenGL como los lightmaps).
* Ahora hay que combinar eso con la escena texturada...
- Activas el blending en modo (GL_DST_COLOR, GL_ZERO).
- Pintas la escena sólo con las texturas aplicadas.

Todo esto lo he dicho de memoria y si a eso le añadimos que llevo mucho tiempo sin programar nada, pues puede que no sea correcto. :lol:

De todas formas estoy con tamat. El tema de mezclar lightmaps con iluminación OpenGL no parece lo mejor que digamos. Fíjate que con el método que he escrito estás dando 3 pasadas aunque es cierto que sólo en la primera de ellas escribes en el depth buffer. Además, aunque soluciones este problema, es posible que más adelante te encuentres con otros de más difícil solución...

En fin, te recomiendo lo que siempre hago en estos casos, que es: ¡Modernízate y comienza a utilizar iluminación per-pixel (si es que tienes la posibilidad, claro)!. :lol:

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.