Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Render de vegetación sin alpha testing (GL)

Iniciado por davidgf, 16 de Febrero de 2008, 12:11:04 AM

« anterior - próximo »

davidgf

Hola strateros!

Tengo una pregunta un poco chunga. Espero que me podáis ayudar.

Estoy liao con el KGL (OpenGL para la Dreamcast) y resulta que la consola usa un depth buffer muy raro (RHW he leido?) y la implementación de GL no soporta alpha testing.

Se os ocurre como representar vegetación? Sí que funciona el blending y con todas sus opciones (de SRC y DST). A ver si tenéis una ayuda buena para un pobre.

La solución debería ser "barata" (sólo 200MHz y T&L).

Muchas gracias por adelantado!!!

David
Tàrraco: una aventura por la Tarragona romana (http://tarraco.davidgf.net)

tamat

billboarding de lejos a cerca es la solucion, pero consume lo suyo.
Por un stratos menos tenso

shash

Usa blending a saco. En tiempo de carga repartes N quads en cruz por todo el espacio que quieras vegetación, y lo tiras a renderizar con el tipico alpha blend de toda la vida.

En la dreamcast los fragments con alpha se auto-ordenan de lejos a cerca por hardware, con lo cual automaticamente tendras el buffer generado tal como lo tendrias con los fragments lanzados back-to-front. Tecnicamente, esto se llama Tile Based Deferred Rendering, si no me equivoco.

Ten en cuenta, que si estas usando un emulador para desarrollarlo, la mayoria no emulan correctamente la auto-ordenación de alphas por motivos evidentes, asi que te tocara probarlo alguna vez en el hardware real, o hacer un hack (es decir, un path que SI ordene back-to-front) para testear en el emulador.

tamat

autoordenar de lejos a cerca? cómo se come eso? cómo puede saber el orden de render? me suena rarisimo, deberia guardar todos los poligonos con alpha para luego ordenarlos, pero cómo saber cuando? y qué pasa si la proyección ha cambiado (para hacer el hud)

mu raro
Por un stratos menos tenso

senior wapo

Haz lo que te ha dicho shash.

Cita de: "tamat"autoordenar de lejos a cerca? cómo se come eso? cómo puede saber el orden de render? me suena rarisimo, deberia guardar todos los poligonos con alpha para luego ordenarlos, pero cómo saber cuando?

Cachear los polys no tiene nada de raro. En hard tienes el chip PowerVR (en los docs de Direct3D te lo ponían de ejemplo de chip que no soportaba zbuffer y usaba ordenamiento de escena) y por soft el ejemplo más típico es Quake1 usando una variación de s-buffer (cachear scanlines en lugar de polígonos) para el entorno (que no los personajes).  En el caso de Quake1 no había ni siquiera necesidad de ordenar porque el arbol BSP te los daba ya ordenados (realmente cacheaban scanlines por otra razón: simplificar el bucle que dibujaba los pixeles ya que no tenias que hacer depth test).

No debe ser dificil encontrar la implementación genérica que hizo Micheal Abrash en la DDJ (Doctor Dobs Journal), googlea "abrash zsort.c"


Cita de: "tamat"y qué pasa si la proyección ha cambiado (para hacer el hud)

mu raro

Cacheas poligonos (o scanlines) transformados ya a coordenadas de pantalla, sean modelos o huds.

Una descripción del mecanismo de tiles de la dreamcast (chip PowerVR) lo puedes encontrar en wikipedia (acabo de mirarlo buscando como lo implementaban ellos):
http://en.wikipedia.org/wiki/PowerVR
Baja al apartado Technology.

PD: Ahora que caigo, no lo he dicho pero lo doy por sobreentendido: los poligonos se dibujan al presentar el fotograma, no cuando los envías a la tarjeta.

tamat

Muy interesante, gracias por la info senior_wapo, me parece que estoy muy intoxicado con openGL y a veces me cuesta ver otras implementaciones.
Por un stratos menos tenso

davidgf

Hola,

Perdonad mi tardanza...

Es cierto eso que la Dream tiene reordenación automàtica? Pero si ordena sólo los polígonos, en el caso que se corten dos en forma de cruz que hace??? Quedará mal por narices, digo yo no se...

O sea, en principio los envío al PVR a saco y hago la prueba en la consola?
I si hay que reordenarlos manualmente (por ejemplo si quiero hacerlo yo por  hobby) cómo lo hago? Calculo la distancia respecto al "ojo de la camara" respecto al centro del poligono??

Ahora que leo cómo funciona más a fondo el PVR veo que usa una técnica muy complicada para el alpha y en principio lo hace todo. Es genial no? Aunque no entiendo como funciona, lo que sí sabía era que no tenía un simple zbuffer, que era muy complicada por dentro.

Muchas gracias por vuestras respuestas! Sois la releche!

David
Tàrraco: una aventura por la Tarragona romana (http://tarraco.davidgf.net)






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.