Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Manu343726 en 28 de Enero de 2013, 12:07:51 PM

Título: Dibujar tilemaps
Publicado por: Manu343726 en 28 de Enero de 2013, 12:07:51 PM
Buenas.

Me gustaría saber cual es la mejor manera, o la más eficiente mejor dicho, de dibujar tilemaps.
Es algo a lo que llevo dando vueltas en la cabeza y no acabo de encontrar solución.

No puedo usar trianglestrips porque las coordenadas de textura no tienen porque ser la misma para dos tiles contiguos. Pero dibujar todo a base de quads no me parece la mejor manera, ya que en la mayoría de los casos repetirás el mismo vertice cuatro veces (suponiendo que el tilemap sea ortogonal, normal y corriente).

Tiene que haber alguna manera mejor, pero o no la veo, o no se me ocurre.
Título: Re:Dibujar tilemaps
Publicado por: KneDa en 28 de Enero de 2013, 12:18:32 PM
Esto quizás sea un buen punto de partida:

http://www.gamedev.net/page/resources/_/technical/opengl/tiling-in-opengl-r1256

Echale un vistazo a esta técnica:

http://media.tojicode.com/zelda/

O tile mapping {opengl,directx,sdl,whatever} google ;)
Título: Re:Dibujar tilemaps
Publicado por: Manu343726 en 28 de Enero de 2013, 01:22:47 PM
Yo lo que quiero saber es si existe una manera mejor de hacerlo, que no sea dibujar quads. En el enlace que me has puesto, el del artículo de OpenGL, dibujan quads...... Creo que lo decía bien claro, alguna manera que no sea con quads, para no repetir vertices
Título: Re:Dibujar tilemaps
Publicado por: Sergi Lázaro en 28 de Enero de 2013, 03:49:36 PM
Tienes alguna razón en particular para querer hacerlo super eficiente? Vas a renderizar mapas enormes (ENORMES), como para que el renderizado de tiles sea un problema de rendimiento?
Título: Re:Dibujar tilemaps
Publicado por: Manu343726 en 28 de Enero de 2013, 04:20:21 PM
Si, la idea es que si funciona usarlo para implementar algo tipo sim city, donde los mapas son enormes.
Título: Re:Dibujar tilemaps
Publicado por: Sergi Lázaro en 28 de Enero de 2013, 04:52:37 PM
Yo probaría la forma clásica, probar con el mapa más grande que vas a tener, con una cámara del tamaño que tendría, etc. y medir si el rendimiento es bueno para el hardware que va a soportar, ya que sin medirlo previamente puede parecer muy basto, pero hoy en día a veces puedes hacer cosas super poco optimizadas y que vayan bien. Si es bueno el rendimiento, no vale la pena matarse a optimizar algo que no es un cuello de botella, a no ser que lo que se quiera sea "hacer engine"/"aprender" y no "hacer juego".

Para algo optimizado, usando shaders como explicado aquí parece interesante: http://gamedev.stackexchange.com/questions/30362/drawing-lots-of-tiles-with-opengl-the-modern-way/30454 . Casualmente el de la respuesta también menciona la filosofía de no matarse a no ser de que sea necesario (optimización prematura).

Perdona por todo esto si has medido el peor caso real y resulta que realmente necesitas rendimiento, pero es que la optimización prematura es un cancer que todos sufrimos  ;)
Título: Re:Dibujar tilemaps
Publicado por: Manu343726 en 28 de Enero de 2013, 06:58:09 PM
Realmente si lo necesito, hace tiempo ya intente hacerlo, pero lo tuve que dejar precisamente porque dibujar 1000x1000 quads no lo llevaba muy bien. Y eso era el mapa mediano......
Título: Re:Dibujar tilemaps
Publicado por: FANatiko en 28 de Enero de 2013, 10:29:05 PM
Cita de: Manu343726 en 28 de Enero de 2013, 06:58:09 PM
Realmente si lo necesito, hace tiempo ya intente hacerlo, pero lo tuve que dejar precisamente porque dibujar 1000x1000 quads no lo llevaba muy bien. Y eso era el mapa mediano......

¿Pero estan los 1000x1000 en pantalla, a la vez? Se me ocurre que primero deberías hacer "culling" de los tiles que estan fuera de pantalla. 

Hecho esto, lo que tendrías que hacer (si sigues teniendo problemas) es meter algun tipo de LOD (nivel de detalle) de forma que los tiles que esten lejos de la camara se pinten con modelos simplificados (que dará igual, porque seran como 4 pixels de pantalla si tienes el millon de tiles a la vez).

¿Son tiles 2d o tiles 3d? Si son tiles 3d, ¿estas usando OpenGL de la forma más eficiente o tiras de la fixed pipeline y modo inmediato?
Título: Re:Dibujar tilemaps
Publicado por: KneDa en 29 de Enero de 2013, 10:58:27 AM
Manu343726, de nuevo, mira el enlace que he puesto del zelda... aquí la explicación http://blog.tojicode.com/2012/08/more-gpu-tile-map-demos-zelda.html
Título: Re:Dibujar tilemaps
Publicado por: Eskema en 29 de Enero de 2013, 04:12:52 PM
yo probe un mapa de 10.000x10.000 y funcionaba perfecto en iphone sin ninguna optimizacion rara, sobra decir que SOLO se dibujaban los tiles en pantalla, unos 250 (tiles de 32x32 en 480x320 de resolución) y funcionaba a 60fps. Y eran simples quads mergeados en una sola drawcall (siempre que la textura fuera la misma claro)
Lo cual significa que creaba un VBO y listo, era openglES 1.1, ni shaders ni historias
Título: Re:Dibujar tilemaps
Publicado por: Manu343726 en 30 de Enero de 2013, 12:37:16 PM
Perdona KneDa, ese día estaba un poco gilipoyas. Gracias por la información.

En su momento no es que fuera muy avispado, pero tampoco estaba haciendo burradas XD. Por supuesto solo dibujaba los tiles que se veían, e incluso hacia un intento de backface culling para no dibujar los tiles que estaban "al otro lado de la montaña".

Pero también es verdad que igual no estaba usando el mejor sistema de dibujo... Pero bueno...

Sobre lo de meter todos los tiles en una sola drawcall, el problema que tengo es que no puedo asegurarme de que todos tengan la misma textura. Alguna idea?
Título: Re:Dibujar tilemaps
Publicado por: Sergi Lázaro en 30 de Enero de 2013, 01:22:43 PM
Puedes hacer algun tipo de preproceso para hacer un atlas con todos los tilemaps juntos?
Título: Re:Dibujar tilemaps
Publicado por: Manu343726 en 30 de Enero de 2013, 02:08:56 PM
Eso había pensado, pero el problema es que si ando modificando las texturas del tilemap una y otra vez (cosa que seguramente haré) no se sí al final será peor el remedio que la enfermedad
Título: Re:Dibujar tilemaps
Publicado por: pacomix en 17 de Mayo de 2013, 04:40:31 PM
¿No sería más sencillo hacer el mapa entero en 3D y configurar luego una cámara con proyección ortogonal?
Título: Re:Dibujar tilemaps
Publicado por: Manu343726 en 19 de Mayo de 2013, 04:57:18 PM
Realmente (creo) eso es lo de menos, ya que en realidad estoy haciendo precisamente eso; dibujar en 3d pero todo con la misma z. La proyección isométrica me la como yo, pero da igual porque solo lo haces al generar el mapa.

El problema al final lo solucioné usando un spritesheet, con lo que el mapa entero (Al final de unos 250x250 tiles si no recuerdo mal) se dibujaba en una sola drawcall.