Cómo optimizar el rendimiento en RanGE / UPBGE

⚙️ Cómo optimizar el rendimiento en UPBGE / BGE

Si estás desarrollando juegos con UPBGE / BGE 🕹️ y ya tienes suficiente conocimiento para crear prototipos que funcionan bien, puede que hayas notado que, a medida que tu nivel crece, aparecen caídas en los FPS en ciertas áreas o situaciones (por ejemplo, cuando varios objetos colisionan). Esto significa que el rendimiento del juego no es óptimo… y probablemente te estés preguntando: ¿por qué ocurre esto? 🤔

La respuesta es simple: necesitas optimizar cada parte del juego —la lógica, shaders, interacciones físicas, luces, entradas, depuración y más. ⚡ ¡Así que veamos esto más de cerca!


📊 Información del perfilador en RanGE/UPBGE

Según mogurijin en su post:

Muchos desarrolladores conocen la opción “Show Framerate and Profile” del motor, y el caos de texto que aparece en pantalla 😅. Sin embargo, no todos entienden realmente lo que significan esas estadísticas. Este artículo busca ayudarte a comprender qué indica cada valor y cómo ajustar tu configuración para mejorar el rendimiento.

Además del FPS, el perfilador muestra nueve categorías:

  • 🔹 Physics
  • 🔹 Logic
  • 🔹 Animations
  • 🔹 Network
  • 🔹 Scenegraph
  • 🔹 Rasterizer
  • 🔹 Services
  • 🔹 Overhead
  • 🔹 Outside
  • 🔹 GPU Latency

Para obtener lecturas más precisas, desactiva la opción “Use Frame Rate” y deshabilita el VSync desde los controladores de tu tarjeta gráfica 🖥️.


🧩 Physics

Representa el tiempo que toma la física en ejecutarse. UPBGE/BGE usa Bullet Physics, por lo que este valor indica cuánto tarda ese motor en calcular colisiones y movimientos. Para reducir este tiempo:

  • Usa formas simples (caja, esfera, cápsula) en lugar de mallas complejas.
  • Crea una “malla proxy” invisible para cálculos físicos en vez de usar la malla visible y detallada.

🧠 Logic

Este valor mide el tiempo invertido en Logic Bricks y scripts Python 🐍. Para optimizarlo:

  • Reduce la cantidad de bricks y condiciones innecesarias.
  • Perfila tu código Python antes de optimizar (usa cProfile o herramientas similares).
  • Si es necesario, migra partes críticas de Python a C/C++.

🎓 Recomendado: charla de Mike Fletcher (PyOpenGL) sobre cómo perfilar y optimizar código Python.


🎬 Animations

Incluye el tiempo que Blender usa para procesar datos de poses, interpolar fotogramas clave o resolver IK. Para reducir el tiempo:

  • Usa menos huesos en tus armatures.
  • Cambia al sistema IK iTaSC (Simulation), que suele ser más rápido que el Legacy Solver.

💡 Algunos usuarios han reportado mejoras de rendimiento de hasta 4x usando iTaSC.


🌐 Network

El BGE tiene código de red, pero es muy básico y solo se usa internamente para los sensores y actuadores de tipo Message. Difícilmente afectará el rendimiento, pero si notas problemas, revisa cuántos mensajes se están enviando 📩.


🧭 Scenegraph

Controla la posición, rotación y escala de los objetos, así como las relaciones padre-hijo. Si este valor es alto:

  • Reduce la cantidad de objetos activos en la escena.
  • Optimiza jerarquías innecesarias.
  • Usa iTaSC para IK si estás usando huesos.

También maneja los cálculos de culling (frustum y oclusión).


🎨 Rasterizer

El Rasterizer se encarga de renderizar la geometría, shaders y filtros 2D. En versiones recientes, su tiempo se refleja en la categoría GPU Latency.

Para mejorar el rendimiento:

  • Simplifica geometrías y materiales.
  • Evita tener demasiadas luces con sombras dinámicas (cada sombra implica renderizar la escena nuevamente 🔦).
  • Reduce o desactiva filtros 2D costosos (bloom, SSAO, DOF, etc.).

🖱️ Services

Tiempo invertido en procesar dispositivos del sistema (teclado, ratón, etc.). Rara vez causa problemas ⌨️.


🧾 Overhead

Este valor representa el tiempo usado en mostrar texto sobre la pantalla (FPS, propiedades de depuración, etc.).

👉 Cuando ejecutes tu juego en modo release, este tiempo desaparecerá. Mientras tanto, puedes reducirlo mostrando menos propiedades debug.


💻 Outside

Tiempo consumido fuera del bucle principal del motor (por ejemplo, procesos del sistema operativo). No puedes controlarlo, pero cerrar otras aplicaciones puede ayudar 🧰.


🎮 GPU Latency

Nueva en la versión r59097 (Blender 2.69+). Mide el tiempo que el CPU espera al GPU para completar tareas. Si esta cifra es alta, optimizar la lógica o física no mejorará los FPS, ya que el cuello de botella está en la GPU 🧩.

  • Desactiva VSync para mediciones más precisas.
  • Evita shaders y materiales muy pesados.

🔍 Show Render Queries

Otra opción útil es Show Render Queries, que muestra tres tipos de medición:

  • 🧮 Samples passed query
  • 📐 Primitives passed
  • ⏱️ Time passed

Como siempre, menos tiempo invertido = mejor rendimiento 🚀

📘 Lee más sobre esto aquí.


✨ Conclusión

Optimizar tu juego en RanGE/UPBGE no es solo cuestión de reducir polígonos: es entender dónde se gasta el tiempo de procesamiento y actuar sobre ello. Cuida tus físicas, optimiza tu lógica y mide constantemente tu rendimiento. 🧠💪

Si tienes dudas, deja un comentario y con gusto seguimos profundizando en la optimización ⚙️🔥

Leave a Reply

Your email address will not be published. Required fields are marked *