Foros - Stratos

Proyectos => Jad Engine => Mensaje iniciado por: Haddd en 13 de Enero de 2005, 12:41:59 AM

Título: Shadowmap
Publicado por: Haddd en 13 de Enero de 2005, 12:41:59 AM
 Ahí va un render con Shadow Map.

(http://www.telefonica.net/web/haddd/shadow.jpg)

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?
Título: Shadowmap
Publicado por: donald en 13 de Enero de 2005, 08:48:27 AM
 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


Título: Shadowmap
Publicado por: Haddd en 13 de Enero de 2005, 10:00:03 AM
 
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.



Título: Shadowmap
Publicado por: donald en 13 de Enero de 2005, 10:23:41 AM
 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...
Título: Shadowmap
Publicado por: senior wapo en 13 de Enero de 2005, 12:05:57 PM
 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
Título: Shadowmap
Publicado por: Haddd en 13 de Enero de 2005, 12:19:54 PM
 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....
Título: Shadowmap
Publicado por: BeRSeRKeR en 13 de Enero de 2005, 03:11:35 PM
 
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.
Título: Shadowmap
Publicado por: Helius en 13 de Enero de 2005, 03:28:57 PM
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.
Título: Shadowmap
Publicado por: senior wapo en 13 de Enero de 2005, 03:34:58 PM
 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.
Título: Shadowmap
Publicado por: BeRSeRKeR en 13 de Enero de 2005, 04:12:12 PM
 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.
Título: Shadowmap
Publicado por: Pogacha en 13 de Enero de 2005, 06:13:14 PM
 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
Título: Shadowmap
Publicado por: Pogacha en 13 de Enero de 2005, 06:31:20 PM
 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.
Título: Shadowmap
Publicado por: BeRSeRKeR en 13 de Enero de 2005, 08:31:53 PM
 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! :)

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

Descargar video (614 KB)

Saludos.
Título: Shadowmap
Publicado por: Pogacha en 13 de Enero de 2005, 09:31:19 PM
 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.
Título: Shadowmap
Publicado por: Haddd en 13 de Enero de 2005, 11:55:30 PM
 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  
Título: Shadowmap
Publicado por: en 14 de Enero de 2005, 12:30:16 AM
 Pero ademas del shadowmap teneis un lightmap que representa la luz, no? (ya sabeis que de shadowmaps yo nada).
Es decir los poligonos tienen el stageTexture del material el del lightmap y del shadowmap, es asi no??
Lo haceis de una pasada?? ocon varias?? hay diferencias de rendimiento ??

Gracias, saludos.
Título: Shadowmap
Publicado por: _Grey en 14 de Enero de 2005, 12:30:52 AM
 UPS! el anterior era yo !!!

Chao!.
Título: Shadowmap
Publicado por: Haddd en 14 de Enero de 2005, 12:34:33 AM
 El shadowmap y el lightmap comparten matriz así que se utiliza el mismo código. Pero ahora estamos en pruebas y no tenemos activada la textura del proyector. Aunque es trivial!!

Y respecto al rendimiento en 640x480 en modo Debug y ventana con una 9500 softmod, 200 fps!!!!

Título: Shadowmap
Publicado por: BeRSeRKeR en 14 de Enero de 2005, 01:06:10 AM
Cita de: "Guest"Pero ademas del shadowmap teneis un lightmap que representa la luz, no? (ya sabeis que de shadowmaps yo nada).
No, si te refieres al efecto de la luz spot (el efecto de atenuación), eso no es un lightmap ni ninguna textura proyectada, está calculado per-pixel en tiempo real. Por ahora no utilizamos lightmaps en ninguno de los casos.

Saludos.
Título: Shadowmap
Publicado por: donald en 16 de Enero de 2005, 10:29:17 AM
 que es pcf?

no noto la diferencia entre los dos pics...
Título: Shadowmap
Publicado por: donald en 16 de Enero de 2005, 11:59:38 AM
 ehm...

con bordes suaves me refería no a un mero antialiasing, sino a una transición a grises, un feather, como se dice en Photoshop.



Título: Shadowmap
Publicado por: donald en 16 de Enero de 2005, 12:51:59 PM
 (http://img139.exs.cx/img139/7462/sombra8gi.jpg)

Una cosa así, pero me refiero a los bordes, no a que vaya degradandose con la distancia de la base, y demás.Ademñas, esto es un guarreo de unos segundos, es para que veas la idea...

Pero igual esto no está soportado.

O sea, que no me refería inicialmente a antialiasing solamente.

lo que en 3d -en grafismo-  se suelen llamar soft shadows es una cosa así (si estuviera bien hecha...XD )

Título: Shadowmap
Publicado por: Haddd en 16 de Enero de 2005, 01:48:48 PM
 Bien, he mejorado bastante el PFC. Como veis aquí tenemos soft. Utilizo 8 samples por pixel. Ya no me da para más el 2.0!!!

(http://www.telefonica.net/web/haddd/pcf.jpg)
Título: Shadowmap
Publicado por: DraKKaR en 16 de Enero de 2005, 02:24:55 PM
 Muy bueno eso de los shadow maps! Me estan dando ganas de implementarlo a mí también  :D .

En general, ambos modelos para hacer sombras (stencil y shadow maps) tienen sus ventajas y sus inconvenientes. Y para un motor no excluiría a uno por el otro, sino que intentaría meter los 2 coexistiendo y dejar que sea el usuario el que decida cuando se tiene que usar uno u otro par cada luz.
Título: Shadowmap
Publicado por: Haddd en 16 de Enero de 2005, 05:34:02 PM
 Es cierto que lo mejor sería que el programador eligiera el método, sin embargo no creo que nosotros desarrollemos la opción del Stencil porque el escaso tiempo del que disponemos tiene que dedicarse a otras cosas.

Y ya te digo que el stencil con un character que se mueve por bones y extrusionado por hardware, es bastante complejo. No es lo mismo un stencil de algo que no se mueve, que hacer un stencil de algo con movimientos complejos. ;)  
Título: Shadowmap
Publicado por: AgeR en 17 de Enero de 2005, 12:11:45 AM
 Hombre, yo creo que sería bueno que implementárais también stencil shadows. Para luces omni por ejemplo, parece mucho más rápido y sencillo de implementar.
Si tienes un bixo animado como dices... símplemente con no generar su sombra con el stencil y usar el shadowmap no valdría?

No sé, a mi me parece que cuantas más opciones hayan para elegir pues mejor. (A ver si drakkar se animara a meter esos lightmaps en vuestro motor  :rolleyes: ). 3 Tipos distintos de iluminación es algo que pocos motores deben tener...

Por cierto, las imágenes...  (ole)  
Título: Shadowmap
Publicado por: DraKKaR en 17 de Enero de 2005, 04:09:00 AM
 Haddd, no entiendo que tiene que ver las animaciones con las sombras con stencil. Cuando las implementé se trataba de:
- Detectar la silueta de la malla que va a proyectar la sombra, respecto la luz.
- Extruir esa silueta.
- Aplicar el truco del stencil.

Da igual que la malla esté animada, tu tienes tu personaje, calculas la posición de cada vértice con el método que quieras (animación por bones en este caso) y sobre esa malla (que puedes considerar estática perfectamente), aplicas el algoritmo.


AgeR: Lo de los lightmaps depende más de que la gente esté interesada en ello.
Título: Shadowmap
Publicado por: Haddd en 17 de Enero de 2005, 09:05:23 AM
 Bien, eso es porque tu lo haces por software. ¿Has probado hacer lo mismo por GPU ?
Y hacerlo por soft con los polígonos que hay que mover hoy en día es muy costoso.  
Título: Shadowmap
Publicado por: DraKKaR en 17 de Enero de 2005, 12:56:28 PM
 Primero lo hize por software. Después incluí la fase de extrusión de la silueta como un vertex program. La fase de detección de la silueta no la incluí, pero es posible que se pudiera hacer (es un trabajo a nivel de vértice).

De todos modos aun no veo que complejidad añadida le da a este método el tener animaciones.
Título: Shadowmap
Publicado por: Haddd en 17 de Enero de 2005, 01:26:47 PM
 ¿Y cómo haces haces la asociación de los bones con el volumen de extrusion ? Por GPU se disparan los problemas. Y por soft me parece muy lento. De todas formas los ShadowMap no son la panacea, también tienen sus problemillas. Pero son mucho más "limpios".
Título: Shadowmap
Publicado por: BeRSeRKeR en 17 de Enero de 2005, 04:48:30 PM
 Yo jamas he implementado stencil shadows pero por lo que he leído, al iniciar la aplicación se calcula la conectividad entre vértices y después, en cada frame (o si la luz o el objeto se mueve, supongo) se calcula el contorno desde el punto de vista de la luz y se extruye (que esto se puede hacer en un vertex shader) una cierta distancia. En el caso de modelos animados por bones, la conectividad se podría calcular sobre el modelo en pose inicial y como la conectividad no varía a lo largo de la vida del modelo pues es algo que no hay que recalcular. Después la silueta supongo que teniendo el modelo transformado por lo bones, calcularla será como cualquier otro modelo y la extrusión del shadow volume pues supongo que más de lo mismo. Evidentemente esto depende de si el skinning lo haces en la CPU o en la GPU. Si lo haces en la GPU estamos ante un problema ya que además de hacer el skinning en la GPU para el render, también trendríamos que hacer el skinning por software para calcular el contorno, pero si lo haces a través de la CPU como nosotros, no debería haber problemas.

Yo viendo los resultados del shadow mapping veo que si no utilizas un tamaño de shadow map aceptable, la sombra produce mucho aliasing más el añadido del shadow bias que rara vez queda 100% bien. Siempre aparecen pixels en lugares que no debería. Sin contar que si variamos el far plane de la luz, el shadow bias que tuviéramos funcionando en una situación, no valdrá para ésta. Supongo que utilizando una técnica como puedan ser los perspective shadow maps podría solventarse parte de estos problemas.

Así que tal vez una solución híbrida podría ser interesante. Stencil shadows para la geometría estática y depth shadow maps para los personajes. Algo así es lo que parece que hace Unreal Engine 3.

La verdad es que no hay ninguna técnica que nos satisfaga al 100%. :D

Saludos.
Título: Shadowmap
Publicado por: Lord Trancos 2 en 17 de Enero de 2005, 11:29:01 PM
 Como mola el video  (uoh)  
Título: Shadowmap
Publicado por: en 18 de Enero de 2005, 12:15:33 PM
 El tema de las sombras es arduo y complejo, sin dua. Me estube pegando de ostias para hacer un sistema de stencil shadows volumes. Tiene 2 inconvenientes clave:
1) Acceder al stencil buffer es un proceso muy lento para tarjetas k estén por debajo de una gForce3, es decir, no intentar en gf1, 2MX, 4MX, 8500, 9200 o similares.
2) Aunk se puede extruir la geometría por vertex shader, la composición de la silueta se tiene k hacer por soft.

El punto 2 es el k sin duda toca más las pelotas. Lo lógico sería pensar k lo mejor es currarse un buen algoritmo k te sake la silueta con el menor número de vertices posible. Sin duda esto es mejor a la hora de extruir, ya que a menos vertices menos extrusiones. Pero la verdad es k al final me di cuanta de k lo mejor era un algoritmo RAPIDO a la hora de sacar la silueta aunk el número de vertices y caras obtenido fuera mayor. Doom3 por ejemplo lo k hace es sacar la mitad del objeto a extruir (por mitad se entiende la parte del objeto k no está iluminada por la luz, o lo k es lo mismo, las caras en las k su dot contra el vector luz sea menor o igual k 0 (creo k era así). Apartir de ahí lo único k tienes k hacer es duplicar ESA geometría obtenida y extruirla (extruir solo la parte duplicada), generando un index buffer para conectar 2 faces (un quad) por cada 2 vertices extruidos (o por cada edge, lo mismo es), entre la parte original y la parte duplicada. Parace un tanto loco, pero si lo probaís vereis k el rendimiento aumenta bastante, ya que la silueta se computa muy rápidamente. Sin embargo, este algoritmo es poco óptimo para objetos de alto poligonaje, ya que obtendríais volumenes de sombra muy complejos, y por lo tanto, lentos de pintar (más usando el stencil). El hecho de que Doom3 lo haga así es k si nos fijamos los modelos son low poly total (entre 1000 y 1400 polys como mucho, a una media de 800 vertices cada modelo).  Luego está el tema de crear volumenes de sombra para el escenario. Akí ya no entro, xq aunk la base es la misma, algo tiene k ser diferente y eso lo desconozco XD.

Yo  creo k el futuro está en las stencil shadow volumes con una especie de fragment program para disimular los hard edges. El shadow map es bueno cuando el render target es jodidamente grande. El shadow volume se ve igual, sea cual sea la posición de la luz con respecto al objeto, y el objeto con respecto al escenario.
Enga, espero k haya servido de algo!!
Salud2
Título: Shadowmap
Publicado por: Pogacha en 18 de Enero de 2005, 12:48:57 PM
 El doom3 calcula el frame segun los bones del modelo en un vertex-stream usando software, luego calcula la silueta tambien por software y lo estruja por hardware, obviamente seria mas rapido aplicar la animacion por bones por hardware, pero no se si no se puede con el hardware target o queda mas lento.
Sobre la geometria de la esceba se usan los SVBSP que todavia no los logro implementar, pero seguramente los veran en el Enigne 2 prebeta 4, ademas corta los volumenes de sombra con el arbol bsp transformandolos en algo que llama interacciones (volumenes de luz?), lo cual no termino de entender.
Y no se me ocurre como softear los stencil con un FP, exepto usando jittering o alguna tecnica igual de costosa o usando el alpha buffer para ir acumulando el sombreado y cosas así, por ahora poco practicos.
Saludos.
Título: Shadowmap
Publicado por: BeRSeRKeR en 18 de Enero de 2005, 04:20:29 PM
 Evidentemente las soft-shadows son posibles con los shadow volumes aunque es un proceso lento y que necesita obligatoriamente una aceleradora con soporte para pixel shaders 2.0 o superior. De todas formas se puede realizar en tiempo real a un frame rate decente. Por ejemplo aquí tenéis un buen documento sobre el tema. Es la tesis de Casper Fauerby (aka Telemachos) y en ella explica muy bien la generación de soft-shadows utilizando shadow volumes y penumbra wedges. Hay otro documento anterior por Tomas Akenine-Möller que se menciona en el texto de Telemachos.

Saludos.
Título: Shadowmap
Publicado por: AgeR en 18 de Enero de 2005, 05:22:31 PM
 Hmmm y una curiosidad sobre los shadow volumes. De normal, cuando generas un volumen, suele extederse hasta el "infinito" o bueno, hasta donde "se quiera". Pero ahí aparece el problema de que el volumen... "atraviesa paredes". No sé si me explico. Si un bicho proyecta su sombra en el suelo, ésta también se proyectará en el piso de abajo (entiendase la idea que estoy espeso XD).

Sabéis cómo solucionar esto? Lo más obvio es ver dónde intersecta la extrusión de cada vértice y parar ahí dicha extrusión, pero es lento de cojones y no creo que pueda ser permisible a no ser que haya muy poca geometría (no lo he probado, así que hablo de teoría).

Hay algún truco o algo que se me haya pasado? La verdad es que parece mentira con toda la información que hay sobre el problema con la cámara, y que no haya nada al respecto de esto (o igual sí).
Título: Shadowmap
Publicado por: BeRSeRKeR en 18 de Enero de 2005, 05:28:21 PM
 
Cita de: "AgeR"Hmmm y una curiosidad sobre los shadow volumes. De normal, cuando generas un volumen, suele extederse hasta el "infinito" o bueno, hasta donde "se quiera". Pero ahí aparece el problema de que el volumen... "atraviesa paredes". No sé si me explico. Si un bicho proyecta su sombra en el suelo, ésta también se proyectará en el piso de abajo (entiendase la idea que estoy espeso XD).
En Doom3 seguramente utilizan lo que ha dicho Pogacha para conseguir lo que dices:

CitarSobre la geometria de la esceba se usan los SVBSP que todavia no los logro implementar, pero seguramente los veran en el Enigne 2 prebeta 4, ademas corta los volumenes de sombra con el arbol bsp transformandolos en algo que llama interacciones (volumenes de luz?), lo cual no termino de entender.

Saludos.
Título: Shadowmap
Publicado por: Pogacha en 18 de Enero de 2005, 05:50:51 PM
 
CitarHmmm y una curiosidad sobre los shadow volumes. De normal, cuando generas un volumen, suele extederse hasta el "infinito" o bueno, hasta donde "se quiera". Pero ahí aparece el problema de que el volumen... "atraviesa paredes". No sé si me explico. Si un bicho proyecta su sombra en el suelo, ésta también se proyectará en el piso de abajo (entiendase la idea que estoy espeso XD).
Yo y Carmack los extuimos hasta el infinito, por simple comodidad y tambien por que  las luces que tienen un alcanze mayor al que son restringidas por la geometria. Otros tipos de atenuacion como la de 1-(D^2/r^2) permiten tener mayor intensidad de luz en un sector mas concentrado y así es posible estrujar hasta el radio de alcanze de la luz tan solo.
Pero carmack un paso adelante mio utiliza SVBSP "shadow volumes BSP" (o alguna tecnica parecida, me confunde con el nombre "Interaction" parece que el en si define volumenes de luz en vez de sombras) que sirven para eso mismo, crear un arbol bsp de shadow volumes y así mezclado al BSP de la geometria se logra un arbol capaz de optimizar esto, saber que esta a la luz o a la sombra de un solo tiron.

CitarEvidentemente las soft-shadows son posibles con los shadow volumes aunque es un proceso lento y que necesita obligatoriamente una aceleradora con soporte para pixel shaders 2.0 o superior. De todas formas se puede realizar en tiempo real a un frame rate decente. Por ejemplo aquí tenéis un buen documento sobre el tema. Es la tesis de Casper Fauerby (aka Telemachos) y en ella explica muy bien la generación de soft-shadows utilizando shadow volumes y penumbra wedges. Hay otro documento anterior por Tomas Akenine-Möller que se menciona en el texto de Telemachos.

Ese articulo esta bueno  :) , ya conocia los penumbra-volumes, casi que lo implemento para mi motor antes de tener la placa de video nueva, pero no sabia para nada que se podia hacer en tiempo real e inclusive todavia tengo mis dudas, voy a darle un vistaso mas tarde.

Saludos

PD:
CitarYo y Carmack
XD, uno se la cree, siganle la corriente, de todas formas que esos dos personajes no pueden ir en la misma linea.
Título: Shadowmap
Publicado por: AgeR en 18 de Enero de 2005, 06:05:57 PM
Cita de: "BeRSeRKeR"En Doom3 seguramente utilizan lo que ha dicho Pogacha para conseguir lo que dices:
Bueno, pero a mí lo que haga el Doom3 me la trae floja  :P . Quiero decir, la gente normal, a la que no le apetezca eso de los SVBSP cómo se las apaña?

No me imagino en un juego ver la sombra de un enemigo en una pared donde tú estás cuando el bicho está dentro de la habitación de al lado. Algo tiene que haber para no extender la sombra más allá de lo necesario.

Igual se hace lo que había dicho yo de comprobar los rayos, pero se me antoja bastante lento. Igual me equivoco  :huh:  
Título: Shadowmap
Publicado por: BeRSeRKeR en 18 de Enero de 2005, 06:22:57 PM
 Bueno en la mayoría de los casos, el problema que mencionas se solucionaría a través de un sistema de visibilidad. Se supone que no vas a calcular una luz que esté en otra habitación y no es visible.

Mírate el documento que he mencionado. En él no sólamente se habla de cómo conseguir soft shadows sino que además da consejos para optimizar los shadow volumes que es común para cualquier sistema que utilices.

Saludos.
Título: Shadowmap
Publicado por: Pogacha en 18 de Enero de 2005, 07:13:17 PM
 AgeR:
Por supuesto!, no entendiste que la sombra de la escena tapará la sombra del personaje, en teoria los shadows-volumes son para determinar donde no afectará la luz, no para dibujar la sombra, por al contrario, proyectando sombras se llaman sombras proyectadas y en realidad es un metodo todo lo contrario, la luz se dibuja por todos lados y luego se dibujan las sombras encima de esto oscureciendo.
Saludos
Título: Shadowmap
Publicado por: Pogacha en 18 de Enero de 2005, 09:25:48 PM
 El metodo de los stencil-shadow es mas o menos así:

Color ambiente:
1º pasada - Dibujas la escena con color ambiente, lo importante es llenar el z-buffer.
Desactivas la escritura de z-buffer

Por cada luz:
*  Desactivas la escritura en el color (no se como se hace con DirectX) o sea solo permites la escritura en el stencil buffer.
 * borras el stencil buffer
 * Activas el stencil en sumar 1 cuando pasa el z-test, y pones cullface(front_face).
   1º pasada -  estrujas cada borde de las caras al infinito ( o al menos mas haya del alcance de la luz).
 * Activas el stencil en restar 1 cuando pasa el z-test, y pones cullface(back_face).
    2º pasada -  estrujas cada borde de las caras al infinito.
 * Desctivas la escritura del stencil
 * Activas la escritura del color modo suma.
 * Activas el stencil test de manera que dibuje cuando sea 0.
  3º pasada -  dibujas cada cara de la geometria afectada con la luz per pixel.

Para el zfail o carmack reverse lo que se hace es, primero que todo ponerles tapas a los volumenes de sombra  y es lo mismo pero en vez de sumar y restar cuando pasa el z-test se suma y resta cuando falla en el z-test.

El primer metodo falla cuando el ojo se encuentra cerca  del volumen de sombra (en realidad lo que importa es el plano de proyeccion), el de carmack no falla nunca pero es mucho mas costoso y lo que yo hago al menos es usar el primer metodo(zpass ) cuando no estoy en un volumen de sombra y el zfail en caso contrario.

Saludos.
Título: Shadowmap
Publicado por: KaMuY en 19 de Enero de 2005, 09:38:54 AM
 Oye... puede que os parezca tonto.. pero.... como se hace un extrude por hardware? De donde puedo sacar información o algún tutoría? Es que hace tiempo para practicar programe sombras volumétricas.. pero por software... y la parte del extrude estaría genial hacerla por hardware....

Y ya que estamos... información sobre shader... que nunca se como se usan ni que son exactamente... Por que siempre son ejemplos muy muy largos, raros y muy muy diferente entre unos y otros.. Yo tenia entendido que es algo así como un procesador de vértices que tu programas, que estoy tan seguro de eso como de que la ley de la gravedad se aprobó en el parlamento... :P no seáis muy duros con mi ignorancia :P

:D  
Título: Shadowmap
Publicado por: AgeR en 19 de Enero de 2005, 12:08:32 PM
 Ya que el tema es sobre shadowmaps y stencil shadows, casualmente en gamedev hay un nuevo artículo sobre soft shadows aquí.

Parece que el tema está en hacer un blur de los resultados en el stencil (lo he mirado por encima, así que no sé si es correcto lo que digo XD).

PD: La sombra que se obtiene rockea muxo  (genial)  
Título: Shadowmap
Publicado por: Pogacha en 19 de Enero de 2005, 12:15:38 PM
 Shader, puede ser de vertices o de pixeles, pero el primero y con menos requerimientos por ahora es el de vertices, la funcion del vertex-shader es de programar la transformacion del vertice y de sus propiedades, el pixel shader tiene la funcion de combinar las texturas y/o generar un color final procedural para el pixel.

Sobre los shaders tendras que buscar dependiendo si son de OpenGL o DX y debes asegurarte que tu placa de video tenga las posibilidades, para que te anden los Vertex Shaders (nombre de DX) o Vertex Program (nombre de OpenGL) tu placa tiene que decir que tiene capacidades de T&L.

Para extrujar por hardware, debes saber un poco de matematica, se puede hacer de varias formas, su puede hacer por vertice externo a un triangulo o sea tomas el segmento de la silueta y le agregas un tercer vertice correspondiente a la posicion de la luz pero lo conviertes en externo para que el triangulo se "fugue" de este tercer punto hacia el infinito, otro metodo es duplicar los vertices crear cuadrados con dos vertices in-place y dos extrujados.

Y para una extrucion de vertice a distancia finita, solo haces:

V_Entrada=Vertice;
L=Luz;
D=V-L;
N=|D|;
V_Salida = V_Entrada + N * ( Alcance_de_La_Luz + D.Longitud() );

Estos documentos de NVidea te cuenta todo esto en detalle.

Saludos.
Título: Shadowmap
Publicado por: Zaelsius en 19 de Enero de 2005, 02:02:29 PM
 
Cita de: "AgeR"Ya que el tema es sobre shadowmaps y stencil shadows, casualmente en gamedev hay un nuevo artículo sobre soft shadows aquí.
Pues sí, los resultados son bastante buenos.. aunque:

Here are the steps:

   * Generate the shadow map as usual by writing the scene depth into a FLOATING POINT BUFFER.
   * Render the shadowed portions of the scene after depth comparison into fixed point texture, without any lighting.
   * Blur the above buffer using a bloom filter (though we use a separable Gaussian filter in this article, any filter can be used).
   * Project the blurred buffer onto the scene in screen space to get cool soft-edged shadows, along with full lighting.


No todas las tarjetas actuales(con PS2.0) soportan búfers en coma flotante, ¿me equivoco? Las GeForce 6x00 sé que sí, en ATI no estoy seguro si las R9x00 tambien, o sólo las X800... :ph34r:
Título: Shadowmap
Publicado por: Haddd en 19 de Enero de 2005, 03:09:17 PM
 La 9500 sí que la soporta. Creo que en ATI todo lo que soporte 2.0 tiene coma flotante y 4 RT al mismo tiempo ( sólo con Shader 3.0 las de NVIdia soportan 4 rt!! (nooo)  )
Título: Shadowmap
Publicado por: Helius en 19 de Enero de 2005, 03:14:59 PM
 La 9800 Pro también lo soporta (D3DFMT_R32F), comprobado ;)
Título: Shadowmap
Publicado por: BeRSeRKeR en 19 de Enero de 2005, 08:07:48 PM
 Hace tiempo leí que mientras ATI soporta floating point RTs para texturas 3D y cube maps, nVidia no soporta nada de esto en las GeForceFX. ¿Alguien con una GeForceFX puede confirmarlo?.

Así que si esto es así, no se podrían implementar depth shadow maps para luces omni en aceleradoras GeForceFX ya que necesitaríamos floating point cube maps. Tal vez la solución aquí sería utilizar depth shadow maps para luces spot y direccionales y stencil shadow volumes para luces omni. O eso o no dar soporte para GeForceFX...aunque esto es demasiado. :D

Saludos.
Título: Shadowmap
Publicado por: Helius en 28 de Enero de 2005, 04:57:40 PM
 ¿Es eso cierto?  :blink:

¿Cómo es el proceso para la creación de shadowmaps con luces omni?
Título: Shadowmap
Publicado por: Pogacha en 28 de Enero de 2005, 05:03:55 PM
 En tu cumpleaños debieran revelarte el secreto no ?
Feliz cumpleaños.
Título: Shadowmap
Publicado por: BeRSeRKeR en 28 de Enero de 2005, 05:25:25 PM
Cita de: "Helius"¿Es eso cierto?  :blink:

¿Cómo es el proceso para la creación de shadowmaps con luces omni?
Hay que dar 6 pasadas por cada luz omni por lo que ya me parece excesivo pero bueno, supongo que se implementará igualmente ya que tarde o temprano eso no será un problema. En cuanto a lo de las GeforceFX no he podido confirmarlo aún.

Saludos.
Título: Shadowmap
Publicado por: fiero en 28 de Enero de 2005, 06:24:05 PM
 ¿Y si se renderiza con un zoom de 0.5?, el campo de visión de la cámara al hacer el shadowmap sería de 180 grados, por lo que solo habría que hacer dos pasadas ¿no?
La imagen resultante tendría un deformación y la resolución de la sombra no sería constante, pero todo sería cuestión de donde quieras más definición.

un saludo
Título: Shadowmap
Publicado por: BeRSeRKeR en 28 de Enero de 2005, 06:38:35 PM
 Hay una técnica que permite utilizar un environment map codificado en una sola textura (¿paraboloid mapping?) pero no se si se podrá crear una matriz de proyeccion para generar ese tipo de imagen (en este caso la sombra).

Saludos.
Título: Shadowmap
Publicado por: en 28 de Enero de 2005, 06:55:50 PM
 6 pasadas con omni.... pensaba que podias hacer una solo apuntando hacia el objeto al que tienes que crear la sombra y projectar en esa direccion.

Saludos.
Título: Shadowmap
Publicado por: _Grey en 28 de Enero de 2005, 06:58:08 PM
 UPS! el de antes soy yo.

Pero esto no te pedia entrar antes de postear.... me he liado.

Título: Shadowmap
Publicado por: BeRSeRKeR en 28 de Enero de 2005, 07:02:38 PM
Cita de: "Guest"6 pasadas con omni.... pensaba que podias hacer una solo apuntando hacia el objeto al que tienes que crear la sombra y projectar en esa direccion.

Saludos.
No, es que el shadow map que se crea es para toda la escena, no sólo un objeto, entonces hay que hacer una pasada por cada cara del cube map.

Saludos.
Título: Shadowmap
Publicado por: Pogacha en 28 de Enero de 2005, 10:15:15 PM
 Se puede hacer con 2 texturas, con forma paraboloidica , se pierde presicion pero se gana velocidad, el problema es la proyeccion parabolidica, no se bien como es el tema pero he escuchado que el unreal lo usa.

Fiero:
No importa el zoom que hagas el campo de vision nunca puede llegar a 180.0 grados.
Angulo de Vision = arco tangente ( Ancho / Profundida unitaria).
Título: Shadowmap
Publicado por: Helius en 29 de Enero de 2005, 11:40:31 AM
 
Cita de: "Pogacha"En tu cumpleaños debieran revelarte el secreto no ?
Feliz cumpleaños.
Gracias!!!  :lol:

Pues sí, lo de las 6 pasadas me lo imaginaba pero me parece una pasada (valga la redundancia) :blink:

Cierto es que lo de 180º no es viable por lo que dice Pogacha...

Echaré un vistazo a eso de la proyección parabolóidica, pero la verdad que se me están quitando las ganas de implementar shadowmaps... mis escenas están llenas de luces omni  <_<, implementaré las stencil shadows dado que aún no uso skinning.

Saludos.