Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ayuda Con Lightmaps

Iniciado por AgeR, 26 de Septiembre de 2003, 01:19:52 PM

« anterior - próximo »

AgeR

 Hola, a ver si alguien me puede ayudar con esto.
Estoy haciendo unas rutinas de cálculo de lightmaps, que de momento están en una versión muy básica aún.
Para probarlas tengo un pequeño escenario, y una luz. Los lightmaps "parecen" generarse bien, pero al aplicarlos aparecen "rayas" extrañas en los bordes de algunos polígonos.
El sistema para generarlos por el momento es muy básico :
Para cada triángulo, generamos un pequeño lightmap de 8x8. Luego montamos un único archivo (un tga) con todos los lightmaps en él.

Muestro a continuación el resultado :


La luz está justamente en la posición de la cámara (0,50,0).

El caso es que no sé cuál es el problema exactamente.
Podría ser la imprecisión al obtener las coordenadas de textura por tratarse de floats?
Podría ser algún tipo de interpolación con los lightmaps de alrededor? Todos son de 8x8 así que la textura grande es cuadrada.

En fin, a ver si alguien que haya tenido este problema o haya usado lightmaps me puede resolver la duda. Gracias!

Ithaqua

 Lo típico que suele ocurrir es que el filtrado de la textura coja pixeles de otro lightmap que no pertenece a ese polígono/objeto.
thaqua^Stravaganza
http://ithaqua.stravaganza.org

BeRSeRKeR

 Como dice Ithaqua debe ser por el filtrado de textura.

Yo también me encontré con este problema hace unos años cuando me puse a crear un generador de lightmaps. Para solventarlo, lo que hice fue calcular el centro de masas del polígono que se está mapeando y entonces contraer un poco las coordenadas del lightmap en base a ese centro de masas. La verdad, tal vez no era una solución demasiado genérica pero por si te sirve...

Precisamente, hubo un hilo sobre este tema hace un tiempo aquí.

Lo que no sé es si a KILE le sirvió de algo la solución que propuse...

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

MChiz

 Hola!

Te recomiendo que utilices los lightmaps que te genera el MAX 5. Son de muy buena calidad.

Un saludote!!

AgeR

 
Cita de: "MChiz"Te recomiendo que utilices los lightmaps que te genera el MAX 5. Son de muy buena calidad.
Bueno, mi idea es no usar el max5. En realidad tengo pensado una especie de editor de niveles muy básico, en el que cargues un 3ds, añadas unas cuantas luces y me fabrique los lightmaps correspondientes. Vamos, una utilidad para el motor y que pueda distribuir gratuitamente sin necesidad de que nadie haya de usar el max5.


Gracias por las respuestas!  La verdad es que no me había dado cuenta del otro topic, voy a ver si me aclaro!  :P

Hmmm creo que va a ser que calculo mal las coordenadas de textura y de ahí los "desplazamientos" que se pueden apreciar en los triángulos que forman el suelo (fijáos en las diagonales que aparecen). Puede ser esto?

AgeR

 Bueno pues he probado tu solución, BeRSeRKeR, (lo del centro de masas) reestructurando un poco el código, y no es ese el problema. De hecho se ve exactamente igual que antes. Por cierto, tu código se parece bastante al que estoy haciendo yo, seguramente nos basamos en el mismo tutorial.  :rolleyes:  

BeRSeRKeR

 El de polygone si no recuerdo mal...

PD: aun conservo la URL. Aquí está
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

AgeR

 Pues sí, ese era  :lol:

Voy a seguir peleandome con esto a ver si lo resuelvo de una vez antes de volverme loco. El desplazamiento ese chungo me tiene mosca.  (nooo)  

samsaga2

 A ver si te puedo ayudar. Cuando al aplicar un texel en pantalla la targeta hace el calculo bilineal para que no se vea todo pixelado lo hace cogiendo los texels que tiene alrededor. El problema te viene que esta cogiendo un texel de alrededor que pertenece a otro poligono. No me acuerdo como se llama pero en el caso de OpenGL tocando las opciones de texturas hay una que arregla ese problema.

BeRSeRKeR

 Creo que te refieres GL_CLAMP o GL_CLAMP_TO_EDGE, no se cual de las dos es.

En Direct3D es D3DTADDRESS_CLAMP. La verdad es que doy por hecho que lo tiene activado.

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

Zaelsius

 Ager, al final solucionaste el problema?

DraKKaR

 No se si el fallo estará en lo del filtro bilineal en este caso, ya que en la imagen que nos has pasado parece que hayas renderizado el lightmap con nearest, ya que pueden verse perfectamente todos los texeles del lightmap.

Ryuchan

 Una pregunta, que formato de textura usais para los lightmaps?
En teoria con un formato de 8 bits bastaria no? Al menos si no quieres luces de colores.
¿Sirve para eso el D3DFMT_L8?
he fight is everything

Ryuchan

 Por cierto eso que se ve en la imagen... no podria ser porque no tienes en cuenta la anchura de los pixeles al calcular las UV de un lightmap concreto dentro de la textura grande?
En teoria las coordenadas U,V deberian corresponder al centro del pixel. O sea que si la textura grande es de 512 tienes que desplazar las coordenadas U,V 0,5 veces 1/512
Es un valor muy pequeño pero puede ser la diferencia entre que escoja el pixel correcto o el del lightmap anterior.
he fight is everything

AgeR

 
Cita de: "DraKKaR"No se si el fallo estará en lo del filtro bilineal en este caso, ya que en la imagen que nos has pasado parece que hayas renderizado el lightmap con nearest, ya que pueden verse perfectamente todos los texeles del lightmap.
Efectivamente, por el filtro bilineal no es, no lo tengo activado. Si observáis, se ven claramente los texels del lightmap.

Ryuchan, ahora mismo no tengo el código delante, pero podría ser por lo que comentas, ya que me temo que no lo había tenido en cuenta.
El caso es que ahora estoy en Castellón y hasta que no vuelva a Valencia creo que no podré echarle un ojo al código de nuevo  :( .

En cuanto lo solucione os comentaré donde estaba el error, gracias!!!  :lol:

PD : DraKKar lee tus Mensajes Privados  :P






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.