Como a Megapop construiu a vida abaixo do oceano vivo com o Sistema de Componentes de Entidade

Jun 22, 2026|7 Min
Key art for Life Below por Megapop / Kasedo Games. Made with Unity. Uma imagem dramática de um ambiente de recife de coral cheio de peixes. Uma criatura semelhante a uma médula preside sobre a cena.

Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

Aprenda como a Megapop construiu seu urbanista subaquático densa e orgânica, aproveitando o desempenho e a escalabilidade do Sistema de Componentes de Entidade (ECS).

O DESAFIO:

Simulação de dezenas de milhares de criaturas marinhas em interação, um agendador de tarefas de IA personalizado e coral dinâmico – tudo sem bloquear a CPU

PLATFORMS:

PC (Vapor)

LOCALIZAÇÃO:

Oslo, Noruega

TAMANHO DA EQUIPE:

14 funcionários em tempo integral, 3 freelancers

Como um jogo como Life Below consegue simular um ecossistema oceânico denso e vivo sem derreter o PC do jogador?

O novo “reptil-builder” da Megapop encarrega os jogadores de restaurar um ambiente oceânico moribundo. Em vez de colocar edifícios de concreto em uma rede, os jogadores agem como a própria natureza, cultivando coral de forma orgânica e gerenciando o fraco ecossistema para atrair mais de 55 espécies do mundo real de vida marinha, desde peixes de palhaços e caranguejos até golfinhos e utras marinhas.

Para alcançar a estética e a jogabilidade vibrantes da Life Below, foi necessário um compromisso total com o design orientado para os dados. Ao tratar esta rede de peixes, animais selvagens e trabalhadores NPC como dados puros – números na memória contínua em vez de GameObjects complexos – a equipe resolveu desafios complexos em torno de comportamentos de boid, renderização de escala, áudio espacial e simulação de ecossistemas, para entregar uma experiência de desempenho no PC.

YouTube video

Os resultados:

  • Escolas simuladas de até 250.000 peixes do mesmo tipo durante testes de estresse precoce
  • Mantém 60 FPS em um RTX 3060 com milhares de criaturas ativas no final do jogo
  • Suporta mais de 1.300 animais interagindo a 30 FPS em máquinas de nível inferior
  • Obteve uma classificação de aprovação de 97,2% de testadores beta profissionais
  • Gerencia mais de 15.000 entidades e 450 sistemas em um salvamento de 14 horas no final do jogo – e funciona sem problemas
  • Menção Honrosa na subvenção Unity for Humanity 2025
YouTube video

Compromisso com a abordagem orientada para os dados

Megapop tomou a decisão de construir Life Below inteiramente em ECS durante a pré-produção. “O ECS nos permite estruturar o jogo como muitos sistemas pequenos que trabalham juntos, em vez de confiar em grandes hierarquias de classes”, diz Jørgen Tharaldsen, fundador e CEO do estúdio. “Isso facilita a construção de simulações complexas, compondo comportamentos a partir de peças menores.”

A transição de um paradigma de desenvolvimento orientado a objetos para orientado a dados foi uma mudança importante para a equipe Megapop. Para combater a lacuna de conhecimento, a ITR – líder tecnológica em Life Below e defensora inicial do ECS no projeto – utilizou uma variedade de recursos, desde a documentação ECS oficial da Unity e as amostras do ECS, até conselhos do mundo real da comunidade Unity Discord e do YouTube. “O Hot Path Show organizado pela Turbo Makes Games também foi particularmente útil para mais informações de nicho sobre DOTS e ECS”, diz a ITR.

Quando o programador Simen Wiig se juntou à Megapop cerca de 18 meses antes do lançamento de Life Below, aprender ECS foi incorporado ao seu onboarding. “O principal era envolver minha cabeça em torno do pensamento orientado a dados em vez da maneira habitual de pensar orientado a objetos”, ele diz. “Uma vez que eu consegui isso, eu realmente gostei de como ter componentes e entidades me ajudou a estruturar meu código melhor.”

O ITR identifica o princípio que fez a maior diferença para o onboarding do ECS: “Compromete-se com a abordagem orientada a dados em vez de tentar misturar muitas arquiteturas diferentes. Manter os sistemas pequenos e focados torna o projeto mais fácil de escalar à medida que novos recursos são adicionados.”

Título original: Life Below by Megapop / Kasedo Games. Made with Unity. Uma vista isométrica de um ambiente de coral denso.

Life Below | Megapop | Kasedo Games

Criando um agendador de tarefas para NPCs

Em Life Below, os jogadores não dão ordens diretas aos seus trabalhadores do NPC – uma equipe de espiões de água que mantêm o recife. Em vez disso, o jogador define metas (coloca um coral aqui, colhe esses recursos) e um agendador de tarefas personalizado atribui automaticamente o trabalhador ideal para cada tarefa.

O agendador funciona dentro de um sistema compilado pelo Burst e funciona em três etapas: primeiro, ele usa o ECS para coletar informações amplas sobre disponibilidade de trabalhadores, localizações de recursos e tarefas pendentes; em seguida, um algoritmo seleciona tarefas de alta prioridade, mantendo a distribuição entre tipos de tarefas equilibrada; Finalmente, ele recupera informações detalhadas usando o ECS para encontrar o melhor trabalhador e planejar cada passo. “Usamos programação hierárquica de funções para garantir que seja fácil adicionar novas tarefas, ao mesmo tempo em que o jogo não entra em um estado corrompido”, explica a ITR.

Cerca de 100 trabalhadores operam simultaneamente no pico de jogo tardio. O sistema é single-threaded – não por uma limitação técnica, mas porque cada atribuição de tarefa depende do resultado do anterior. “É semelhante ao agendador de tarefas de um sistema operacional”, diz a ITR, “exceto que sabemos aproximadamente quanto tempo uma tarefa levará antes de agendá-la, em vez de depois.”

Uma captura de tela de perto de Life Below por Megapop/Kasedo Games. Um operário azul flutua entre uma selva de corais multicolores.

Life Below | Megapop | Kasedo Games

Simulação de comportamentos complexos de boid

Muitos jogos implementam o comportamento de flocking usando soluções simples de GPU ou Burst. Para Life Below, Megapop precisava de espécies para caçar, fugir e interagir de forma dinâmica – inclusive em encontros de perto com o jogador.

“Para simulações simples de boid, é fácil obter algo em execução usando cálculos Burst ou GPU”, diz Jørgen. “Mas queriamos um comportamento mais complexo onde diferentes espécies interagem, e até onde você interage com a vida selvagem em vistas de câmera de perto.”

Usando o Job System, a equipe separou partes paralelizáveis da lógica do boid – atualizações básicas de posição e cálculos de separação – de interações complexas de ramificação, como a perseguição de predadores. Nem todas as espécies são igualmente exigentes em relação ao desempenho: os alimentadores de fundo, como os caranguejos, são relativamente baratos para simular, enquanto predadores, como os leões, avaliam múltiplas condições em cada quadro para caçar, perseguir e atacar outras espécies.

Gestão de áudio espacial em escala

Obter audio espacial dinâmico trabalhando ao lado de milhares de entidades ativas foi um dos desafios mais difíceis do projeto. A solução, desenvolvida pelo programador Fingar Bøen, era agrupar criaturas próximas em aglomerados e conduzir áudio a partir do comportamento do grupo, em vez de peixes individuais.

"Fatores como espécie, tamanho do grupo, movimento e timing ajudam a determinar quando os sons devem ser tocados", explica Fingar. "Isso nos permite representar milhares de criaturas, mantendo o cenário sonoro natural e o custo da CPU gerenciável."

ECS Jobs e Burst lidam com a fase de coleta de dados – coletando posições de entidades e agrupando-as eficientemente em paralelo – enquanto o código gerenciado que desencadeia eventos de áudio é mantido no mínimo possível. A equipe também está trabalhando para trocar IDs de evento FMOD baseados em string para GUIDs, o que reduzirá a atribuição de lixo e tornará mais do canal de áudio Burstable.

Rendendo um recife vivo

Visualizar milhares de entidades requer um pipeline de renderização altamente otimizado. Megapop usa Texturas de Animação Vertex (IVA) para movimentos complexos de animais, como ciclos de natação, e animações de procedimentos para peixes menores. O ambiente também responde à saúde do ecossistema: os corais exibem dinamicamente o crescimento de algas, estresse e estados de dano com base em parâmetros passados diretamente do ECS.

Entities Graphics e instâncias da GPU

A equipe usou a instância de GPU desde o início do desenvolvimento, inicialmente através de chamadas de API de gráficos personalizadas antes de migrar para o pacote de gráficos oficial da Unity. O switch não foi impulsionado por um aumento de desempenho – ambas as abordagens são construídas sobre a mesma tecnologia subjacente – mas o Entities Graphics tornou o sistema muito mais fácil de trabalhar e melhorou significativamente a integração do ECS. “Foi muito mais fácil de operar e fez com que funcionasse muito melhor com o ECS”, diz Adam Hove, artista técnico e programador da Megapop.

Entities Graphics suporta componentes ECS personalizados que carregam automaticamente seus dados para a GPU como valores por entidade para cada quadro – mas apenas quando esses valores realmente mudaram. Isso significa que centenas de entidades estáveis não estão recarregando dados de tampão desnecessariamente. A própria instância GPU garante que ter centenas de coral e decorações de dispersão na tela não multiplique chamadas de desenho: “Com a instância GPU, você pode renderizar milhares de coral em uma única chamada de desenho”, explica a ITR. "Então, se tivermos cinco coralhas de um único tipo na tela, ou cinco mil delas, ela é tão rápida."

Imagem do jogo Life Below da Megapop/Kasedo Games. Um ambiente de coral de cor de ferrugem visto de uma perspectiva isométrica. Parece quase uma cena em Marte.

Life Below | Megapop | Kasedo Games

Corais dinâmicos via Shader Graph

Cada entidade de coral possui componentes ECS para saúde, crescimento de algas e estresse. Usando o atributo MaterialProperty da Entity Graphics, estes carregam automaticamente para a GPU e impulsionam os parâmetros Shader Graph – produzindo mudanças visíveis como branqueamento, coloração por tensão e propagação de algas sem qualquer gestão manual do material. Shader Graph também abriu o trabalho para artistas que não escrevem HLSL, permitindo-lhes iterar diretamente sobre resultados visuais e ver o efeito das mudanças em tempo real.

Debugging de código orientado a dados

A depuração de uma base de código orientada a dados é uma disciplina diferente da depuração de projetos Unity padrão, e a experiência da Megapop com Unity 6 reflete o quanto a ferramenta amadureceu. “6.0 adicionou a janela de pesquisa, marcadores de perfil e gráficos de renderização, todos os quais foram muito úteis para a otimização”, diz a ITR.

A equipe upgradou para Unity 6.3 antes do lançamento, e observou que ferramentas como a janela Entidades Hierarquia e o depurador nativo tornaram-se substancialmente mais estáveis no mais recente LTS suportado.

A Hierarquia de Entidades foi essencial para inspeccionar o estado das entidades no tempo de execução, enquanto as características específicas do ECS do JetBrains Rider – incluindo a capacidade de ver informações de componentes para entidades específicas ao passar pelo código – tornaram o depurador nativo significativamente mais útil. O ECS Journaling ajudou a identificar quais sistemas mudaram um componente inesperadamente e marcaram inscrições desnecessárias durante a otimização.

Para gráficos, o Frame Debugger e o RenderDoc foram combinados com o sistema gráfico de renderização da Unity 6 para rastrear exatamente onde os recursos da GPU estavam sendo tocados.

Melhorar o desempenho com Burst

Um salvamento de jogador de 14 horas enviado como um relatório de bug contém 15.000 entidades e mais de 450 sistemas ativos – e ainda correu sem problemas a 60 FPS. A simulação do ecossistema completo atinge aproximadamente 0,5 ms de tempo de CPU por quadro em um cenário típico de final de jogo, o que importa porque o jogo suporta aceleração de tempo que executa a atualização fixa várias vezes por quadro de renderização.

Burst é fundamental para atingir esses números: desativá-lo faz com que a simulação demore mais de três vezes mais por quadro. “Para muitos sistemas, descobrimos que o Burst foi suficiente para otimizá-lo”, explica a ITR, “Jobs foi mais adequado para partes específicas do código paralelizáveis que iteravam em muitas entidades.”

Em testes de estresse de espécie única: 3.500 caranguejos a 60 FPS no computador pessoal de oito anos da ITR, e 7.000 caranguejos ou 5.500 peixes de palhaço a 50 FPS em um laptop de trabalho de alta qualidade com interações ativas ao longo do tempo. As coleções e atribuidores nativos do DOTS também reduziram significativamente a atribuição de lixo por quadro em comparação com projetos anteriores da equipe.

Aprender com a experiência

Ao misturar biologia marinha autêntica com engenharia de sistemas complexos, a Life Below desenha um espaço distinto no gênero de urbanistas. O mais recente lançamento da Megapop demonstra a escalabilidade do ECS para Unity ao lidar com jogos pesados em simulação – e revela benefícios estruturais que vão muito além do desempenho puro. A equipe observa que ter a capacidade de dividir conjuntos limpo em dados e lógica, por exemplo, significou compilar Life Below muito mais rápido do que outros projetos de tamanho similar.

Para os desenvolvedores que consideram criar um jogo com o ECS for Unity, a experiência da equipe é consistente: a curva de aprendizado é real, mas o investimento se paga. Adam, que está servindo como líder tecnológico no próximo projeto da Megapop, já está planejando alavancar o ECS. "Quando você já tem isso configurado, é fácil construir e expandir", diz ele.

Construa melhor com Unity

Desenvolver jogos pesados de simulação que a escala. O ECS for Unity fornece-lhe as ferramentas de desempenho e arquitetura para dar vida a mundos complexos e vivos.

Experimente Unity agora