Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Argantonio en 28 de Abril de 2005, 11:41:44 AM

Título: Sombras
Publicado por: Argantonio en 28 de Abril de 2005, 11:41:44 AM
 Hola,
quiero poner sombras dinámicas en mi motor de terrenos, pero no se cual es la mejor forma de hacer esto, usar stencil shadows está descartado creo, porque son demasiadas superficies donde proyectar, así que estaba viendo si era mejor hacerlo con shadow mapping ¿qué opinais vosotros? ¿sabeis de algún documento que venga bien explicado cómo hacerlo? Las sombras son solo para los personajes que se mueven claro, el sombreado del terreno es estático.

¡Gracias!
Título: Sombras
Publicado por: Haddd en 28 de Abril de 2005, 01:55:04 PM
 Puedes utilizar Stencil Shadows. El terreno no se tiene en cuenta. Sólo debes proyectar la geomteríad e lo que quieres que proyecte sombras
Título: Sombras
Publicado por: Argantonio en 28 de Abril de 2005, 02:16:59 PM
 Pero tendría que proyectar la malla una vez por cada triangulo del terreno en cada frame y eso no sería muy rápido ¿no? Además, como se supone que la cámara es en tercera persona, la malla que proyecta la sombra siempre está rodeada por el máximo número de triangulos, ya que uso geomipmapping...
Título: Sombras
Publicado por: Argantonio en 28 de Abril de 2005, 02:19:28 PM
 Pero tendría que proyectar la malla una vez por cada triangulo del terreno en cada frame y eso no sería muy rápido ¿no? Además, como se supone que la cámara es en tercera persona, la malla que proyecta la sombra siempre está rodeada por el máximo número de triangulos, ya que uso geomipmapping...
Título: Sombras
Publicado por: Lord Trancos 2 en 28 de Abril de 2005, 02:30:56 PM
 Las stencil solo dependen de la geometria del objeto que proyecta la sombra; no del objeto donde cae la sombra.

Creo q es en los shadow maps donde si afecta; pero no me hagas mucho caso, q los shadow maps no los he tratado.
Título: Sombras
Publicado por: Argantonio en 28 de Abril de 2005, 02:37:29 PM
 Pero si he entendido bien, con las stencil tienes que proyectar el objeto en el plano y luego se "recorta" con el stencil buffer no? entonces si cada triangulo del terreno puede estar en planos diferentes, tendría que proyectar una vez por cada plano...  
Título: Sombras
Publicado por: Haddd en 28 de Abril de 2005, 03:03:50 PM
 Tu solución son los Stencil, aunque con ShadowMaps también puede hacerse, pero es un poco más complejo.

En las SDK de DX hay un ejemplo creo que con un terreno. Como verás, sólo se extrusiona la malla que provoca sombra.
Título: Sombras
Publicado por: Argantonio en 28 de Abril de 2005, 03:10:26 PM
 ¿Donde puedo conseguir el ejemplo ese? es que no tengo el SDK de directX, yo uso OpenGL...

A ver si así me aclaro, porque no veo como se puede hacer... aunque solo proyecte la malla que hace la sombra, la tengo que proyectar una vez por cada triangulo del terreno en que caiga la sombra...
Título: Sombras
Publicado por: Haddd en 28 de Abril de 2005, 03:54:19 PM
 Un ejemplo en Nehe

Tiene que haber cientos de tutoriales en la red sobre Stencil y OGL ;)  
Título: Sombras
Publicado por: ajmendoza en 28 de Abril de 2005, 04:04:44 PM
 google is your friend :P.

Suerte!
Título: Sombras
Publicado por: Argantonio en 28 de Abril de 2005, 04:07:51 PM
 Si, si he encontrado muchos tutoriales, pero en estos proyectan una malla sobre las paredes de una habitación, que con el suelo son 5 planos. Pero si yo hago eso en mi terreno, alrededor de la malla que quiero proyectar puedo tener 30 triangulos o así, y eso suponiendo que hiciera un filtro de visibilidad para saber donde cae la sombra (que no tengo :P), si intento proyectar sobre todos los triangulos del mapa me saldría miles de proyecciones, aunque no se vieran porque se recorta con el stencil buffer.

El tema es que pintar la malla tantas veces para dibujar el cachito de sombra que cae dentro de cada triangulo no parece óptimo. Lo que estaba mirando es si se podría proyectar una vez sobre el plano del suelo y luego añadirlo a la textura del terreno o algo así... pero no tengo muy claro como haría esta segunda parte.
Título: Sombras
Publicado por: Lord Trancos 2 en 28 de Abril de 2005, 04:25:59 PM
 Q obsesion....

Q nooooo... que las stencil solo dependen de la complejidad del objeto que hace sombra y no de donde cae.

Mirate la implementacion, entiendela, y luego decide si te sirve o no.

Pero de verdad de la buena, que no tienes que ir plano por plano del terreno haciendo nada...  ;)  
Título: Sombras
Publicado por: Pogacha en 28 de Abril de 2005, 05:30:41 PM
 Stencil shadow por pogacha, para tu programa.

Por cada frame:

1er paso: borro framebuffer, zbuffer y stencil buffer.

2do paso: Hago un render comun, pero sin cosas transparentes.

3er paso: Desactivo la escritura en el framebuffer y activo la escritura en el sbuffer con la operacion de incrementar cuando zpass.

4to paso: Extrujo todas las siluetas  de objetos que generaran sombras desde la luz hacia el infinito, ocultando caras traseras y dibujo sin color para modificar el stencil buffer

5to paso: Cambio la operacion del stencil buffer a decrementar cuando zpass, Extrujo todas las siluetas  de objetos con sombra desde la luz hacia el infinito, ocultando caras delanteras y dibujo sin color para modificar el stencil buffer.

6to paso: desactivo las operaciones del stencil y activo el stencil test en dibujar cuando el stencil no es cero. Pongo por ejemplo el color (0.5, 0.5, 0.5)  y dibujo en rectangulo del tamaño de la pantalla en modo flat (sin textura) con el blend = source * dest, con lo que oscurecere lo que este en sombras.

7mo paso: dibujo las transparencias. (acordarse de quitar el stencil test)

Saludos.
Título: Sombras
Publicado por: samsaga2 en 28 de Abril de 2005, 06:00:57 PM
 Tengo un deseo irresistible de... cantar!

Sombra aqui sombra alla
maquillate maquillateee
un espejo de cristal
y mirate mirate

Ale, ya puedo respirar tranquilo

PD: como me encantan la profundidad filosofica de las letras de las canciones españolas