QUOTE (zupervaca) |
A mi lo que me gustaria saber es como tienen pensado los gurus hacer las sombras cuando se creen vertices en el propio shader.[/quote] Ya lo hacen, mediante shadow mapping. Hace un tiempo vi un tio en los foros de OpenGL que habia hecho un shader de relief mapping dibujando los contornos. Sencillamente genial, pero muy costoso, claro. De una esfera de menos de 100 caras saco detalle como si tuviese varios miles, incluyendo la sombra. Si el algoritmo es en image-space, lo que cuenta es que pillas los datos de la imagen final, y eso incluye la geometria añadida en la pipeline. EDIT: Aqui y aqui se habla de la tecnica que te digo, aunque los screenshots no funcionan (una pena, eran muy buenos para ilustrar el caso)
Título: Sombras En Engines Modernos
Publicado por: tiutiu en 03 de Enero de 2006, 10:03:25 PM Cita de: "BeRSeRKeR"Una de las desventajas que yo le veo, aparte del aliasing, es el tener que utilizar un offset para que las sombras salgan bien, me refiero al "z bias". Nosotros lo resolvemos renderizando las caras posteriores en vez de las frontales en el depth map. De esta forma podemos utilizar un zbias de 0. Pero hace poco he leído una técnica que se utilizó en una película utilizando RenderMan, que lo que hace es renderizar en el depth map las caras frontales, las caras posteriores y luego hace una media entre ambas y ese depth map es el que se utiliza. Evidentemente tiene la desventaja de que son dos pasadas. La media se podría calcular en el pixel shader.¿No teneis problemas cuando mirais el modelo desde atras? Es decir, si dibujas las caras de atras, cuando mires el modelo desde atras (en sombra) esa zona tiene la misma profundidad que la guardada en el depth map, asi que puedes tener tambien flickering en la sombra que hace sobre si mismo, con lo cual deberias usar un bias, ¿no? Sino, ¿que ventaja tiene dibujar las caras de delante? todo el mundo dibujaria las de atras :huh:
Título: Sombras En Engines Modernos
Publicado por: Haddd en 03 de Enero de 2006, 10:20:46 PM
Recordaros que el algoritmo de shadow maps con trapezoides está PATENTADO. Eso creo... :(
Shadow Maps tienen muchísimas ventajas, salvo el maldito problema de la resolución. La mejor es la de que si tienes un objeto en una habitación, no tienes los problemas con stencil de extrusión y que la sombra aparezca en la otra habitación. Además, puede utilizarse esa información en otro pasos, como en el caso de light shafts. Sin embargo, lo mejor es raytracing...A ver si ya nos vamos acercando de una vez...
Título: Sombras En Engines Modernos
Publicado por: BeRSeRKeR en 03 de Enero de 2006, 11:02:23 PM
Aquí hay un paper que explica diferentes métodos para evitar el problema del "z bias". Uno de ellos creo que es la de "mid-point shadow maps" que debe ser la que he mencionado.
Saludos.
Título: Sombras En Engines Modernos
Publicado por: zupervaca en 04 de Enero de 2006, 12:03:02 AM
No conocia esta tecnica, he encontrado esto http://www.shadertech.com/contest/#reliefmapping
Título: Sombras En Engines Modernos
Publicado por: tiutiu en 04 de Enero de 2006, 02:39:23 AM
Haddd, si esta patentado el TSM, o al menos pendiente de patentar, pero diria que solo en EEUU (al menos no en Europa aun) se pueden patentar metodos o algoritmos, y que aqui no se reconocen dichas patentes. Es el mismo caso que con la patente del Carmack's Reverse para sombras.
Ademas, si no vas a hacer algo para el mercado multinacional de millones de dolares no creo que tengas problemas con dichas patentes :) He estado mirando el capitulo de nVIDIA GPU Gems 2 sobre PSM. Han hecho varias modificaciones para que corra en la GPU y subsanar algunos fallos que habia en el paper original. Da buenos resultados a juzgar por los screenshots. A ver si me miro otras implementaciones, como TSM (creo que es el mas facil de todos y el que da mejores resultados) o LiSPSM (aun no he visto comentarios en ningun sitio, pese a que tiene muy buena pinta y no parece tan dificil de implementar).
Título: Sombras En Engines Modernos
Publicado por: AK47 en 04 de Enero de 2006, 09:38:53 AM
Yeup!
Solo commentar que he leido por ahi que no se recomienda usar los Perspective Shadow Maps (creo que era nVidia y algún que otro más que lo decía). Aunque no se si se decía de la versión original y la última versión ya arregla los problema que pudiera tener.
Título: Sombras En Engines Modernos
Publicado por: tiutiu en 04 de Enero de 2006, 11:22:51 AM
Si, es nvidia la que recomienda no usarla. De hecho hay una frase que dice "friends don't let friends use PSM" o algo asi :lol:
Es que si os mirais el paper es un jaleo entenderlo y mas aun implementarlo, ademas que tiene fallos de concepto que aun hacen que sea mas dificil. Por eso decia que lo mejor es implementar TSM (conozco mas casos que lo han implementado satisfactoriamente) o LiSPSM (de este ultimo creo recordar que hay una demo en su web). Haddd, ¿tu crees que hacer sombras por raytracing en al GPU sera una buena opcion? creo que se comeria demasiados recursos como para usarlo en juegos (creo que el relief mapping con siluetas usa algun tipo de raytracing y es costosisimo, aunque queda impresionante).
Título: Sombras En Engines Modernos
Publicado por: AK47 en 04 de Enero de 2006, 12:39:09 PM
Yepa otra vez
Pues si, el LiSPSM tiene buena pinta y en su web tienen una demo (un poco cutrillo, creo yo :() y un video que creo yo tiene buena pinta. Es mas, se comparan 3 tecnicas: shadow maps uniformes u homogeneos (creo que es el shadow map "pelao"), el PSM y el LiSPSM. Estaria muy bien implementarlo en el juego (genial). Lo malo es que necesita de Geforce 3 para arriba (lo de siempre, pixel shaders), y no se si con eso se hace una criba demasiado estricta.
Título: Sombras En Engines Modernos
Publicado por: zupervaca en 04 de Enero de 2006, 12:56:29 PM
Hay un video y todo aquí
Título: Sombras En Engines Modernos
Publicado por: tiutiu en 04 de Enero de 2006, 02:46:28 PM Cita de: "AK47"Yepa otra vezHombre, el SM lo veo muy eficiente a partir de tarjetas con shaders, ya que puedes aprovechar mucho las posibilidades que te da. Si no tienes una GF3 (incluso GF4 Ti) deberias olvidarte de los shadow maps y esperar que tu CPU sea suficiente potente para extraer (y extruir) los shadow volumes. O sino te conformas con un circulo proyectado a modo de sombra (twist) Las sombras de calidad necesitan hardware un poco decente (las GeForce 4 o FX deberian ser un estandar ya, valen cuatro duros... lo mismo digo con ATi). Supongo que al final implementare TSM o LiSPSM, aunque antes tendre que estudiarme los papers a ver si encajan bien en mi proyecto. Segun he visto por los videos de TSM (son 2 ficheros comprimidos de 60MB cada uno), da buenisimos resultados. Se ven comparativas entre varios algoritmos (BB, PSM, TSM) de los mismos walkthroughs por distintos escenarios y la verdad que TSM machaca al resto. Me hubiese gustado ver una comparativa de TSM vs LiSPSM.
Título: Sombras En Engines Modernos
Publicado por: Haddd en 04 de Enero de 2006, 02:58:49 PM
Nada de raytracing por GPU, es una locura. Me refiero a que las tarjetas gráficas sean simple y llanamente "trazadoras de rayos". ;)
Título: Sombras En Engines Modernos
Publicado por: AK47 en 04 de Enero de 2006, 03:02:25 PM
Bueno, aun sin pixel shaders puedes hacer sombras sin recurrir a extrusiones muy caras o discos en el suelo: coges cada objeto que lance sombra, renderizarlo a un render target y proyectarlo en el suelo. No tiene self shadowing y no lanza sombra sobre todo, pero da el pego :)
Título: Sombras En Engines Modernos
Publicado por: er_willy en 04 de Enero de 2006, 06:44:05 PM
in my opinion si va ha hacer un motor de proposito general pon las dos, si no lo que deberias preguntarte el objetivo de la gente que va a usarlo.
los Shadow volumes van bien sobretodo en sitios oscuros con pocos modelos, y muchos polys, y recuerda que es un come framerate de cojones. Si no es asi a tirar, de Shadow mapping.
Título: Sombras En Engines Modernos
Publicado por: tiutiu en 04 de Enero de 2006, 08:21:05 PM
Sip, despues de leer un monton de cosas he llegado a esa conclusion. Los Shadow Volumes estan bien para escenas de interior en las que no se ven demasiados modelos que proyecten sombras. Da sombras bastante detalladas aunque hacerlas suaves es dificil (no se hasta que punto estan desarrolladas las soft shadows con shadow volumes). Para todo lo demas, Shadow Maps son la solucion (TSM o LiSPSM con filtrado).
Definitivamente implementare shadow maps en mi proyecto, puesto que los escenarios son de exteriores y puede haber muchos modelos lanzando sombras.
Título: Sombras En Engines Modernos
Publicado por: Marci en 05 de Enero de 2006, 12:11:17 AM
Yo estaba intentando incorporar Shadow Volumes en un engine. Pero siempre gripo en el cálculo de la silueta. (nooo) Por más vueltas que le doy no voy más alla de tirar de CPU para:
Suponiendo que ya tenemos calculada la normal de cada triangulo del modelo. 1. Recorrer todos los triangulos para averiguar si está iluminado (ángulo entre la normal y el rayo de luz). 2. Si el triangulo está iluminado buscar todos los vecinos. 3. Si el vecino no está iluminado añadir el lado común a la silueta. Una animalada. Ahora mismo estoy haciendolo para cade frame y me bajan los fps... La mejora obvia es calcular la silueta solo si se mueve el objeto o la luz, pero se os ocurre alguna manera de acelerar el calculo de la silueta usando OpenGL.
Título: Sombras En Engines Modernos
Publicado por: Marci en 13 de Enero de 2006, 09:30:06 PM
Bueno, he encontrado esto:
http://www.geocities.com/tom_j_hall/ Es un sistema para calcular las siluetas basandose en la informacion de la silueta del frame anterior. |