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
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.
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.
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.
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:
Navegue até C:\Users\Administrator\Documents\UnrealEngine\
Execute o Setup.bat
e aguarde a conclusão.
Execute o script GenerateProjectFiles.bat
Em C:\Users\Administrator\Documents\UnrealEngine, agora deve haver um arquivo chamado UE4.sln. Abra-o no Visual Studio 2019.
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”.
No Solution Explorer na coluna da direita, clique com o botão direito do mouse no destino de compilação UE4 e selecione “Build”.
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
Exemplo de configuração de projeto de jogo em terceira pessoa
No Unreal Project Browser, crie um novo projeto de jogos.
Em Selecionar modelo, selecione “Terceira pessoa” e clique em Avançar.
Em Configurações do projeto, certifique-se de que “Projeto C++” esteja selecionado, nomeie seu projeto GravitonServer e selecione Criar projeto.
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
Abra GravitonServerServer.target.cs no 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:
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”.
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”.
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”.
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”.
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:
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:
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”:
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.
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”:
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.
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:
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”.
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.
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”.
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”
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:
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.
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