Junio 01, 2019, 10:26:18 PM Ultima modificación: Junio 01, 2019, 10:28:17 PM por DarkKRuleR
¡Buenas! Pues veréis. Mi PC no es algo que pueda manejar juegos del nivel de PS4 ni es de la NASA, pero sí puedo jugar juegos de nivel de PS3 con bastante... digamos, eficiencia. Así que tomo mi PC como referencia en el sentido de que si en mi PC corre bien, es buena señal. Ya que mi juego tiene 3D, asumo que el PC debe ser mínimamente potente. ¿El problema? Que lo estoy haciendo de una forma especial para buscar máxima eficiencia. Y me mosquea MUCHO que en ocasiones se me ralentiza... Os cuento.

1) No uso modelos 3D, ni precargados ni construidos. Todo, ABSOLUTAMENTE TODO está hecho de planos. Por ejemplo, el fondo es un enorme plano siempre perpendicular a la dirección de la cámara, cuyas coordenadas de textura altero dinámicamente para que parezca que se mueve. Siempre con primitivas definiendo los 4 vértices, no uso d3d_draw_floor ni similares.
2) No dibujo lo que está fuera de la vista (a mi espalda).
3) Intento siempre agrupar planos y dibujar un solo plano (4 vértices) con todo el contenido, porque el número de vértices determina el coste de procesamiento. En vez de dibujar algo 5 veces, lo dibujo en 1 solo plano con coordenadas de textura de 0 a 5.
4) Iluminación desactivada. Caras ocultas de los triángulos no se dibujan excepto en situaciones concretas. SetHidden a true para no dibujar lo oculto.
5) Disminuir el número de veces que dibujo algo usando surfaces. Gasto 1 step en todo el procesamiento lento para hacer el dibujo con sus iteraciones y weas, y consulto la textura de la surface para dibujarla posteriormente y no volver a repetir todo el procesamiento. Y el resultado vuelvo a dibujarlo en un PLANO. 4 vértices.

¿Por qué hay veces que cuando aumento el número de objetos o número de iteraciones los fps bajan de 60? Dibujando sólo planos, sólo 4 vértices, y con todas las medidas tomadas... Cuando hay gente con fps estables usando modelos con cientos de triángulos y encima iluminación... ¿Qué puedo estar haciendo mal? ¿Me equivoco en algo? A veces me desespero... Gracias...

Tal vez es necesario cambiar el orden de dibujo.
El primer paso sería activar la barra de depuración para ver qué eventos usan más tiempo de procesamiento
[gml]show_debug_overlay(true);[/gml]
Si todo se ejecuta en menos de 16 milisegungos, pero no se alcanzan 60 fps, entonces puede ser necesario incrementar el valor de "Sleep margin" en Global Game Settings/Windows/General/ 10 ms es un buen valor.

#2 Junio 02, 2019, 02:42:24 AM Ultima modificación: Junio 02, 2019, 05:21:42 AM por DarkKRuleR
No entendí lo del orden de dibujo ni lo del sleep margin... pero lo del debug_overlay es super útil! No lo conocía, gracias. Lo tendré siempre activo  :D

BTW me vino la iluminación y optimicé de otras formas. Primero, no dibujando objetos lejanos que eran pequeños. Segundo, y esta es la clave: tener una misma versión de tamaño mucho más reducido de una textura, y al alejarme, cambiar la textura y dibujar la reducida. Recuerdo que esto lo hacían muchos juegos en PS2, me vino así a la mente...  objeto lejano, cambia a textura pequeña pixelada y no se nota y... gracias al debug_overlay, he podido comprobar que aumenta ligeramente la eficiencia. Esto es genial (+u+)

EDIT: haciendo acorde a me explicaste... pronto informaré