Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Projective texturing para hacer sombras

Iniciado por misscelan, 05 de Marzo de 2008, 11:20:05 AM

« anterior - próximo »

misscelan

Buenas,

He estado leyendo un poco de esta técnica y me parece interesante pero tengo algunas dudas.

Cuando tienes varios objetos que crean sombras a la vez, qué renderizas la escena una única vez usando un "texture stage" para cada uno?

Cómo las pondrías sobre objectos ya texturizados, haciendo dos pasadas con algún tipo de blending?

Muchas gracias.

Un saludo.

tamat

- Pintas el shadowmap de la luz renderizando toda la escena en una textura usando una cámara orientada como la luz, no te importa el color, solo la Z así que haces un render flat.

- Cuando renderizas tu escena, antes de computar la ecuación de la luz, proyectas el pixel sobre el shadowmap (para esto necesitas tener en el shader la vp de la luz), si la Z de tu pixel es más pequeña (o era más grande?) que la Z del shadowmap entonces está ocluido y simplemente esa luz no afecta.

- Si tienes varias luces puedes hacer varias pasadas, la primera para calcular la Z de la escena y pintar la ambiente, y las demas una para cada foco.
Por un stratos menos tenso

AK47

Tamat, eso que explicas es la técnica shadow map, pero no es lo que pregunta misscelan, creo yo. El se refiere a dibujar un objeto a un render target y proyectar esta textura en la escena. Así se pueden dibujar sombras sin necesidad de pixel shader.

En nuestro juego usamos esta técnica por ahora, y lo que hacemos es un poco bestia: por cada objeto que proyecta sombra, se renderiza a una textura (se obtiene la silueta del objeto, obviamente) y se proyecta sobre el terreno. Por supuesto, esto no tiene autosombras ni sombras sobre otros objetos (se podría pero se tendrían que controlar más cosas)

misscelan

Gracias por las repuestas.

Es lo que comenta AK47, yo también hago lo mismo, una textura por objeto. De momento voy a hacerlo con huevo texture stages y renderizarlos sobre el escenario en una sola pasada.

Empecé con shadowmapping pero se disparaban los recursos y si además quería hacer un selfshadowing decente y 2 o 3 luces en el mismo momento ya no había dios que moviese eso.

Así que he hecho un par de pruebecillas con esto + lightmaps de todo la vida y lo resultados/consumo son más que decentes.

Si no es mucho pedir AK47, expláyate un poco más!

Muchas gracias y un saludo!.

misscelan

AK eliminas la back-projection con la fixed pipeline??

Alguién sabe como eliminar la proyección inversa sin usar shaders???

Muchas gracias!

AK47

Pos que quieres que te diga, no tiene mucho misterio: por cada objeto que vaya a lanzar sombra calculo su silueta (renderizo el modelo en negro en un render target) y lo proyecto sobre el terreno.

El problema de esta aproximacion es que hace double blending: si se junta mas de una sombra, se suman los colores (bueno, se ennegrece mas la cosa por cada sombra). Esto algunos lo ven una caca, y otros dicen que esta bien o aceptable.

La ventaja de este tipo de sombras es que no exiges al usuario una tarjeta que tenga pixel shaders, pero tampoco es una tecnica tan ligera (por lo menos tal como lo hago yo, sin demasiada optimizacion)

Estoy pensando en hacer el asunto como los shadow maps, es decir, en vez de sacar una "foto"por cada modelo, calcula un frustum nuevo de forma dinamica en base al frustum del jugador y usarlo parasacar la "foto" de todos los objetos lanzasombras a la vez. Luego ya proyecto esta unica textura sobre el terreno. Asi no se da el double blending, y podria suavizar los bordes.

En fin... que mas puedo explicar? XD

AK47

El back-projection no lo elimino por ahora, pero tengo pensado hacerlo dibujando solo los poligonos que tocan y no mas  :lol:

misscelan

Muchas gracias, era más que nada para leer una segunda opinión de alguien que ya lo tuviese implementado hasta el final y saber si estaba haciendo alguna locura.

Lo de la back-projection, estoy leyendo algo de mezclarlo con una textura1d, es que yo lo hago todo de una pasada y no puedo saltarme el renderizado de ningún polígono.

Por cierto, no sé cuál es el tu juego, que perspectiva usas, y lo mismo no te sirve de nada pero has visto los variance shadowmaps?, a mí me funcionó bien para la luz del sol ( usé una proyección ortográfica) y luego se pueden suavizar muchísimo, eso sí, si la cámara está muy cerca o tienes más de una fuente entonces vienen los problemas.

Un saludo.

AK47

Pues hasta ahora el juego no usa nada de pixel shaders, asi que no he tocado nada de shadow maps. Lo de variance shadow map lo he apuntado (he visto el link en tu web y pa la saca jeje), que tiene buena pinta.

El juego que estoy haciendo (con otro compañero) es totalmente en 3D y es en primera persona, por lo que los variance shadow maps parece que nos vendra muy bien. Gracias por el link ;)






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.