メインコンテンツに移動
デベロッパーのためのクラウド活用方法
AWS for Games logo featuring a white game controller outline with directional pad and buttons, on a purple background.

Amazon EC2 ではじめる Unreal Engine Pixel Streaming 入門

2024-09-03 | Author : 小森谷 健太

はじめに

ゲーム開発のみなさん、こんにちは !
Game Solutions Architect の小森谷です。

この記事では、クラウドゲーミングを手軽に実現するソリューションのひとつである Pixel Streaming を用いて、Amazon EC2 上で 3D アプリケーションのレンダリングを行い、手元のデバイスのブラウザにストリーミングする方法をご紹介します。


X ポスト » | Facebook シェア » | はてブ »

builders.flash メールメンバー登録

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 
今すぐ特典を受け取る »

AWS for Games

AWS for Games はより早い開発、よりスマートな運営、そしてより楽しいゲームへの成長という BuildRunGrow の 3 つの柱に沿ってサポートします。今回は Run の柱、ゲームクライアントをクラウド上で実行するクラウドゲーミングがテーマとなります。
A diagram in Japanese illustrating the stages of cloud game development: Build, Run, and Grow. The 'Build' section shows cloud game development, the 'Run' section includes game server, game security, and game database, and the 'Grow' section features LiveOps, game analytics, and AI & ML, with corresponding icons and colorful section headers.

クラウドゲーミングについて

クラウドゲーミングはリモートサーバー上でゲームクライアントを実行し、その映像や音声データを PC やスマホなど手元のデバイスに配信することによりゲーム体験を実現する方式です。安定したネットワーク環境があれば、ゲーミング PC や家庭用ゲーム機がなくても本格的なゲームを遊ぶことができます。

Pixel Streaming や Unity Render Streaming などクラウドゲーミングを実現するための開発者向けソリューションが提供されている他、エンドユーザー向けには Amazon Luna、GeForce NOW など多数のゲームタイトルをクラウドゲーミングで遊べるサブスク型のサービスも展開されています。

Pixel Streaming とは?

Pixel Streaming は Unreal Engine アプリケーションをクラウド上のサーバーで実行し、レンダリングされたフレームとオーディオをブラウザやモバイルデバイスに WebRTC 経由でストリームするためのソリューションです。

ソリューションの中核となる Pixel Streaming Plugin、 Signalling and Web Server の他、Coturn を使った STUN/TURN サーバー、クライアントの接続先管理を行う Matchmaker などのコンポーネントも提供されており、様々なネットワーク環境から多数のクライアントからの接続を受け付けるようなサービスにも Pixel Streaming を導入することができるようになっています。また、これらコンポーネントのソースコードは GitHub リポジトリに公開されています。(EpicGamesExt/PixelStreamingInfrastructure)

Amazon EC2 上での Pixel Streaming サーバー構築

今回はもっともシンプルな下図の構成で Pixel Streaming を動作させてみます。Pixel Streaming Plugin と Signalling and Web Server を同一の EC2 インスタンス上で動作させます。

Architecture diagram illustrating AWS EC2 deployment for Unreal Engine Pixel Streaming, showing a G4dn instance running a UE app with a Pixel Streaming Plugin and signaling/web server within a VPC, connected to a client.

各コンポーネントの役割

図中の各コンポーネントの役割は以下のとおりです。

  • UE App : Unreal Engine アプリケーションです。通常はゲーミング PC、家庭用ゲーム機、スマートフォンなどローカルデバイスで実行されることが多いですが、今回は EC2 インスタンス上で実行します。
  • Pixel Streaming Plugin : Unreal Engine のプラグインとして動作し、Unreal Engine アプリケーションの映像フレームと音声データをエンコードしてメディアストリームをクライアントに送信します。また、キーボード入力やマウス操作などクライアントからの入力を受け取り、Unreal Engine アプリケーションに渡します。これら双方向のリアルタイム通信は WebRTC によって実現されています。
  • Signalling and Web Server : クライアントと Pixel Streaming Plugin 間の WebRTC 接続におけるシグナリングサーバー、クライアントがストリームを再生するための HTML と JavaScript を提供する Web サーバーの 2 つの役割をもったサーバーです。
  • Client : ユーザーがゲームを操作するクライアントで、PC やスマートフォンの Web ブラウザを想定しています。アプリケーションは EC2 インスタンス上で実行されるため、クライアントにはゲーミング PC のような高いスペックは求められません。ここでは安定したネットワーク環境が必要になります。求めるフレームレートや解像度に応じて、一般に十数 ~ 45 Mbps の通信速度の有線 LAN 接続、または 5 GHz 帯の Wifi 接続が推奨されています。

では実際に Pixel Streaming を使ってクラウドゲーミングを実装してみましょう。

1. Epic Games アカウントの作成と GitHub アカウントとの連携

後続の手順でソースコードから Unreal Engine を Linux 向けにビルドします。 Unreal Engine のソースコードにアクセスできるようにするため、以下の手順を実施してください。

2. Amazon EC2 インスタンスの起動

以下の設定で EC2 インスタンスを起動し、SSH で接続します。

  • AMI : Ubuntu Server 22.04 LTS (HVM), SSD Volume Type

    • Unreal Engine 5.4 の Linux 推奨環境とされている Ubuntu 22.04 を使用します。

  • インスタンスタイプ : g4dn.2xlarge 以上

    • G4dn は NVIDIA T4 GPU を搭載しておりゲームストリーミング用途に活用できます。

    • テンプレートの Unreal Engine アプリケーションを動作させる環境としては g4dn.xlarge でも十分ですが、本手順ではビルドを実行する開発環境も兼ねるので g4dn.2xlarge 以上のインスタンスサイズをおすすめします。

  • キーペア : 任意のキーを指定、または新規作成

  • ネットワーク : パブリックサブネットを指定し、パブリック IP の自動割り当てを有効化

  • セキュリティグループ : 以下のインバウンド通信を許可(ソースは0.0.0.0/0 ではなく ”My IP ” を指定するなど適切に制限する)

    • TCP/80...HTTP Access

    • UDP/8443...NICE DCV UDP Access

    • TCP/8443...NICE DCV TCP Access

    • TCP/22...SSH Access

  • ストレージ : 300 GiB 以上

  • IAM ロール : 後続の NICE DCV のインストールの際、AWS が管理する S3 バケットから資材をダウンロードする手順があります。Amazon S3 バケットの読み取りアクセスを許可する IAM ロールを作成し、それを EC2 インスタンスにアタッチしておいてください。

3. NICE DCV のインストール

Linux に導入する Unreal Editor を GUI で操作したいので、以下の手順に従いデスクトップ環境にアクセスできるよう NICE DCV をインストールしておきます。作業は初期ユーザー “ubuntu” で実施できます。また、ユーザー “ubuntu” のパスワードは sudo passwd ubuntu で設定してください。

Installing the NICE DCV Server on Linux »

4. Unreal Engine のセットアップ

NICE DCV で Ubuntu のデスクトップにアクセスし、以降は Ubuntu 上で手順を実施します。

GitHub CLI のインストール

GitHub CLI のインストールを行います。 (参考 : Installing gh on Linux and BSD)

bash
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
&& wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y

Unreal Engine 5.4 のソースコードを取得

GitHub から Unreal Engine 5.4 のソースコードを取得します。

bash
gh auth login
gh repo clone EpicGames/UnrealEngine

Unreal Engine をビルド

必要な依存関係をインストールし、Unreal Engine をビルドします。 このプロセスには数時間かかる場合があります。ローカルのターミナルから SSH 越しに実行した場合、SSH タイムアウトにより処理が中断してしまうので、Ubuntu 上のターミナルで実行してください。

bash
cd UnrealEngine
./Setup.sh
./GenerateProjectFiles.sh
make

5. サンプルプロジェクトのビルド

Unreal Editor を起動します。

bash
./Engine/Binaries/Linux/UnrealEditor

新規プロジェクトを作成

任意のテンプレートを指定し、画面右下の「Create」をクリックして新規プロジェクトを作成します。このとき Project Location および、Project Name にスペースを含まないようにしてください (スペースを含んでいると後で実行する Signalling and Web Server のセットアップを行う setup.sh がエラーになります)。この例では以下のようにしています。

  • Project Location : /home/ubuntu/Documents/UnrealProjects
  • Project Name : PixelStreamingDemo
Screenshot of the Unreal Engine Project Browser running on a virtual machine, showcasing project templates including Third Person, First Person, and others. Demonstrates EC2-based pixel streaming using the Unreal Engine Editor interface.

Pixel Streaming プラグインを有効化

Pixel Streaming プラグインを有効化します。

メインメニューの「Edit」から「Plugins」を選択します。表示されたウィンドウで Pixel Streaming を検索し、チェックしたら画面右下の「Restart Now」をクリックして Unreal Editor を再起動します。

Screenshot of Unreal Engine editor displaying the Pixel Streaming plugin settings on an AWS EC2 instance. The image shows the Plugins dialog filtered for 'pixel stream', highlighting the Pixel Streaming and Pixel Streaming Player plugins, along with the editor's main interface and project settings menu.

プロジェクトを ビルド

プロジェクトを ビルドします。

Platforms」メニューから「Linux」> 「Package Project」を選択します。これによって Linux 上で実行可能な Unreal Engine アプリケーションをビルドすることができます。

Screenshot of Unreal Engine's platform selection and packaging menu, showing a third person template environment. The dropdown menus display options to select the target platform such as Linux, LinuxArm64, and Android for deployment, with other binary configurations and device management options. This is used in the context of EC2 Pixel Streaming.

6. Pixel Streaming のセットアップと実行

Signalling and Web Server をセットアップします。 まずは Signalling and Web Server の資材はプロジェクトのビルド時に プロジェクトのディレクトリーにコピーされます。setup.sh を実行することで Pixel Streaming のセットアップを行います。

bash
./Documents/UnrealProjects/PixelStreamingDemo/Samples/PixelStreaming/WebServers/SignallingWebServer/platform_scripts/bash/setup.sh

Signalling and Web Server を起動

Signalling and Web Server を起動します。

bash
./Documents/UnrealProjects/PixelStreamingDemo/Samples/PixelStreaming/WebServers/SignallingWebServer/platform_scripts/bash/Start_SignallingServer.sh

起動成功

正常に起動できれば以下のような出力が得られます。

bash
06:18:08.217 Running Cirrus - The Pixel Streaming reference implementation signalling server for Unreal Engine 5.3.
06:18:08.233 WebSocket listening for Streamer connections on :8888
06:18:08.233 WebSocket listening for SFU connections on :8889
06:18:08.234 WebSocket listening for Players connections on :80
06:18:08.235 Http listening on *: 80

Unreal Engine アプリケーションを実行

Unreal Engine アプリケーションを実行します。

bash
./Documents/UnrealProjects/PixelStreamingDemo/Binaries/Linux/PixelStreamingDemo -PixelStreamingIP=127.0.0.1 -PixelStreamingPort=8888 -RenderOffScreen

動作確認

ここまでの手順で構築作業はすべて完了しました。ローカル PC の Web ブラウザから EC2 の パブリック IP にアクセスすると下図のように Unreal Engine アプリケーションをブラウザから操作することができます。キーボード (W、A、S、D キー) やマウス操作によるアバター移動や視点移動は g4dn インスタンス上でレンダリングされ、それを Pixel Streaming が低遅延でブラウザにストリーミングするため、手元の PC でアプリケーションを実行しているかのような体験が得られます。

Pixel Streaming の動作確認は以上となります。

Screenshot of a cloud-based Unreal Engine pixel streaming demo interface running on an EC2 instance, showing a metallic humanoid character in a virtual environment with a tiled floor and walls under a blue sky with scattered clouds.

リソースの削除

Amazon EC2 インスタンスの削除

EC2 インスタンスを Terminate(delete) してください。

Screenshot of the AWS EC2 console showing instance management options for a UE Pixel Streaming Ubuntu 22.04 instance, including options to stop, start, reboot, hibernate, and terminate the instance.

EBS ボリュームの削除

ルートボリュームの EBS はインスタンスを削除のタイミングで削除されますが、それ以外の EBS ボリュームをアタッチしている場合は必要に応じてそちらも削除してください。

まとめ

今回は Pixel Streaming を EC2 上に展開して簡単なクラウドゲーミング体験をしていただきました。ユーザーの手元にハイスペックなゲーミング PC がなくても実現できるゲーム体験は、より多くのユーザーにゲームを届ける有効な手段になるのではないでしょうか。

エンドユーザー向けの大規模なサービスとして提供するためにはサーバーのスケーリング、STUN/TURN サーバー の導入、Matchmaker による接続情報の管理などにも取り組む必要があります。次のステップとして、これらについて解説しているブログ ”AWSを使ったUnreal Engine Pixel Streamingの大規模デプロイ” を参照して、Pixel Streaming を AWS 上に大規模に展開するソリューションについてぜひ確認してみてください。

この記事がクラウドゲーミング開発にチャレンジする第一歩となれば幸いです。

筆者プロフィール

小森谷 健太
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト

AWS 入社前は SIer で業務システムのインフラ構築、運用を行っていました。
現在はゲーム、エンターテイメント業界のお客様向けに AWS を活用した技術支援を担当しています。

Portrait photo of a man with short black hair wearing a gray shirt, set against a black background.