Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Haddd en 10 de Julio de 2004, 06:06:36 PM

Título: Cosas Raras Con Perpixel Lightning
Publicado por: Haddd en 10 de Julio de 2004, 06:06:36 PM
 Os cuento. Mirad esta imagen:
(http://www.telefonica.net/web/haddd/imagen.jpg)

La luz está muy cerca de la pared de fondo, que como no hace sombra puede despistar.

Bien, primero empezé con la pared de fondo, y todo iba perfectamente. Luego puse la pared del suelo. Esta pared es el mismo objeto que la del fondo, pero con una matriz WORLD diferente. Esto es importante, pq ambas tienen el mismo vertexbuffer. Pues cuando dibujé el de abajo, no me lo iluminaba si la luz no estaba por debajo del suelo, es decir, que parecía que la normal estaba al revés. Entonces modifiqué el shader para que en lugar de pasar a World Space pasara a Object Space(usando IWorld). Y me funcionó, pero con los problemas de la imagen.

Por tanto, hay algo que hago mal y que se me escapa. Por ello he subido el programa con el shader, a ver si alguien puede ayudarme y sacarme de esta duda que me atosiga. (grrr)

Gracias

Ese enlace de ayuda
Título: Cosas Raras Con Perpixel Lightning
Publicado por: tamat en 10 de Julio de 2004, 11:09:29 PM
 pero es que la pared del fondo tambien está mal, fijate que las zonas iluminadas del relieve son las que no estan encaradas a la luz :S
Título: Cosas Raras Con Perpixel Lightning
Publicado por: Helius en 11 de Julio de 2004, 01:55:33 AM
 Me pasa algo muy parecido a mi, yo creo que estoy generando mal los vectores del tangent space  :( Si dices que te funcionaba bien con una pared igual los estás transformando mal...
Título: Cosas Raras Con Perpixel Lightning
Publicado por: BeRSeRKeR en 11 de Julio de 2004, 04:53:48 AM
 ¿Las matrices se las pasas traspuestas o normal?. No sé con los fx, pero programando los shaders a pelo, las matrices había que pasárselas traspuestas.

Saludos.
Título: Cosas Raras Con Perpixel Lightning
Publicado por: Haddd en 11 de Julio de 2004, 09:57:20 AM
 Con los fx al hacer effect->SetMatrix, DX las transpone.

Venga Berk, ¿no les nada raro al shader?

Podeis hacer pruebas con el shader y ejecutar el programa, así sabreis si el cambio es correcto :lol:

Socorrooo :blink:  
Título: Cosas Raras Con Perpixel Lightning
Publicado por: Zaelsius en 11 de Julio de 2004, 11:40:04 AM
 Yo he estado mirándolo un poco, con el reference rasterizer y el 3danalyzer(no tengo hardware dx9 aun).

Al mover un poco la luz(bueno, a mis 0.2 fps no sé si estoy moviendo la luz u otra cosa), se me queda la cosas así:

(http://www.telefonica.net/web/zsgames/posts/haddd.png)

Parece que hay un cambio brusco entre los polígonos de la pared(aunque es curioso porque no son exactamente triángulos, con lo cual el error podria no tener  nada que ver con los polys).

Tambien estuve jugando con esta linea, por marear un poco(yo de shaders tengo poquísima idea):

// Interpolamos entre una normal plana y el valor recogido en el bump. Los valores de smooth están en tangent space
float3 smooth = { 0.5f, 0.5f, 1.0f };


Pero para mi sorpresa el resultado visual es prácticamente el mismo siempre.. no sé si será cosa del refRast, o qué.. bueno repito q de este tema no tengo mucha idea  :P

Suerte

PD: Sí, he retocado la imagen y subido el brillo para apreciar mejor las discontinuidades.
Título: Cosas Raras Con Perpixel Lightning
Publicado por: BeRSeRKeR en 11 de Julio de 2004, 03:53:44 PM
 La verdad es que esa línea que hay en medio de la pared a la que hace referencia Zaelsius también me ha llamado la atención ya que no coincide con la arista de ningún triángulo. Con el wireframe se ve claramente lo raro que es que haya una línea en ese lugar:

(http://www.arrakis.es/~jonathan01/haddd_wire.jpg)

¿Seguro que la tangente está bien calculada?.

Ahora mismo no dispongo de mi ordenador para hacer pruebas en condiciones pero a ver si le puedo echar un vistazo.

Saludos.
Título: Cosas Raras Con Perpixel Lightning
Publicado por: BeRSeRKeR en 11 de Julio de 2004, 06:00:37 PM
 He modificado el vertex & pixel shader para que haga per-fragment lighting sin normal mapping ni tangent-space ni historias de esas, para simplificar las cosas y poder detectar errores de base.

El resultado es que la iluminación es correcta (nada de las cosas raras que ocurren utilizando normal mapping) salvo en una cosa. Y es que parece que la matriz IWorld (que es la que se utiliza para pasar la posición de la luz de world a object-space) no parece ser correcta.

Me explico.

Nada más abrirse la aplicación se ve en frente de la cámara el quad que por lo visto está centrado en el origen de coordenadas y sus coordenadas máxima y mínima son <5, 5, 0> y <-5, -5, 0> respectivamente.

El problema está en que, viendo el comportamiento de la luz, es como si la matriz IWorld hiciera "casi" bien las rotaciones pero no las traslaciones. De hecho no traslada nada. Tan sólo rota alrededor del origen de coordenadas y encima parece que lo hace al revés.

Así, por ejemplo, las coordenadas que "ve la luz" para el quad de la derecha no serían:

máximo: <5, 5, 10>
mínimo: <5, -5, 0>
normales: <-1, 0, 0>

que son las coordenadas del quad que podemos ver nosotros, sino:

máximo: <0, 5, 5>
mínimo: <0, -5, -5>
normales: <1, 0, 0>

Así que estaría bien ver el código de la aplicación para ver la construcción de las matrices. ¡Si puede ser, claro!. :)

Saludos.
Título: Cosas Raras Con Perpixel Lightning
Publicado por: BeRSeRKeR en 11 de Julio de 2004, 06:22:54 PM
 Creo que la he líado con los máximos y los mínimos. :lol:

A ver, las coordenadas del quad (de la derecha) que se renderiza son:

<5, 5, 0>
<5, 5, -10>
<5, -5, -10>
<5, -5, 0>

Normal: <-1, 0, 0>

Las coordenadas del quad (de la derecha) que "ve" la luz:

<0, 5, 5>
<0, 5, -5>
<0, -5, -5>
<0, -5, 5>

Normal: <1, 0, 0>

A ver si ahora lo he puesto bien. :)

Saludos.
Título: Cosas Raras Con Perpixel Lightning
Publicado por: Haddd en 11 de Julio de 2004, 09:15:31 PM
 Muchísimas gracias a todos. ¡Ya entiendo el Tangent Space! Bien, os explico:

1. Las líneas que aparecen en la mitad del rectángulo, que muy bien habeis notado son debidas a que el Tanget Space está MAL calculado. La funcion de D3DX no funciona correctamente o yo no lo hago de la forma correcta. La cuestión es que en un rectángulo de este estilo, la normal debe ser (0,0,-1) y la Tangente(1,0,0). Pues bien, los datos de vértice, normal y tangente son:
 
  0: v(0.00,0.00,0.00) n(0.00,0.00,-1.00) t(1.00,0.00,0.00)
  1: v(5.00,0.00,0.00) n(0.00,0.00,-1.00) t(1.00,0.00,0.00)
  2: v(10.00,0.00,0.00) n(0.00,0.00,-1.00) t(-1.00,0.00,0.00)
  3: v(0.00,5.00,0.00) n(0.00,0.00,-1.00) t(1.00,0.00,0.00)
  4: v(5.00,5.00,0.00) n(0.00,0.00,-1.00) t(0.00,0.00,0.00)
  5: v(10.00,5.00,0.00) n(0.00,0.00,-1.00) t(-1.00,0.00,0.00)
  6: v(0.00,10.00,0.00) n(0.00,0.00,-1.00) t(1.00,0.00,0.00)
  7: v(5.00,10.00,0.00) n(0.00,0.00,-1.00) t(-1.00,0.00,0.00)
  8: v(10.00,10.00,0.00) n(0.00,0.00,-1.00) t(-1.00,0.00,0.00)

No sé la razón, si alguien la sabe, por favor que me la explique. Yo utilizo:


D3DXComputeTangent(MeshData.pMesh,0,0,D3DX_DEFAULT,1,NULL);


Bien, pues arreglando la tangente resolví el problema de la línea blanca. Después ya entiendo porque tengo que utiliza la inversa de World en lugar de World y porqué se convierte a Tangent Space. Si tengo tiempo escribiré un documento y lo publicaré, así quedará documentado y comparto conocimientos para que otros puedan compartirlo conmigo, como habeis hecho vosotros. (ole)

Muchas gracias a todos de nuevo.
;)  
Título: Cosas Raras Con Perpixel Lightning
Publicado por: Lord Trancos 2 en 11 de Julio de 2004, 10:17:00 PM
Cita de: "Haddd"Bien, pues arreglando la tangente resolví el problema de la línea blanca. Después ya entiendo porque tengo que utiliza la inversa de World en lugar de World y porqué se convierte a Tangent Space. Si tengo tiempo escribiré un documento y lo publicaré, así quedará documentado y comparto conocimientos para que otros puedan compartirlo conmigo, como habeis hecho vosotros. (ole)
(ole)

Título: Cosas Raras Con Perpixel Lightning
Publicado por: Helius en 11 de Julio de 2004, 11:01:31 PM
 Ese documento me vendría bien porque tengo problemas para crear el tangent space de un vértice ;)
Título: Cosas Raras Con Perpixel Lightning
Publicado por: BeRSeRKeR en 11 de Julio de 2004, 11:04:21 PM
 ¡Ya sabía yo que la tangente no estaba bien! :lol:

Hey Helius, échale un vistazo a este hilo de flipcode. Tal vez te ayude.

Saludos.
Título: Cosas Raras Con Perpixel Lightning
Publicado por: Helius en 11 de Julio de 2004, 11:16:11 PM
 Muchas gracias por tu ayuda Berserker, me voy a mirar todo lo que me as dicho ;)
Por cierto, tiene buena pinta el último enlace que me has puesto, gracias :)