A pilha multiplayer por trás do MMORPG Pantheon: Rise of the Fallen

Encontrar seu próprio caminho é o cerne da jogabilidade emPantheon: Ascensão dos Caídos – os jogadores podem ir a qualquer lugar, escalar qualquer coisa, forjar novas rotas e seguir sua curiosidade para encontrar aventura. Não é tão diferente de como seus criadores, Visionary Realms, abordam a construção deste MMORPG – eles estão fazendo isso do seu próprio jeito.
Transportando os jogadores para o mundo de fantasia de Terminus, Pantheon: Ascensão dos Caídos remete aos MMOs clássicos, onde a descoberta acidental vagando por um mundo aberto e as interações sociais com outros jogadores estão no coração da experiência do jogo.
Criar qualquer jogo multiplayer é um desafio – mas um jogo online altamente social nessa escala é uma busca épica. Sentamos com o programador principal Kyle Olsen sobre como a equipe está usando Unity para conectar jogadores neste mundo de fantasia MMORPG.
Então, o que torna Pantheon: Ascensão dos Caídos único em comparação com outros jogos MMO?
Definitivamente é o aspecto social.Você tem que experimentar o mundo e se mover por ele naturalmente.Pode ser um pouco mais cansativo de certa forma, mas eu acho que isso conecta você mais ao seu personagem, ao jogo e ao mundo, em vez de apenas se teletransportar para qualquer lugar e entrar em sistemas LFG ou ser colocado em uma masmorra. Você aprende melhor a terra, tem que navegar e usa seus olhos mais do que apenas saltar como uma bola de fliperama de objetivo em objetivo, seguindo marcadores de missão e coisas assim. É mais um jogo de pensamento.
Como você está gerenciando a sincronização entre a experiência do jogador e instâncias específicas do mundo?
Temos nossa própria biblioteca de rede que construímos para a camada de transporte de soquete chamada ViNL. Esse é o pão com manteiga para todas as comunicações de zona, entre zonas e jogador para zona. Servidor SQL no back-end, coisas meio padrão lá. Mas a maioria dos transportes é gerenciada pela nossa própria biblioteca de rede.

Como você aborda o carregamento de ativos para este mundo gigante?
Temos uma etapa onde transformamos nossos continentes em azulejos, e temos diferentes backends que podemos conectar a isso. Temos um que apenas gera Prefabs padrão, e temos um que gera subcenas que estávamos usando antes do Unity 6, e então temos cenas Unity completas que você pode carregar aditivamente, então você pode escolher como deseja exportar seu conteúdo. Antes do Unity 6, tínhamos nos afastado dos Prefabs e começamos a carregar as subcenas DOTS e usar isso, construído em BRG.
Também temos uma saída que pode renderizar diretamente para nosso próprio grupo de renderização em lote personalizado, apenas usando objetos scriptáveis e gerenciando nossos próprios dados. Então, conseguimos experimentar e testar os diferentes, e ver o que oferece o melhor desempenho do cliente. Antes do Unity 6, estávamos exportando e renderizando todo o continente com subcenas, mas com o Unity 6, na verdade, voltamos a usar Prefabs com Instantiate Async e Addressables para gerenciar tudo.
Estamos usando o Drawer Residencial e oclusão de GPU, que acabou gerando um desempenho ainda melhor do que subcenas e nosso próprio grupo de renderização em lote – suponho que porque a oclusão de GPU simplesmente não é suportada por alguns dos outros caminhos de renderização no momento. Então, pulamos bastante, e chegamos ao Addressables para gerenciar toda a memória e carregamento de ativos, e o uso regular de Prefabs Instantiate com o Drawer Residencial de GPU parece ser o melhor desempenho do lado do cliente no momento.
Você atualizou para o Unity 6 para aproveitar o Drawer Residencial de GPU, especificamente?
Na verdade, eu realmente queria isso para a oclusão. Eu não estava ciente de que apenas certos caminhos de renderização faziam uso da oclusão, então estávamos tentando usá-lo com a mesma renderização de subcena que estávamos usando antes do Unity 6 e percebendo que nada estava realmente sendo ocultado. Então, optamos por voltar à saída de Prefab para ver como isso ficava com o Drawer Residencial, e a oclusão e FPS aumentaram.
Tivemos alguns problemas inicialmente, porque o Instantiate Async não estava disponível antes do Unity 6, então tivemos algumas paradas quando instanciávamos nossos azulejos. Havia muitas coisas sendo instanciadas, mas ao mudar para Instantiate Async depois de corrigirmos alguns bugs, eliminamos a parada no carregamento e a taxa de quadros geral foi maior após o carregamento, então foi uma vitória.
Houve ganhos de produtividade realmente notáveis que vieram com a mudança para o Unity 6?
Tudo que falei até agora foi voltado para o cliente, então nossos jogadores experimentaram essas vitórias. Para o lado do desenvolvedor, a estabilidade e o desempenho do Editor aumentaram bastante. A estabilidade do Editor no Unity 6 aumentou bastante - é muito raro realmente travar agora. Isso por si só foi, pelo menos do lado da codificação, uma grande vitória. Com certeza parece mais estável em sua totalidade.
Como você lida com mudanças e atualizações sem quebrar tudo?
Construímos com Addressables usando os rótulos de forma muito intensa, e fazemos a embalagem Addressable por rótulos. Então, se editarmos uma zona específica ou um ativo em uma zona, ou como um VFX associado a um feitiço ou algo assim, apenas aqueles pacotes que tocam aquele rótulo são atualizados.
E então, nosso próprio sistema de entrega de conteúdo, temos o jogo disponível no Steam e nosso próprio patcher, e ambos lidam com as mudanças delta, onde estamos apenas entregando pequenas atualizações através desses pacotes Addressable. O netcode requer que a mesma versão esteja conectada em primeiro lugar, então o lado da biblioteca de rede disso é automaticamente tratado no processo de handshake.

Que orientação você daria a alguém que está tentando enfrentar um jogo MMO ou outro projeto multiplayer ambicioso?
Você meio que começa pequeno, eu acho. É um processo passo a passo. Se você é uma equipe pequena, você começa pequeno. É um processo passo a passo. Se você é uma equipe pequena, não pode assumir muito. Seria completamente esmagador - mas isso é verdade para qualquer jogo de maior escala, não apenas um MMO.
Provavelmente a seleção de tecnologia - fazer escolhas inteligentes desde o início e manter-se a elas. Vai ser muita tecnologia de middleware e backend que você vai ter que controlar e fazer funcionar bem juntos, e trocar para a coisa mais nova e legal o tempo todo não vai ser bom.
Qual é a conquista técnica mais empolgante para sua equipe com este jogo?
Acho que não há muitos MMOs de mundo aberto, ponto, que foram realizados no Unity. Não temos uma equipe enorme, e estamos fazendo um jogo que é genuinamente massivo, então temos que focar em pequenas áreas isoladas, desenvolvê-las o melhor que pudermos e depois seguir em frente e obter feedback.
O pacote inteiro é um terreno bastante novo - quando há um MMO, ele precisa parecer um MMO em espírito, com muitas pessoas ao redor, fazendo suas próprias coisas. E conseguimos isso - acho que melhor do que praticamente qualquer MMO Unity já fez. Acho que podemos nos dar um tapinha nas costas por isso.
Obtenha mais insights dos desenvolvedores na Página de Recursos da Unity e aqui no blog. Confira Pantheon: Rise of the Fallen em Acesso Antecipado no Steam.
