O blog da AWS

Compilação de servidores dedicados do Unreal Engine 4 para instâncias do AWS Graviton EC2

 

A Epic Games é uma empresa líder em entretenimento interativo responsável por alguns dos maiores jogos do mundo, incluindo Fortnite, e também desenvolve o Unreal Engine, o Unreal Engine é uma ferramenta de criação 3D aberta e avançada líder mundial em tempo real. Em constante evolução, ele não apenas alimenta os principais jogos do mundo, mas também oferece aos criadores de todos os setores a liberdade e o controle para fornecer conteúdo de ponta, experiências interativas e mundos virtuais imersivos.

Para ajudar desenvolvedores de todas as formas e tamanhos a criar, executar e desenvolver jogos incríveis, a Epic Games e a AWS colaboraram para reforçar o suporte de instâncias do AWS Graviton2 para o Unreal Engine. Os processadores AWS Graviton são personalizados pela AWS usando núcleos Arm Neoverse de 64 bits para oferecer a melhor relação preço/desempenho para suas cargas de trabalho de nuvem executadas no Amazon EC2. Com o suporte do AWS Graviton2, os criadores do Unreal Engine podem utilizar um desempenho de preço até 40% melhor em relação às instâncias comparáveis baseadas em x86 da geração atual.

O suporte completo para o AWS Graviton2 será lançado no Unreal Engine 4.27, com mais melhorias em versões futuras. As prévias do Unreal Engine 4.27 estão disponíveis no iniciador da Epic Games e no GitHub. O suporte ARM64 também está se fundindo em versões anteriores do Unreal Engine para beneficiar os desenvolvedores que executam jogos e aplicativos na AWS.

Se o seu jogo se tornar um sucesso estrondoso da noite para o dia, o sucesso contínuo depende de servidores confiáveis capazes de escalar de acordo com as demandas dos jogadores. A flexibilidade é essencial, e a AWS oferece a mais ampla e profunda plataforma de computação baseada em nuvem, independentemente de você mesmo querer criar servidores de jogos, integrar-se a ferramentas existentes ou até mesmo migrar para um serviço totalmente gerenciado.

A introdução das instâncias do AWS EC2 Graviton2 oferece ainda mais opções para hospedar seus servidores de jogos dedicados no Amazon EC2, proporcionando um grande salto em desempenho e recursos em relação aos processadores AWS Graviton de primeira geração. Recompilar seu código de servidor de jogo dedicado para compatibilidade com ARM64 é simples e fácil com o Unreal Engine 4 (UE4). Saiba como criar um servidor de jogo dedicado com instâncias do Unreal Engine e do AWS Graviton2 seguindo o guia passo a passo abaixo:

 

Pré-requisitos

  • Uma estação de trabalho Windows 10 com uma GPU dedicada
  • Visual Studio

 

Configuração do ambiente de desenvolvimento

Esta seção orienta você na obtenção de um servidor dedicado do Unreal Engine 4 compilado para a plataforma Arm e compatível para ser executado em uma instância do AWS Graviton2. A maioria das instruções a seguir é independente das plataformas x86 e Arm. Este guia se concentra na criação de um ambiente limpo e funcional no Windows antes de criar o jogo para instâncias do AWS Graviton2.

Obtenha acesso ao código-fonte do Unreal Engine

Para compilar servidores de jogos dedicados do Unreal Engine, você deve ter o Unreal Engine construído a partir do código-fonte. Para obter acesso ao código-fonte UE4, conclua as etapas descritas aqui e retorne a este guia.

Instalar o Visual Studio Community Edition

Para criar o Unreal Engine a partir da fonte, recomendo baixar o Visual Studio 2019 Community Edition. Você pode baixar o Visual Studio 2019 Community Edition gratuitamente aqui. Quando o download estiver concluído, prossiga para a instalação.

Para criar o editor do Unreal Engine e os projetos do Unreal Engine, você deve instalar alguns recursos opcionais. Navegue na guia Cargas de trabalho, selecione “Desenvolvimento de jogos com C++” e selecione as seguintes opções no lado direito:

  • Ferramentas de criação de perfil C++
  • Desinfetante de endereços C++
  • SDK do Windows 10 (10.0.18362.0)
  • Instalador do Unreal Engine

Visual Studio Community Edition installer

Selecione a guia Componentes individuais e, em seguida, role para baixo até “Compiladores, ferramentas de compilação e tempos de execução” e selecione MSBuild.

Visual Studio Community Edition installer

Agora você está pronto para instalar o Visual Studio 2019. Clique em Instalar e aguarde tempo para concluir.

 

Baixar código-fonte do Unreal Engine

Faça login no GitHub, navegue até o repositório GitHub do Unreal Engine e baixe a versão 4.26.2 ou mais recente. Embora o suporte oficial esteja sendo lançado como parte do 4.27, as alterações já foram mescladas na 4.26.2 e versões posteriores. Estou usando o 4.26.2 para este guia.

 

 

Unreal Engine GitHub Repository

Instalar dependências de compilação cruzada

Para que o Unreal Engine compile binários para distribuições Linux quando executado no Windows, você precisa instalar o Cross-Compiling Toolchain. Para fazer isso, navegue até a página de documentação do Cross-Compiling for Linux Unreal Engine. Baixe e instale o conjunto de ferramentas v17.

 

Cross-Compiling or Linux - Unreal Engine Documentation Page

Compilar o Unreal Engine da fonte

Extraia o arquivo zip do código-fonte Unreal Engine. Coloquei a pasta extraída em “C:\Users\Administrator\Documents\UnrealEngine”.

Abra uma sessão do Windows PowerShell como administrador:

 

Windows Powershell

Navegue até C:\Users\Administrator\Documents\UnrealEngine\

Administrator: Windows PowerShell

Execute o Setup.bat e aguarde a conclusão.

Administrator: Windows PowerShell

Execute o script GenerateProjectFiles.bat

Adminsitrator: Windows PowerShell

Em C:\Users\Administrator\Documents\UnrealEngine, agora deve haver um arquivo chamado UE4.sln. Abra-o no Visual Studio 2019.

Documents - Unreal Engine Folder

Se a instalação do Visual Studio 2019 recomendar a instalação de componentes adicionais, instale-os agora. Quando a instalação estiver concluída, defina a configuração da solução como “Editor de Desenvolvimento” e a plataforma da solução como “Win64”.

Visual Studio 2019

No Solution Explorer na coluna da direita, clique com o botão direito do mouse no destino de compilação UE4 e selecione “Build”.

Visual Studio 2019 - Solution Explorer

O Unreal Engine levará um pouco de tempo, então pegue uma xícara de sua bebida favorita e volte assim que a compilação for concluída.

 

Abra o Unreal Engine

Navegue até C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\Win64 e inicie o UE4Editor.exe

 

Open Unreal Engine

Exemplo de configuração de projeto de jogo em terceira pessoa

No Unreal Project Browser, crie um novo projeto de jogos.

Unreal Project Browser

Em Selecionar modelo, selecione “Terceira pessoa” e clique em Avançar.

 

Unreal Engine Template

Em Configurações do projeto, certifique-se de que “Projeto C++” esteja selecionado, nomeie seu projeto GravitonServer e selecione Criar projeto.

 

Unreal Engine Project Settings

O projeto agora deve abrir automaticamente no Visual Studio. No entanto, para criar um servidor dedicado, você deve fazer algumas alterações no arquivo e, em seguida, gerar novamente o arquivo de projeto do Visual Studio. Feche a janela do Visual Studio e faça as seguintes alterações.

 

Criar destino de compilação de servidor dedicado

Para criar um servidor dedicado para o seu jogo, você deve criar um destino de compilação de servidor dedicado. Para fazer isso, você copiará o arquivo de destino do editor e o transformará em um arquivo de destino do servidor dedicado.

Abra o Windows Explorer e navegue até C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Source.

Copie o arquivo GravitonServerEditor.Target.cs e nomeie o novo GravitonServerServer.Target.cs

 

Windows Explorer Target File

Windows Explorer Target File

Abra GravitonServerServer.target.cs no Visual Studio

Visual Studio

Substitua as duas instâncias do GravitonServerEditorTarget por GravitonServerServerTarget. Altere Tipo = TargetType.editor para Tipo = TargetType.SERVER.  Seu arquivo final deve se parecer com a seguinte imagem:

Visual Studio

Agora, gere novamente os arquivos de projeto do Unreal Engine para que o Unreal Engine reconheça o novo destino de compilação do servidor. Para fazer isso, navegue até “C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer”, clique com o botão direito do mouse em GravitonServer.uProject e clique em “Gerar arquivos de projeto do Visual Studio”.

 

 

Windows Explorer

Depois que os arquivos forem gerados, clique duas vezes em “GravitonServer.sln” para abrir o projeto do Visual Studio. Depois que o projeto for carregado, você precisará fazer alterações nas configurações do editor para configurar uma compilação de servidor dedicado.

Na caixa suspensa “Configuração da solução”, alterne para “Servidor de desenvolvimento”.

 

Visual Studio Solution Configuration dropdown

Agora você pode criar o projeto de servidor dedicado. Basta clicar com o botão direito do mouse no nome do projeto GravitonServer à direita e selecionar “Construir”.

 

Visual Studio GravitonServer project name

Antes que você possa fazer ajustes em seu jogo e empacotar nosso projeto, recompile seu destino de compilação do editor. Para fazer isso, basta alterar o menu suspenso “Configuração da solução” para “Editor de desenvolvimento”.

 

Visual Studio Development Editor

Agora construa sua meta de editor de desenvolvimento clicando com o botão direito do mouse no nome do projeto e clicando em “Construir” mais uma vez.

Em seguida, abra seu projeto no editor do Unreal Engine e empacote este jogo para entrega. Para fazer isso, clique duas vezes no arquivo “GravitonServer.uProject” no Windows Explorer:

 

GravitonServer.uproject

Como você está usando o projeto de exemplo de terceira pessoa padrão, o projeto GravitonServer deve se parecer com a imagem abaixo depois de ser carregado com sucesso:

Unreal Engine Editor

 

Adicionar mapa de inicialização

Adicione um novo mapa ao seu projeto. Isso será o que o usuário verá quando carregar o jogo. Para manter este tutorial simples, o novo mapa será apenas uma tela preta. Comece clicando duas vezes na pasta “Mapas”:

Unreal Editor Map

Clique com o botão direito do mouse e selecione “Novo nível” e, em seguida, nomeie o novo arquivo como “EntryLevel”.

Agora abra seu novo nível. Clique duas vezes em “EntryLevel” e selecione “Salvar selecionados” quando solicitado.

 

Definir as configurações do mapa

Agora, configure qual mapa o cliente e o servidor dedicado carregarão por padrão. Para este tutorial, o cliente carregará EntryLevel por padrão, e o servidor dedicado carregará ThirdPersonExampleMap por padrão. Para fazer isso, abra as Configurações do projeto acessando Editar Configurações do projeto.

 

 

Unreal Editor

Em seguida, selecione “Mapas e modos” e expanda o menu Configurações avançadas e altere “Modo de jogo de servidor padrão global” para “GravitonServerGameMode”.

Agora altere os mapas padrão que são carregados pelo servidor dedicado e pelo cliente do jogo. Expanda a seção de mapas padrão. Altere o “Game Default Map” para “EntryLevel” e “Server Default Map” para “ThirdPersonExampleMap”:

 

 

Unreal Editor default maps

Em seguida, altere as configurações de empacotamento para empacotar mapas com o jogo quando ele for construído e empacotado para implantação. Para fazer isso, clique na opção “Embalagem” no menu à esquerda e expanda-a clicando na seta suspensa.

Unreal Editor Packaging

Agora adicione seus mapas ao pacote de compilação. Role para baixo até “Lista de mapas a serem incluídos em uma compilação empacotada”, clique no botão “+” e duas novas linhas aparecerão abaixo.

Clique nos três pontos ao lado da caixa para adicionar seus mapas e uma janela do explorador de arquivos deve abrir. Navegue até “C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Content\ ThirdPersonCPP\ Maps” e selecione o arquivo “ThirdPersonExampleMap.umap”. Repita isso para o arquivo “EntryLevel.umap”. Quando concluído, a tela de configurações do projeto deve se parecer com a seguinte imagem:

 

 

Unreal Editor build package

Para este tutorial, use a função de console do jogo para se conectar ao servidor dedicado do jogo.

Nota: Em um jogo de produção, isso geralmente seria tratado por uma lógica de combinação personalizada, mas isso excede o escopo deste tutorial.

Para usar o console do jogo para se conectar ao servidor dedicado, em Configurações de empacotamento, role para baixo até a seção “Projeto” e verifique se “Configuração de compilação” está definido como “Desenvolvimento”.

 

Unreal Editor Project Section

Você pode criar e empacotar seu jogo! Crie primeiro o cliente do jogo e, em seguida, os binários do servidor dedicado. Para verificar se o servidor funciona corretamente, primeiro crie e empacote o jogo para Windows e execute-o no host local para garantir que o cliente possa se conectar corretamente. Depois de saber que o jogo está funcionando, você o compilará e empacotará para instâncias do AWS Graviton.

 

Construindo e empacotando o jogo e o servidor de jogos dedicado

O primeiro passo para construir e empacotar o jogo é garantir que o alvo de construção correto seja selecionado. Crie o jogo primeiro. Para verificar se o destino de construção correto está selecionado, vá para Arquivo Projeto de pacote Construir destino e verifique se “GravitonServer” está selecionado.

 

Unreal Editor Build Target

Para criar o jogo, selecione Arquivo Projeto de pacote Windows (64 bits). Uma janela do Windows Explorer será aberta, na qual você poderá selecionar onde os binários serão salvos depois de criados e empacotados.

Eu selecionei “C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries”.  Coloque-os onde quiser armazená-los. Depois de decidir onde, clique em “Selecionar pasta” e o processo de criação começará.

No Unreal Editor, selecionar “Mostrar log de saída” permitirá que você monitore o processo de compilação. Isso pode levar algum tempo, então agora é uma boa hora para tomar outra xícara de sua bebida favorita. Depois que o binário do jogo for construído e empacotado, você poderá compilar e empacotar o binário do servidor dedicado. Para fazer isso, altere o destino da compilação para “GravitonServerServer” indo para Arquivo Projeto de pacote Construir destino e selecionando “GravitonServerServer”.

 

Unreal Editor

Selecione Arquivo Projeto de pacote Windows (64 bits) mais uma vez. Selecione o local para salvar seus binários de servidor dedicado criados e empacotados e aguarde a conclusão da compilação. Depois que a compilação for concluída, você iniciará o servidor dedicado e conectará o cliente a ele.

 

Executando servidores de jogos dedicados no Windows

Para iniciar o processo do servidor dedicado para verificar se tudo está funcionando corretamente, inicie o processo do servidor dedicado com o registro em log habilitado. Abra o Powershell e altere os diretórios para onde quer que você tenha armazenado os binários do servidor dedicado. Eu usei “C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries\ WindowsServer”

 

Powershell

Para iniciar o servidor, digite. \ GravitonServerServer.exe -log que deve iniciar o servidor dedicado com o registro ativado. Uma nova janela deve ser aberta contendo os logs do servidor. Isso exibirá a porta em que o servidor está escutando. No meu caso, é a porta 7777, conforme mostrado nos logs do servidor aqui:

Conecte-se ao servidor de jogo dedicado em execução no Localhost

Agora vamos verificar se seu jogo pode se conectar ao seu servidor dedicado em execução no Localhost. Para iniciar o jogo, abra o Windows Explorer e navegue até “C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries\ WindowsNoEditor” e clique duas vezes em “GravitonServer.exe” para começar.

O jogo deve abrir em uma tela preta no Unreal Editor, que é o mapa EntryLevel que você criou anteriormente. Depois que o jogo for aberto, abra o console do jogo pressionando a tecla `no teclado. Para se conectar ao servidor, digite “Open “127.0.0. 1:7777” e pressione enter:

 

 

in-game console

Se o jogo não se conectar imediatamente, o processo do servidor dedicado pode ter entrado em repouso. Basta parar e reiniciar o processo do servidor em execução no PowerShell e tentar se conectar novamente. Depois que o jogo se conectar, você verá a experiência no jogo no Unreal Editor.

Unreal Editor in-game experience

Criação e empacotamento de servidores de jogos dedicados para instâncias do AWS Graviton2

Agora que você verificou que o jogo e o servidor dedicado estão funcionando corretamente, agora você pode criar e empacotar seu servidor dedicado para instâncias do EC2 habilitadas pelo AWS Graviton2. Volte para o editor do Unreal Engine. Selecione Arquivo Projeto de pacote Linux Linux (AArch64):

 

Uma janela do Windows Explorer será aberta, permitindo que você selecione onde os binários serão salvos assim que forem criados e empacotados. Eu selecionei “C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries”. Coloque-os onde quiser armazená-los. Clique em “Selecionar pasta” e o processo de criação começará. Depois que a compilação for concluída, você verá uma pasta intitulada “LinuxAArch64Server” onde quer que você escolha salvar seus binários.

Para copiar mais facilmente para sua instância do EC2 com tecnologia AWS Graviton2, crie um arquivo zip de toda a pasta que você copiará para sua instância do EC2 do AWS Graviton2.

 

Configuração de servidor de jogo dedicado

Execute a instância do EC2 do AWS Graviton2

Para o servidor dedicado, usarei uma instância m6g.large do EC2 executando o Amazon Linux 2. Sinta-se à vontade para usar qualquer tamanho de instância m6g, mas uma instância m6g.large deve ser grande o suficiente. Acesse o console da AWS e inicie sua própria instância de desenvolvimento. Ao executar instâncias do Graviton2, você precisará especificar uma AMI compatível com Arm.

Ao iniciar essa instância, verifique se a configuração do security group permite que a máquina de desenvolvimento do Windows se comunique com o servidor dedicado na porta UDP 7777 e na porta TCP 22. Usaremos a porta 7777 para tráfego de jogo e a porta 22 para SSH.

Quando a instância estiver em execução, copie o binário do Windows para a instância do AWS Graviton2 usando suas ferramentas preferidas.

Execute o script de inicialização do servidor de jogos

Depois que o arquivo zip contendo o binário do servidor dedicado for copiado para sua instância, a configuração levará mais algumas etapas. Primeiro, descompacte o arquivo. Navegue até o diretório em que você armazenou o arquivo e execute “unzip. Arquivo /LinuxAArch64Server.zip”.

 

Depois que o arquivo for descompactado, você deverá ver um novo diretório. Navegue até o diretório recém-criado executando cd LinuxAArch64Server/ O novo diretório deve se parecer com a seguinte imagem:

Para executar o servidor dedicado, adicione permissões de execução ao script GravitonServerServer-AArch64.sh do script do shell de inicialização. Para fazer isso, execute chmod +x GravitonServerServer-AArch64.sh

Agora você pode iniciar o processamento do servidor do jogo executando. /GravitonServerServer-AArch64.sh Depois que o processo for iniciado, você deverá ver a seguinte imagem:

 

Conecte-se ao servidor de jogo dedicado em execução na instância do AWS Graviton2

Agora que o servidor do jogo está em execução e aguardando conexões, conecte-se a ele a partir da máquina de desenvolvimento do Windows que executa o jogo. Inicie o jogo como antes. Ele deve abrir em uma tela preta, que é o mapa EntryLevel que você criou anteriormente. Depois que o jogo for aberto, abra o console do jogo pressionando a tecla `no teclado. Quando o console do jogo estiver aberto, conecte-se ao endereço IP público da sua instância. Depois que o jogo se conectar, você verá algo assim:

Agora você criou e compilou com sucesso um jogo de exemplo do Unreal Engine para instâncias do Windows e do AWS Graviton2 EC2. Agora, você pode aproveitar o desempenho de preço até 40% melhor em relação às instâncias comparáveis baseadas em x86 da geração atual hospedando servidores dedicados em instâncias do AWS Graviton2. Agora que você pode compilar um servidor de jogos compatível com o AWS Graviton2, vá em frente e teste seus servidores de jogos em instâncias Graviton2.

 

Este artigo foi traduzido do Blog da AWS em Inglês