Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: [Resuelto] Hacer eficientes definitivamente mis gráficos  (Leído 626 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado DarkKRuleR

en: Septiembre 09, 2020, 10:08:37 pm
¡Buenas! Os cuento el resumen. Yo tengo mis personajes. Defino las coordenadas de las partes del cuerpo y sus ángulos (hombro, codo, cintura, rodilla...), para tener la información de dónde dibujar el cuerpo y en qué pose. Entonces dibujo los sprites en esas coordenadas (el brazo, la mano, la pierna, el pie).

Qué pasa, que se ejecutan muchos draw_ .... y el coste se dispara bastante. He hecho comprobaciones y es como el 90% del coste de mi juego, sólo los personajes. Al parecer lo costoso no es la complejidad de qué dibujas, sino el hecho de llamar a las funciones de dibujo. Y como ejecuto muchos draw_ ... separados, pues consume mucha memoria.

¿Hay alguna forma de hacer esto más eficiente? Al ser el cuerpo dinámico, en principio no puedo hacer un modelo estático, pues si me muevo, las piernas se mueven, cambiando las coordenadas de sus vértices. ¿Alguna forma de dibujar todo esto sin tener el coste por llamar muchas veces a draw? ¿Alguna forma de, no sé, guardar todas esas coordenadas en una iteración, y luego dibujar todo de golpe, aunque sean coordenadas distintas en cada step?

EDIT: Justo he encontrado vertex_create_buffer y vertex_submit y demás, podría ser la solución... pero me cuesta entender.
« última modificación: Octubre 08, 2020, 06:48:16 pm por DarkKRuleR »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado BssString

Respuesta #1 en: Octubre 08, 2020, 03:38:56 am
Hola DarkKRuleR

Cada dibujo que haces, pasa por una Shader por defecto de Game Maker que hace ciertas correcciones "por si acaso" a lo que dibujas.
Puedes intentar evitar esa Shader para ver si eso tiene alguna mejora en el código o no.

Simplemente crea una nueva Shader, llámala como quieras y no le hagas ningún cambio, déjala tal como la genera Game Maker.
En el Draw_Event usas:
shader_set(tu_shader_aqui)
//tus draw events aqui
shader_reset()

Eso hará que Game Maker en vez de usar la Default Shader, usará tu Shader que has generado que no tiene código.

Esa información se encuentra en este artículo:
https://help.yoyogames.com/hc/en-us/articles/216754868-Optimising-The-Draw-Pipeline

Otra cosa que puedes hacer es obviamente NO dibujar a los personajes que se encuentren fuera de cámara.

Saludos

 


Desconectado DarkKRuleR

Respuesta #2 en: Octubre 08, 2020, 06:13:06 pm
Hola DarkKRuleR

Cada dibujo que haces, pasa por una Shader por defecto de Game Maker que hace ciertas correcciones "por si acaso" a lo que dibujas.
Puedes intentar evitar esa Shader para ver si eso tiene alguna mejora en el código o no.

Simplemente crea una nueva Shader, llámala como quieras y no le hagas ningún cambio, déjala tal como la genera Game Maker.
En el Draw_Event usas:
shader_set(tu_shader_aqui)
//tus draw events aqui
shader_reset()

Eso hará que Game Maker en vez de usar la Default Shader, usará tu Shader que has generado que no tiene código.

Esa información se encuentra en este artículo:
https://help.yoyogames.com/hc/en-us/articles/216754868-Optimising-The-Draw-Pipeline

Otra cosa que puedes hacer es obviamente NO dibujar a los personajes que se encuentren fuera de cámara.

Saludos

Gracias por la respuesta. Al final lo resolví con aquello que encontré, vertex_buffers. Me permiten definir todas las llamadas al "draw", todos los triángulos, para ser enviados con una sola llamada al draw, siendo super eficiente. Y para modelos estáticos, uso modelos tal cual.

Lo que dices es un muy buen consejo que ya había leído anteriormente, pero lo hicimos de otra forma. Modificando el shader en las carpetas de window y quitando todas esas comprobaciones que dices, para que todos los juegos compilados no usen ese shader por defecto ineficiente!