Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: DarkKRuleR en Septiembre 23, 2017, 02:19:26 PM

Título: [Resuelto] [3D] Enorme ralentización al implantar iluminación, y en general
Publicado por: DarkKRuleR en Septiembre 23, 2017, 02:19:26 PM
¡Buenas! Pues este tema me tiene jodido y dudando. Ando haciendo mi juego, que es un plataformas de jugabilidad 2D y personajes y objetos 2D, pero los escenarios son cubos 3D de una sola profundidad. O sea, los PJs se mueven por cubos. Éstos son simples cubos, con 4 vértices para dibujar cada cara. Un problemilla es que cada cara está formada por 5-6 planos para formar una animación. Igual, no dejan de ser PLANOS. A demás, tengo el culling activado, dibujando sólo las caras frontales de los triángulos, el hidden, para dibujar sólo lo que se ve, y no dibujo las cosas que estén fuera de la view. También creo las texturas en los eventos create y no a la hora de dibujar en cada step. Con todo esto, debería ser jodidamente eficiente... pues no. Los fps bajan de 60 a... algunas veces 40 en momentos críticos aleatorios, a veces 50.

Lo peor es cuando implanté la iluminación. Puse las normales a los vértices y todo el rollo, y probé con una pequeña luz. 15 fps constantes... es un infierno. Son sólo cubos, por dios... he visto cosas más complejas, y GM debería estar preparado... ¿Alguna idea de qué puede ocurrir? Lo peor es que mi PC es medianamente eficiente, puede correr cualquier juego del nivel de PS3 con gráficos al mínimo a 60/60.

En un ataque de eficiencia, y recordando lo que pregunté en el pasado, he quitado el evento draw de cada objeto cubo y, en el controlador, me he hecho un bucle que, para cada cubo, lee sus coordenadas y el propio objeto controlador dibuja el cubo en esas coordenadas, sin ningún "with". Así, TODOS los cubos se dibujan en UN solo evento draw, sin ejecutar código del objeto cubo. Pensé que esto aumentaría tanto la eficiencia como me pasó en mi anterior proyecto, pero sigue estancada en 20/60 fps... lo cual no tiene ningún sentido.

¿Qué cosas pueden dejar en la mierda los fps hasta este punto, más cuando sólo dibujo planos y con tanto control de eficiencia? Los personajes también son varios planos (sprites) superpuestos...
Título: Re:[3D] Enorme ralentización al implantar iluminación, y en general
Publicado por: Naitsabes0 en Septiembre 23, 2017, 04:48:22 PM
Cita de: DarkKRuleR en Septiembre 23, 2017, 02:19:26 PM
¡Buenas! Pues este tema me tiene jodido y dudando. Ando haciendo mi juego, que es un plataformas de jugabilidad 2D y personajes y objetos 2D, pero los escenarios son cubos 3D de una sola profundidad. O sea, los PJs se mueven por cubos. Éstos son simples cubos, con 4 vértices para dibujar cada cara. Un problemilla es que cada cara está formada por 5-6 planos para formar una animación. Igual, no dejan de ser PLANOS. A demás, tengo el culling activado, dibujando sólo las caras frontales de los triángulos, el hidden, para dibujar sólo lo que se ve, y no dibujo las cosas que estén fuera de la view. También creo las texturas en los eventos create y no a la hora de dibujar en cada step. Con todo esto, debería ser jodidamente eficiente... pues no. Los fps bajan de 60 a... algunas veces 40 en momentos críticos aleatorios, a veces 50.

Lo peor es cuando implanté la iluminación. Puse las normales a los vértices y todo el rollo, y probé con una pequeña luz. 15 fps constantes... es un infierno. Son sólo cubos, por dios... he visto cosas más complejas, y GM debería estar preparado... ¿Alguna idea de qué puede ocurrir? Lo peor es que mi PC es medianamente eficiente, puede correr cualquier juego del nivel de PS3 con gráficos al mínimo a 60/60.

En un ataque de eficiencia, y recordando lo que pregunté en el pasado, he quitado el evento draw de cada objeto cubo y, en el controlador, me he hecho un bucle que, para cada cubo, lee sus coordenadas y el propio objeto controlador dibuja el cubo en esas coordenadas, sin ningún "with". Así, TODOS los cubos se dibujan en UN solo evento draw, sin ejecutar código del objeto cubo. Pensé que esto aumentaría tanto la eficiencia como me pasó en mi anterior proyecto, pero sigue estancada en 20/60 fps... lo cual no tiene ningún sentido.

¿Qué cosas pueden dejar en la mierda los fps hasta este punto, más cuando sólo dibujo planos y con tanto control de eficiencia? Los personajes también son varios planos (sprites) superpuestos...
Todas las habitaciones (room) están en los 30 step que tienen por defecto?
Cuantos fotogramas tienen en promedio los sprite?
les programas la variable image_speed?
Los objetos que se salen de la habitación se destruyen?
En tus habitaciones hay muchos objetos moviendoce a la vez?
Que tamaño tienen tus sprite?
De que color son mis ojos? (vale esa ultima no).

Bueno cosas como estas hacen que el rendimiento del juego corra mas lento, yo por ejemplo tengo todo bajo una misma temática de 2D con estilo pixel art de aspecto sombrío, y los personajes suelen tener tamaños inferiores a los 32x32 ninguno tiene mas de 8 fotogramas, las habitaciones tienen 30 step por defecto y gracias a la variable image_speed las cosas se adaptan a su movimiento sin parecer que tienen retraso, así es como se ve mi juego con estas condiciones.

También podría poner algunos GIF de como se ven las cosas que estas asiendo así nadie sabe si de verdad se ve tan mal lo que haces, ya que tu problema es visual vendría bastante bien que expongas mas haya de solo escribir tus inquietudes  :-\.
Título: Re:[3D] Enorme ralentización al implantar iluminación, y en general
Publicado por: DarkKRuleR en Septiembre 23, 2017, 05:18:14 PM
Oh, y tanto que se ve mal. Compruebo la variable fps y todo va más lento, asegurado xDD

Bien, cada punto...

- La room está a 60 fps, pero antes de añadir más cubos y de la iluminación (ésta es la principal causante, antes de activarla todo iba bien) todo iba perfecto.
- No utilizo sprites, sólo texturas. Es decir, no uso ningún sprite animado, sólo agarro sus subimagenes para texturas y ya. Y todas las agarro en los evento Create. Aún con esas, los sprites no suelen superar las 2-3 subimágenes.
- La image_speed suele estar a 0, pero por lo anterior no suele afectar.
- No, pero no tengo objetos que salgan de la habitación. Cuando ocurra sí, debo recordar hacerlo.
- Hay muchos cubos, pero no se mueven.
- Todos son 128x128 de media, para usarlos de texturas. Algunos son 256x256, muy pocos, y los que no son usados para texturas, son inferiores a 100x100.
- Si no me mandas foto no lo puedo saber (>uo)7

Lo dicho, todo iba perfecto antes de activar la iluminación, con sólo algunos fps drops momentaneos que creo ahora estaría resuelto, pero con la iluminación se va todo a la mierda... y creo que lo estoy haciendo bien, por todo lo explicado. No sé qué motivos podrían ralentizarlo TANTO.
Título: Re:[3D] Enorme ralentización al implantar iluminación, y en general
Publicado por: Clamud en Septiembre 23, 2017, 06:17:32 PM
Para ver exactamente qué está causando la baja de fps puedes correr el juego en modo de depuración y hacer un "profile".

Creo que el principal problema es que se usan varios planos para una sola cara, ¿no se puede usar un solo plano y cambiarle la textura?
Lo mejor es no usar las funciones d3d_draw_block, d3d_draw_floor, d3d_draw_wall y d3d_primitive_begin. Es más eficiente crear un modelo al inicio del juego y que todos los cubos usen el mismo modelo. Si varios personajes son del mismo tamaño también puedes crear un modelo plano para todos ellos.

Otra cosa que puedes hacer es organizar las texturas para que se realicen el menor número de cambios de textura. Ve a Global Game Settings, selecciona la pestaña Windows, luego la pestaña Graphics y presiona el botón Preview. Si solo hay una página de textura no hay que preocuparse.
Título: Re:[3D] Enorme ralentización al implantar iluminación, y en general
Publicado por: DarkKRuleR en Septiembre 23, 2017, 07:50:03 PM
No encontré ese botón de Preview...

Gracias! Sí, sabía que no debía usar esas funciones, y TODO lo hago con d3d_primitive_begin. Pero no sabía que esto también era ineficiente...

Okay, veré de hacer lo del modelo al inicio para los cubos, y si es aplicable a los personajes, lo cual no sé por ahora.

Y no. La cara es un plano central, y debe tener varios planos para hacer una animación dinámica.

Me preocupa que esto viene SOBRETODO al implantar la iluminación, como dando a entender que no es culpa del dibujado de cubos (que antes iba OK) sino a los cálculos de iluminación, que haga algo mal y no sepa por qué... por ahora veré si hacer que los cubos sean un modelo lo resuelve.

También me preocupa que todo se ralentiza más cuando dibujo las partes del personaje, y si no dibujo al personaje va bien... el cual a demás me da problemas gráficos (no dibuja sus transparencias). Todo muy caótico.

Toda mi rallada es que hay gente que hace cosas más compleja, que dibuja cilindros, esferas... mil modelos y mil mierdas con muchos vértices, ¿por qué a mí se me ralentizan PLANOS? No dibujo más que planos, e intentando que sea eficientemente.
Título: Re:[3D] Enorme ralentización al implantar iluminación, y en general
Publicado por: MasterMaker en Septiembre 24, 2017, 03:26:38 AM
Prueba con las sombras... Otra cosa puede ser que tengas alguna función que se este repitiendo mucho
Título: Re:[3D] Enorme ralentización al implantar iluminación, y en general
Publicado por: DarkKRuleR en Septiembre 24, 2017, 02:00:40 PM
¿A qué te refieres con las sombras? ¿Y con función que se repita mucho? Esto último quizás sea algo de cálculo, pero no sé cómo tomarlo cuando con la iluminación desactivada va bien.
Título: Re:[3D] Enorme ralentización al implantar iluminación, y en general
Publicado por: Clamud en Septiembre 24, 2017, 06:46:06 PM
Si los polígonos no necesitan una sombra con gradiente puedes desactivarla con esta función
[gml]
d3d_set_shading(false)
[/gml]
Título: Re:[3D] Enorme ralentización al implantar iluminación, y en general
Publicado por: DarkKRuleR en Septiembre 24, 2017, 08:38:00 PM
Wow... he probado la función, y... creo que da una iluminación extraña... pero en cierta medida le da un toque interesante... Y creo que, en el peor caso, la puedo activar para dibujar ciertas cosas, aunque no para todo. Aunque... voy a experimentar con ella, se ve interesante.

Y he descubierto qué ocurría. Digamos que... Los cubos que hay en los bordes y esquinas, tienen un código para rellenar todo el exterior de la room de cubos automáticamente, sin tener que poner yo manualmente cubos en todo el exterior... el código estaba mal optimizado y no aplicaba el "no dibujar si fuera de la view" a éstos cubos. Lo arreglé en 1 minuto y 60 fps estables, perfecto... pero ha costado lo suyo encontrarlo. ¡Muchas gracias a todos! ^^