Cómo Megapop construyó el océano viviente de Life Below con el Sistema de Componentes de Entidades.

Para tu comodidad, tradujimos esta página mediante traducción automática. No podemos garantizar la precisión ni la confiabilidad del contenido traducido. Si tienes alguna duda sobre la precisión del contenido traducido, consulta la versión oficial en inglés de la página web.
Descubre cómo Megapop construyó su denso juego de construcción de ciudades submarinas de crecimiento orgánico aprovechando el rendimiento y la escalabilidad del Sistema de Componentes de Entidades (ECS) .
EL RETO:
Simula decenas de miles de criaturas marinas interactuando, un programador de tareas de IA personalizado y corales dinámicos, todo ello sin sobrecargar la CPU.
PLATAFORMAS:
PC (Steam)
UBICACIÓN:
Oslo, Noruega
TAMAÑO DEL EQUIPO:
14 empleados a tiempo completo, 3 autónomos
¿Cómo logra un juego como Life Below simular un ecosistema oceánico denso y vivo sin sobrecalentar el PC del jugador?
El nuevo juego de Megapop , "constructor de arrecifes", propone a los jugadores la tarea de restaurar un entorno oceánico moribundo. En lugar de colocar edificios de hormigón en una cuadrícula, los jugadores actúan como la propia naturaleza, cultivando corales de forma orgánica y gestionando el frágil ecosistema para atraer a más de 55 especies reales de vida marina, desde peces payaso y cangrejos hasta delfines y nutrias marinas.
Para lograr la estética vibrante y la jugabilidad atractiva de Life Below, fue necesario un compromiso total con el diseño basado en datos. Al tratar esta red de peces, fauna salvaje y trabajadores NPC como datos puros (números en memoria contigua en lugar de objetos de juego complejos), el equipo resolvió desafíos complejos relacionados con el comportamiento de los boids, la escala de renderizado, el audio espacial y la simulación del ecosistema, para ofrecer una experiencia de alto rendimiento en PC.

Los resultados:
- Bancos simulados de hasta 250.000 peces del mismo tipo durante las primeras pruebas de estrés.
- Mantiene 60 fps en una RTX 3060 con miles de criaturas activas en la fase final del juego.
- Soporta más de 1300 animales interactuando a 30 fps en máquinas de gama baja.
- Obtuvo un índice de aprobación del 97,2% por parte de los beta testers profesionales.
- Maneja más de 15 000 entidades y más de 450 sistemas en una partida guardada de 14 horas en la fase final del juego, y funciona sin problemas.
- Mención honorífica en la beca Unity for Humanity 2025.

Comprometerse con un enfoque orientado a los datos.
Megapop tomó la decisión de desarrollar Life Below completamente en ECS durante la fase de preproducción. “ECS nos permite estructurar el juego como muchos sistemas pequeños que trabajan juntos, en lugar de depender de grandes jerarquías de clases”, afirma Jørgen Tharaldsen, fundador y director ejecutivo del estudio. “Eso facilita la creación de simulaciones complejas al componer el comportamiento a partir de piezas más pequeñas.”
La transición de un paradigma de desarrollo orientado a objetos a uno orientado a datos supuso un cambio importante para el equipo de Megapop. Para superar la falta de conocimiento, ITR, líder técnico de Life Below y promotor inicial de ECS en el proyecto, recurrió a diversos recursos, desde la documentación oficial de ECS de Unity y ejemplos de ECS , hasta consejos prácticos de la comunidad de Discord de Unity y YouTube. “ El programa Hot Path Show, presentado por Turbo Makes Games, también resultó especialmente útil para obtener información más específica sobre DOTS y ECS”, afirma ITR.
Cuando el programador Simen Wiig se unió a Megapop unos 18 meses antes del lanzamiento de Life Below , aprender ECS formaba parte de su proceso de incorporación. “Lo principal era comprender la mentalidad orientada a los datos en lugar de la habitual mentalidad orientada a los objetos”, afirma. “Una vez que entendí eso, me gustó mucho cómo el uso de componentes y entidades me ayudó a estructurar mejor mi código.”
ITR identifica el principio que marcó la mayor diferencia en la incorporación de ECS: “Apueste por un enfoque orientado a los datos en lugar de intentar mezclar demasiadas arquitecturas diferentes.” Mantener los sistemas pequeños y enfocados facilita la escalabilidad del proyecto a medida que se añaden nuevas funciones.

Vida en las profundidades | Megapop | Kasedo Games
Creación de un programador de tareas para PNJ
En Life Below , los jugadores no dan órdenes directas a sus trabajadores NPC, un equipo de espíritus acuáticos que se encargan del mantenimiento del arrecife. En cambio, el jugador establece objetivos (colocar un coral aquí, recolectar estos recursos) y un planificador de tareas personalizado asigna automáticamente al trabajador óptimo para cada tarea.
El planificador se ejecuta dentro de un sistema compilado con Burst y funciona en tres etapas: primero, utiliza ECS para recopilar información general sobre la disponibilidad de los trabajadores, la ubicación de los recursos y las tareas pendientes; luego, un algoritmo selecciona las tareas de alta prioridad manteniendo una distribución equilibrada entre los diferentes tipos de tareas; finalmente, recupera información detallada utilizando ECS para encontrar el mejor trabajador y planificar cada paso. “Utilizamos programación funcional jerárquica para garantizar que sea fácil añadir nuevas tareas, al tiempo que nos aseguramos de que el juego no entre en un estado corrupto”, explica ITR.
En las fases finales de la partida, alrededor de 100 trabajadores operan simultáneamente. El sistema es de un solo hilo, no por una limitación técnica, sino porque cada tarea asignada depende del resultado de la anterior. “Es similar al planificador de tareas de un sistema operativo”, dice ITR, “solo que sabemos aproximadamente cuánto tiempo tardará una tarea antes de programarla, en lugar de después”.

Vida en las profundidades | Megapop | Kasedo Games
Simulación de comportamientos complejos de los boides
Muchos juegos implementan el comportamiento de bandada utilizando soluciones sencillas de GPU o Burst . Para Life Below , Megapop necesitaba especies que cazaran, huyeran e interactuaran de forma dinámica, incluso en encuentros cercanos con el jugador, con la cámara mirando hacia él.
“Para simulaciones sencillas de boids, es fácil poner algo en marcha utilizando Burst o cálculos con GPU”, dice Jørgen. “Pero queríamos un comportamiento más complejo, donde diferentes especies interactuaran, e incluso donde se pudiera interactuar con la fauna salvaje en primeros planos grabados con la cámara.”
Utilizando el sistema de tareas , el equipo separó las partes paralelizable de la lógica del boid (actualizaciones básicas de posición y cálculos de separación) de las interacciones ramificadas complejas, como la persecución del depredador. No todas las especies son igual de exigentes en cuanto al rendimiento: los animales que se alimentan del fondo marino, como los cangrejos, son relativamente baratos de simular, mientras que los depredadores como el pez león evalúan múltiples condiciones en cada fotograma para cazar, perseguir y atacar a otras especies.
Gestión de audio espacial a gran escala
Lograr que el audio espacial dinámico funcionara junto con miles de entidades activas fue uno de los desafíos más difíciles del proyecto. La solución, desarrollada por el programador Fingar Bøen, consistió en agrupar a las criaturas cercanas en grupos y generar el audio a partir del comportamiento del grupo en lugar de los peces individuales.
“Factores como la especie, el tamaño del grupo, el movimiento y el momento oportuno ayudan a determinar cuándo deben reproducirse los sonidos”, explica Fingar. “Eso nos permite representar a miles de criaturas manteniendo un paisaje sonoro natural y un coste de CPU manejable.”
ECS Jobs y Burst se encargan de la fase de recopilación de datos (recopilan las posiciones de las entidades y las agrupan de forma eficiente en paralelo), mientras que el código gestionado que activa los eventos de audio se mantiene lo más mínimo posible. El equipo también está trabajando para sustituir los identificadores de eventos FMOD basados en cadenas de texto por GUID, lo que reducirá la asignación de memoria basura y hará que una mayor parte del flujo de audio sea compatible con la función de ráfaga.
Creando un arrecife vivo
La visualización de miles de entidades requiere un proceso de renderizado altamente optimizado. Megapop utiliza texturas de animación de vértices (VAT) para movimientos complejos de animales, como ciclos de natación, y animaciones procedimentales para peces más pequeños que nadan en cardúmenes. El entorno también responde a la salud del ecosistema: los corales muestran dinámicamente el crecimiento de las algas, el estrés y los estados de daño en función de los parámetros que se transmiten directamente desde el ECS.
Entidades Gráficos e instanciación de GPU
El equipo utilizó la instanciación de GPU desde el inicio del desarrollo, inicialmente a través de llamadas personalizadas a la API de gráficos antes de migrar al paquete oficial de gráficos Entities de Unity. El cambio no se debió a una mejora en el rendimiento (ambos enfoques se basan en la misma tecnología subyacente), sino a que Entities Graphics facilitó mucho el trabajo con el sistema y mejoró significativamente la integración con ECS. “Era mucho más fácil de usar y funcionaba mucho mejor con ECS”, afirma Adam Hove, artista técnico y programador de Megapop.
Entities Graphics admite componentes ECS personalizados que cargan automáticamente sus datos a la GPU como valores por entidad en cada fotograma, pero solo cuando esos valores han cambiado realmente. Esto significa que cientos de entidades estables no están volviendo a cargar datos de búfer innecesariamente. La instanciación de GPU garantiza que tener cientos de corales y decoraciones dispersas en la pantalla no multiplique las llamadas de dibujo: “Con la instanciación por GPU, puedes renderizar miles de corales en una sola llamada de dibujo”, explica ITR. “Así que, tanto si tenemos cinco corales de un mismo tipo en pantalla como cinco mil, el renderizado es igual de rápido.”

Vida en las profundidades | Megapop | Kasedo Games
Corales dinámicos mediante Shader Graph
Cada coral contiene componentes del sistema electroquímico relacionados con la salud, el crecimiento de las algas y el estado de estrés. Mediante el atributo MaterialProperty de Entity Graphics, estos se cargan automáticamente en la GPU y controlan los parámetros de Shader Graph , produciendo cambios visibles como decoloración, coloración por estrés y propagación de algas sin necesidad de gestión manual de materiales. Shader Graph también abrió el trabajo a artistas que no escriben HLSL, permitiéndoles iterar directamente sobre los resultados visuales y ver el efecto de los cambios en tiempo real.
Depuración de código orientado a datos
Depurar un código fuente orientado a datos es una disciplina diferente a la de depurar proyectos estándar de Unity , y la experiencia de Megapop con Unity 6 refleja cuánto ha madurado la herramienta. “La versión 6.0 añadió la ventana de búsqueda, los marcadores del perfilador y el gráfico de renderizado, todos los cuales han resultado muy útiles para la optimización”, afirma ITR.
El equipo actualizó a Unity 6.3 antes del lanzamiento y observó que herramientas como la ventana de jerarquía de entidades y el depurador nativo se habían vuelto sustancialmente más estables en la última versión LTS compatible.
La jerarquía de entidades era esencial para inspeccionar el estado de las entidades en tiempo de ejecución, mientras que las características específicas de ECS de JetBrains Rider, incluida la capacidad de ver información de componentes para entidades específicas mientras se recorre el código paso a paso, hicieron que el depurador nativo fuera significativamente más útil. El sistema ECS Journaling ayudó a identificar qué sistema modificó un componente de forma inesperada y señaló las escrituras innecesarias durante la optimización.
Para los gráficos, se combinaron Frame Debugger y RenderDoc con el sistema de gráficos de renderizado de Unity 6 para rastrear con precisión dónde se estaban utilizando los recursos de la GPU.
Mejorar el rendimiento con Burst
Una partida guardada de 14 horas, enviada como informe de errores, contenía 15.000 entidades y más de 450 sistemas activos, y aun así funcionaba sin problemas a 60 fps. La simulación completa del ecosistema consume aproximadamente 0,5 ms de tiempo de CPU por fotograma en un escenario típico de juego avanzado, lo cual es importante porque el juego admite la aceleración del tiempo, que ejecuta la actualización fija varias veces por fotograma de renderizado.
La Burst es fundamental para alcanzar estas cifras: desactivarla hace que la simulación tarde más del triple por fotograma. “Para muchos sistemas, descubrimos que Burst era suficiente para optimizarlos”, explica ITR, “Jobs era más adecuado para partes específicas del código que se podían paralelizar y que iteraban sobre muchas entidades”.
En pruebas de estrés con una sola especie: 3.500 cangrejos a 60 fps en el ordenador personal de ocho años de ITR, y 7.000 cangrejos o 5.500 peces payaso a 50 fps en un portátil de trabajo de gama alta con interacciones activas entre los peces durante toda la reproducción. Las recolecciones y los asignadores nativos de DOTS también redujeron significativamente la asignación de basura por fotograma en comparación con los proyectos anteriores del equipo.
Aprender de la experiencia
Al combinar la biología marina auténtica con la ingeniería de sistemas complejos, Life Below se labra un espacio distintivo en el género de construcción de ciudades. El último lanzamiento de Megapop demuestra la escalabilidad de ECS para Unity al manejar juegos con mucha simulación, y revela beneficios estructurales que van mucho más allá del rendimiento puro. El equipo señala que el hecho de poder dividir los ensamblajes de forma clara en datos y lógica, por ejemplo, hizo que Life Below se compilara mucho más rápido que otros proyectos de tamaño similar.
Para los desarrolladores que estén considerando crear un juego con ECS para Unity, la experiencia del equipo es consistente: la curva de aprendizaje es real, pero la inversión vale la pena. Adam, que se desempeña como líder técnico en el próximo proyecto de Megapop, ya está planeando aprovechar ECS. "Cuando ya lo tienes configurado, es fácil seguir construyendo sobre él y ampliarlo", afirma.
Construye mejor con Unity.
Desarrollar juegos con gran componente de simulación que sean escalables. ECS para Unity te proporciona las herramientas de rendimiento y arquitectura necesarias para dar vida a mundos complejos y dinámicos.