Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Shadowmap

Iniciado por Haddd, 13 de Enero de 2005, 12:41:59 AM

« anterior - próximo »

Haddd

 Ahí va un render con Shadow Map.



El problema que tengo es con los bordes. Me estira los bordes y el Clamp no sirve. Lo que quiero es que si x<0 o y<0 el valor devuelto por la textura sea 0. ¿alguien sabe cómo?

donald

 tengo un lío tremendo con los nombres que les poneis a las sombras los programadores....

shadow map, shadow volumes, stencil shadows..(hay alguno más?)

Alguien conoce algun link (o puede poner un parrafito) de las últimas sombras que se despachan y las características graficas de cada una? (como para un grafista: esta tiene bordes sauves, esta se proyecta tb sobre parede verticales o inclinadas, etc...)

Como decía el otro día, lo que veo más importante, es que se proyecten correctamente sobre cualquier superficies, y permitan un grado de transparencia y bordes suaves....Hay algun sistema que haga todo eso?

creo que aquí hay un ejemplo de shadow map, y shadow volumes, pero no sé que diferencias hay entre ellos, ni ningun sistema de sombras.
http://www.paulsprojects.net/opengl/projects1.html


Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

Haddd

 
Citar

Shadow Map

Se hace un render desde el pto de vista de la luz. Así tenemos un mapa de profundidades. Entonces al dibujar la escena comparamos y si el pto es < que el que aparece en el shadow map, es que está en sombra.

Ventajas:

No hay que hacer absolutamente nada con la geometría, sirve la misma que se utiliza para renderizar la escena.
No tienes problemas de "traspasar" paredes. Es perfecto en ese punto, porque realmente estás sombreando desde el punto de vista de la luz y al hacer un Render desde el pto de vista de la luz ves exactamente lo que ve la luz.
SoftShadows es sencillo de aplicar

Inconvenientes:

Con luces Omni hay que hacer 6 Pasadas por luz.
Al utilizar un Render Target para hacer el Render de la luz estamos limitando la resolución. Por eso a veces aparecen las sombras con "cuadritos", por falta de resolución.
Al calcular la proyección de la luz y comparar, hay errores de precición. Eso provoca "jaggies" que no son fáciles de controlar.


Citar

Shadow Volume o Stencil Shadow

Se extrusiona la geometría del objeto en la dirección de la luz. Eso produce un volumen de sombra que indica qué está es sombra y qué no.

Ventajas:

Soportado por la mayoría de tarjetas. No requiere pixel shaders.

Inconvenientes:

Hard edges.
Al extrusionar, se atraviesan paredes.
Hay que generar en tiempo real el volumen de extrusión, y es bastante costoso, tanto en shaders como a nivel de soft.




donald

 Fantástico, gracias Hadd.


Parece que shadow maps es mejor... dice que es fácil aplicar SoftShadows(bordes suaves, supongo), y en cambio la otra pone como desventaja los hard edges, además de lo de las paredes...pues yo entonces tiraría para shadow maps. Aunque no creo que vaya a poder ver las sombras de las demos realtime que podais sacar en un futuro, tengo una paupérrima gf4 ti 4200, pero creo que debeis ir a la máxima calidad, lo de la tarjetas va a la veolcidad del rayo(y la caída de precios tb) y lo avanzado hoy en tres días está superado...Y que veo vuestro engine como un entorno fantástico para que los grafos se pongan las botas, jeje :) ..cutre engines a nivel gráfico hay demasiados, ya...
Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

senior wapo

 DOOM3 utiliza tanto shadowmaps como stencil shadows. Hace algún tiempo vi un video de John Carmack en el que hablaba de los problemas que había tenido al implementar el motor de DOOM3, y dedicaba un buen rato a hablar de las sombras.

Si alguno tiene el juego se habrá fijado de las pocas sombras "suaves" (shadow maps) que aparecen en el juego. A los diseñadores de niveles se les especificó que usasen pocas de ese tipo, y solo en determinadas posiciones y circunstancias. Por ejemplo, una luz apuntando al suelo y situada justo encima de un ventilador (para que las aspas en el suelo no proyecten sombras poligonales).

Las sombras por shadow map quedan muy mal (para mi gusto) a menos que el objeto que produce sombra este próximo a la superficie de proyección o perpendicularmente. Y aún así, has de usar un shadow map de buen tamaño. Que una cosa es usar shadow maps y quede bonito en una demo de la Euskal y otra en un engine genérico.

Pero no seré yo quien diga que método es mejor  :P


Bueno que me enrrollo, posteaba para ponerte la misma imagen con shadow maps y con stencil shadows:

Con shadow maps usando un buen algoritmo
Con Stencil Shadow, implementación estándard

Haddd

 Bueno, respondiendome a mi pregunta  :blink: , creo que D3DTADDRESS_BORDER me puede resolver el problema. También me he fijado que utilizo el filtro lineal y debería ser Point, aunque al ser Point no tendré soft. Bueno, habrá que ir probando....

BeRSeRKeR

 
Cita de: "senior wapo"Si alguno tiene el juego se habrá fijado de las pocas sombras "suaves" (shadow maps) que aparecen en el juego. A los diseñadores de niveles se les especificó que usasen pocas de ese tipo, y solo en determinadas posiciones y circunstancias. Por ejemplo, una luz apuntando al suelo y situada justo encima de un ventilador (para que las aspas en el suelo no proyecten sombras poligonales).
No estoy del todo seguro de que Doom3 utilice shadow maps. Creo que siempre utilizan shadow volumes. El caso que mencionas de las aspas de un ventilador, lo que utilizan en ese caso es la proyección de una textura desde una luz. Vamos que es un simple proyector que proyecta una textura donde ya están pintadas las aspas del ventilador.

Como ya dije, donde sí parece que se utilizarán exclusivamente shadow maps será en el próximo motor de id Software.

Por otro lado creo que el Unreal Engine 3 utiliza una mezcla entre shadow maps y shadow volumes.

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

Helius

Cita de: "BeRSeRKeR"No estoy del todo seguro de que Doom3 utilice shadow maps. Creo que siempre utilizan shadow volumes. El caso que mencionas de las aspas de un ventilador, lo que utilizan en ese caso es la proyección de una textura desde una luz. Vamos que es un simple proyector que proyecta una textura donde ya están pintadas las aspas del ventilador.
Berserker tiene razón, todas las sombras suaves del Doom 3 se hacen con proyectores, en los cuales se utilizan texturas con sombras ya dibujadas.

Saludos.
Geardome Devlog
Tutoriales sobre DirectX 9, Nintendo DS y PSP.

senior wapo

 Es decir, un fake xD

No se chico, yo lo digo porque me parece haberselo oido a Carmack en el video, y por las siguientes variables de consola (hay mas, te pego unas pocas):

r_sb_linearFilter                   use GL_LINEAR instead of GL_NEAREST on shadow maps
r_sb_lightResolution             Pixel dimensions for each shadow buffer, 64 - 2048
r_lightSourceRadius              for soft-shadow sampling
r_sb_polyOfsFactor               polygonOffset factor for drawing shadow buffer
r_sb_polyOfsUnits                polygonOffset units for drawing shadow buffer


Lo mismo lo llaman shadow maps pero en realidad  es lo que tu dices. Yo creo que usan stencil y shadowmaps, pero a saber. Lo que poneis suena más rapido, puede que sea asi.

BeRSeRKeR

 Sí efectivamente esos comandos existen pero no tienen efecto, están desactivados. Alguien lanzó un reto por ahí para ver si alguien era capaz de activar los shadow buffers, pero que yo sepa nadie lo ha conseguido. Se ve que Carmack ya estuvo haciendo pruebas de shadow maps con Doom3. Es el mismo caso que Cg, en teoría Doom3 tiene soporte para shaders con Cg (tiene comandos de consola) pero nadie ha conseguido hacerlo funcionar.

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

Pogacha

 La verdad es que con shadows maps queda mucho mejor, voy a hacer mis pruebas mas adelante.
Por cierto, en mi motor hay una consola polifuncional, pero nadie la podra usar excepto a traves de los archivos de configuración, JaJaJa y no solo eso tambien tiene soporte para shaders 5.0 aun que nadie lo halla hecho funcionar  :P . En serio ,... ID tiene mis respetos, pero por ahí hace cosas que uno no entiende para nada, supongo que esa locura es el precio de hacer las mas grandes creaciones de todos los tiempos o tal vez nuestras insignificantes capacidades de programación no logran ver sus horizontes.
Saludos

Pogacha

 Haddd:
Ya que estamos en el tema te pregunto como funciona este metodo (si no te molesta contarme) la verdad es que me he puesto a pensar y me quedan dudas ...
Yo lo tenia entendido como:
Tenemos la matriz ModelViewProyecton y la LightViewProyection, renderizo la LVP en un depth-buffer y despues sacamos otra matriz para pasarle al shader y obtenemos dos depth sources normalizados, cuando comparo si los depth sources si so distintos esta en sombra, pero no veo como lograr el soft.
Supongo que tengo errado algun concepto, igual investigare por mi cuenta pero supongo que tu sabras decirme mejor.
Saludos.

BeRSeRKeR

 Bueno pues hemos afinado algo más las sombras. Ahora ya no se produce el estiramiento de la sombra al acercarse al borde del shadow map, o bueno, no es que no se produzca, lo que pasa es que debido a un despiste mio, estábamos utilizando el falloff de la luz como fov para hayar la proyección de la luz y claro, ¡el falloff es el ángulo mitad del cono de iluminación por lo que el fov es el doble que el falloff!. :D

El caso es que ahora gracias a la atenuación de la luz se han eliminado esos estiramientos que se producían en los bordes.

También teníamos unos problemas con el depth bias de las sombras. Lo he ajustado un poco más y ahora ya se puede apreciar el self shadowing. El problema es que dependiendo del near y el far plane de la luz, el depth bias va a variar así que habrá que buscar alguna fórmula que aproxime este valor o dejar al propio usuario (del motor) que lo ajuste a su gusto.

Aquí os dejo un pequeño video de demostración. ¡Ahora hay que generar más samples para conseguir soft-shadows! :)



Descargar video (614 KB)

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

Pogacha

 Muy bueno, les tomo 2 dias implementarlo ...  (ole)
Yo me respondo por el tema del soft, estuve pensando y claro !
tomo Sombreado = 1-clamp( (distanciaLuz - distanciaPixel) * Constante de difumacion);
Este tema no va aca pero bueno ...
Que bien se ve el video.
Saludos.

Haddd

 Brutal el vídeo. La verdad es que ha sido más fácil ShadowMapping que el d Stencil. Ahora implementaremos el PFC y ya saldrán soft!!! :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.