Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sombras

Iniciado por Argantonio, 28 de Abril de 2005, 11:41:44 AM

« anterior - próximo »

Argantonio

 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!

Haddd

 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

Argantonio

 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...

Argantonio

 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...

Lord Trancos 2

 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.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Argantonio

 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...  

Haddd

 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.

Argantonio

 ¿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...

Haddd

 Un ejemplo en Nehe

Tiene que haber cientos de tutoriales en la red sobre Stencil y OGL ;)  

ajmendoza

 google is your friend :P.

Suerte!

Argantonio

 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.

Lord Trancos 2

 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...  ;)  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Pogacha

 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.

samsaga2

 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







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.