Optimización del rendimiento de tus juegos

En ocasiones los juegos creados con Entidad 3D podrían ralentizarse en exceso si en el encuadre de la cámara del jugador aparece un número excesivo de elementos si en el diseño del videojuego y sus niveles no se han tenido en cuenta una serie de consideraciones para intentar optimizar el rendimiento general, ya sea a nivel de arquitectura, objetos, personajes, sombras, distancias o incluso los tipos de luces usados.


La potencia de cálculo de Entidad 3D y su motor Genesis3D es limitada, y si bien se pueden conseguir buenos resultados sin mucho esfuerzo, si se usan al mismo tiempo modelos 3D de muy alta poligonación, mundos muy grandes, muchos efectos visuales (luces dinámicas, sombras, reflejos, etc..) tu juego podría mostrar un bajo número de FPS y la experiencia del usuario podría llegar a ser decepcionante.


No es raro ver el siguiente comentario en algunos mensajes de correo electrónico que recibo: "Estoy creando un gran mundo abierto similar al juego GTA V, pero el rendimiento de mi juego baja mucho cuando se muestran en pantalla demasiados polígonos."


Si bien con Entidad 3D se pueden crear mundos abiertos no muy grandes y usando diversas técnicas para aumentar el rendimiento, el motor Genesis3D usa una técnica para la partición y la organización del espacio 3D llamada BSP (Binary Space Partitioning) que no es especialmente eficiente para grandes mundos abiertos.

Lo ideal en Entidad 3D es crear niveles con muchas zonas cerradas pero interconectadas con puertas marcadas como 'Area' en World Editor.

De todas formas, no todo está perdido y podrás aumentar el rendimiento de tus mundos abiertos ajustando los siguientes parámetros:


- En la entidad Configuracion los parámetros: Ver_Sombras, SombrasDinMax y Ocultar_ACTS

- En la entidad DeathMatchStart el parámetro: Sombra

- En la entidad ConfigEnemigos los parámetros: Sombra_ y Render_distancia_max_

- En las entidades ConfigPersonaje el parámetro: Sombra

- En las entidades DynamicLight los parámetros: SombraNivel y MaxRadius

- En las entidades SpecificActor los parámetros: RenderSiNoVisible, Render_tras_solido, Sombra, Render_distancia_max y Luces_Dina_Max

- En las entidades ItemObject los parámetros: Sombra y Render_distancia_max

- En la entidad VerArma el parámetro: Ocultar_sombra_1P


Usa el comando STATSM de la consola del sistema para calcular los FPS (Cuadros por segundo) de una escena en concreto de tu juego pero sin mover la cámara durante el muestreo. Fíjate en el dato de muestreo final ya que el dato de FPS que se muestra durante el muestreo puede variar en función de los Bots que entran en el encuadre de la cámara o de las diferentes intensidades de las luces dinámicas.


Usa el comando ACCI LUZ0 0 para apagar todas las luces dinámicas de tu nivel y comprobar el aumento de rendimiento sin luces dinámicas.


Usa el parámetro luces_dinamicas_en_arquitec del fichero Entidad3D.ini para activar o desactivar la influencia de las luces dinámicas en la arquitectura de los niveles.


Usa el parámetro sombras_dinamicas del fichero Entidad3D.ini para activar o desactivar las sombras dinámicas del nivel si éste dispone de sombras dinámicas.


Desde World Editor puedes eliminar el cálculo de luces sobre las texturas de caras concretas activando 'Full Bright' en las propiedades de las caras que no te interese que el motor calcule la incidencia de cualquier luz, ya sea estática o dinámica.

No es algo que debas usar en todas las caras de tu nivel a menos que quieras que tenga el aspecto de un juego clásico al estilo Doom del año 1993.


Siempre que puedas intenta usar luces estáticas en lugar de luces dinámicas.


Si usas muchos bloques 'Cut Brush' en la construcción de tus niveles en World Editor, el rendimiento podría resentirse. Todo lo que se construye con bloques 'Cut Brush' se puede crear sin usar este tipo de bloques. Necesitarás más bloques normales tipo 'Hollow' o 'Solid' sin 'Cut Brush', pero podría compensarte dependiendo de la arquitectura de tu nivel.


En World Editor, compila todos tus niveles con la opción 'Full Vis', pero sólo para las versiones definitivas de tus niveles.


Puedes intentar correr tu nivel usando el 'driver' de pantalla 'OpenGL' en lugar de 'D3D'. Aunque se reducen las capacidades gráficas, en algunos casos puede aumentar el rendimiento (como en Windows 8.1)


Existe un último recurso que consiste en crear una niebla que evite tener que mostrar todos los polígonos del fondo de la imagen. No es recomendable que abuses de este recurso y lo utilices para todo tu juego, ya que el efecto podría transmitirle al jugador una mala experiencia de juego. Este efecto se puede activar y desactivar durante el juego y podrías activarlo por ejemplo sólo cuando el jugador entre en una cueva o en una mazmorra.


De todas formas el rendimiento también se puede ver afectado básicamente por dos factores de la computadora donde esté corriendo Entidad 3D: la CPU y la tarjeta gráfica. En el caso de la tarjeta gráfica también puedes intentar ajustar parámetros de los filtros o los perfiles de rendimiento desde el panel de control de la propia tarjeta gráfica. Intenta desactivar todos los filtros de Direct3D excepto algún filtro suave 'Anti-aliasing', por ejemplo: Muestras 12x Edge-detect muestreo múltiple adaptable.


Como ves, dispones de diversas opciones para intentar equilibrar tus juegos para encontrar algún punto medio entre rendimiento, calidad gráfica y jugabilidad.

No se trata tanto de usar todas las opciones de optimización en todos los casos, ya que con esto seguramente conseguirías un aumento considerable de velocidad pero con unos resultados gráficos muy pobres.

Algunas opciones no son realmente para aplicarlas en la versión final de tu juego, sino que son para que puedas ir activando y desactivando características o elementos de tu juego para que puedas valorar el impacto que causan esas características en el rendimiento general y puedas tomar decisiones de qué incluir y de qué manera en los niveles definitivos de tu juego.


Espero que con estos consejos puedas crear juegos 3D más fluidos sin sacrificar en exceso la calidad gráfica.