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

2024-09-03
デベロッパーのためのクラウド活用方法

Author : 小森谷 健太

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

2024-09-03
デベロッパーのためのクラウド活用方法

Author : 小森谷 健太

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

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

ゲーム開発者向けのその他の記事はこちら

選択
  • 選択
  • Amazon DynamoDB で作るサーバーレスなゲーム用アチーブメントマイクロサービス
  • AWS の知識ゼロから始める AWS GameKit
  • Amazon GameLift を使って「最短」でマルチプレイヤーゲームを作る
  • Amazon DynamoDB で作るサーバーレスなゲーム用フレンドマイクロサービス
  • Amazon GameSparks でインフラを意識せずにゲームのバックエンドサービスを開発しよう
  • 魔法で作る Amazon DynamoDB の 簡単ゲームインベントリ
  • レベル 1 から作るゲームのクエスト手帳
  • サーバーレスなゲームのギルド検索
  • 一緒に学び考える ! ゲームの AI/ML 活用
  • 3 ステップで始める AI モデル開発 ! 始める前に知っておくべきコト !
  • 実践 ! 機械学習でゲームの休眠ユーザーを予測してみよう
  • Amazon GameLift Anywhere でサクッとマルチプレイゲームを開発しよう
  • ゲーム分析を Amazon Aurora と Amazon Redshift の Zero-ETL 統合ではじめよう
  • Amazon Redshift を活用したゲームの行動ログ分析
  • Amazon QuickSight によるゲーム分析ダッシュボードの構築
  • 品質管理に生成 AI は使えるのか !? テキストチェックを生成 AI にやらせてみた
  • 生成 AI を用いたヘルプソリューションを作成する
  • 世界に 1 つだけの AI アシスタント作成 ~オリジナルにカスタマイズ
  • マルチモーダルな生成 AI 活用の入門編! - 画像認識と画像生成
  • Amazon S3 と Amazon CloudFront を活用したグローバル向けゲームビルドバイナリ共有環境の構築
  • Terraform を利用した Amazon EKS の構築
  • Amazon Bedrock でゲームの BGM を作ってみました !
  • Amazon EC2 ではじめる Unreal Engine Pixel Streaming 入門
  • Agones on Amazon EKS で構築するマルチプレイゲームの専用ゲームサーバー
  • AWS Summit Japan 2024 Game Industry Booth の舞台裏

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

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


AWS for Games

AWS for Games はより早い開発、よりスマートな運営、そしてより楽しいゲームへの成長という BuildRunGrow の 3 つの柱に沿ってサポートします。今回は Run の柱、ゲームクライアントをクラウド上で実行するクラウドゲーミングがテーマとなります。


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

クラウドゲーミングはリモートサーバー上でゲームクライアントを実行し、その映像や音声データを 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 インスタンス上で動作させます。

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

  • 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 のインストールを行います。 (参考 : Installing gh on Linux and BSD)

(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

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

gh auth login
gh repo clone EpicGames/UnrealEngine

必要な依存関係をインストールし、Unreal Engine をビルドします。

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

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

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

Unreal Editor を起動します。

./Engine/Binaries/Linux/UnrealEditor

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

  • Project Location : /home/ubuntu/Documents/UnrealProjects
  • Project Name : PixelStreamingDemo

画像をクリックすると拡大します

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

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

画像をクリックすると拡大します

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

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

画像をクリックすると拡大します

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

Signalling and Web Server をセットアップします。

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

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

Signalling and Web Server を起動します。

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

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

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 アプリケーションを実行します。

./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 の動作確認は以上となります。


リソースの削除

Amazon EC2 インスタンスの削除

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

画像をクリックすると拡大します

EBS ボリュームの削除

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


まとめ

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

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

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


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

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

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

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する