AWS SimSpace Weaverをローカル環境で開発できるようにしてみた #reinvent

AWS SimSpace Weaverは実際に開発することも可能です。ここでは配布されているSDKを使用してローカル環境で開発できるように環境構築をしてみました。
2022.12.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。ゲームソリューション部の出村です。

この記事は AWS for Games Advent Calendar 2022 17日目の記事になります。

ここでは、今回のre:Inventで発表があったAWS SimSpace Weaverで動作するアプリケーションを手元のPCのみで動作するよう、ビルドと実行をしていきたいと思います。基本的にはドキュメントに沿って進めていけば動作するはずですが、ドキュメントでいくつか不足している点もありましたので、その点についても触れていきます。

AWS SimSpace Weaverとは

先日のre:Invent22のキーノートで発表された群衆シミュレーションのサービスのことです。

大規模なリアルタイム空間シミュレーションを実現するため、複数のEC2インスタンスをまたがって環境を再現することで、より大規模な空間が再現できる仕組みとなっています。

AWS SimSpace Weaverに関しては以下のエントリーが参考になるので、そちらをご覧下さい。

開発できる環境も提供されています

AWS SimSpace Weaverは、Get Startedといった形で動作している様子をみることができるアプリケーションも用意されています。そのため、動作させるだけであればすぐにみることができます。

その起動方法や動作している様子については、こちらのエントリーに書かれています。

サンプルアプリケーションのみならず開発に必要なSDKも配布されています。

開発の進め方

AWS SimSpace Weaverを使ったアプリケーションの開発の進め方について解説していきます。AWS SimSpace Weaverを利用するアプリケーションは、最初はローカル環境で開発環境を構築、作り込み、デバッグを行います。

そのような作り込みが終わった後に、アプリケーションをパッケージ化し、AWS上で動作しているAWS SimSpace Weaverを使って動作させ、検証する、といった流れとなります。

このように開発の大半はAWSを利用せず進める事ができるので、AWSの利用料が抑えられます。ローカル環境で動作させるため、それなりのPCスペックが要求されるとは思います。

ビルドできる環境を構築する

開発環境を構築していきます。多くの手順を踏んでいく必要があり、ドキュメントに記載がない設定などもありましたので、それらにも触れつつ環境構築を構築します。

開発前にインストールしておくソフトウェア

開発環境を構築するにあたって以下のソフトウェアが必要です。

  • VisualStudio 2019
  • Docker Desktop for Windows(もしくはそれに類するソフトウェア)

これらとは別に、AWS CLIでS3バケットにアクセスできるよう設定されている必要があります。 というのも、開発環境構築中にS3からZIPファイルをダウンロードする箇所もあるためです。

SDKをダウンロード

開発環境を構築していきましょう。最初にSDKをダウンロードします。

こちらのサービスのトップページにはDownload app SDKというリンクがありますので、そこからSDK(SimSpaceWeaverAppSdkDistributable.zipファイル)をダウンロードします。

ZIPファイルを展開する際は、Cドライブのルート直下のフォルダで展開するのがよいでしょう。これは、深いフォルダ階層で展開するとパスの文字列長さ制限により展開が失敗するためです(実際に失敗しました)。

その中にAWS_SimSpace_Weaver_Unreal_Guide.pdfというドキュメントが含まれています。ここでは、そのドキュメントを元に進めていきます。詳細は ドキュメントを確認していただくとして、このエントリーでは概要(流れ)について解説します。

UnrealEngine 5.0のソースコードを取得・変更する

UnrealEngine 5.0のソースコードを取得します。UnrealEngine 5.0のソースコードを取得するには、EpicGameのアカウント、GitHubアカウントが必要となります。初めて取得する場合は、こちらを参考に事前に設定してください。

設定ができましたら、ソースコードを取得します。

$ git clone -b 5.0 --single-branch https://github.com/EpicGames/UnrealEngine.git

ソースコードを変更します。

ソースコードのダウンロードが終了した後、ソースコードの一部を変更します。

UnrealEngine\Engine\Source\Runtime\Core\Private\Unix\UnixPlatformMemory.cppをテキストエディタで開き、以下のように変更します。

#ifndef UE4_DO_ROOT_PRIVILEGE_CHECK 
  #if defined(_M_X64) || defined(__x86_64__) || defined (__amd64__) 
    #define UE4_DO_ROOT_PRIVILEGE_CHECK 0   // ← 0にする
  #else
    #define UE4_DO_ROOT_PRIVILEGE_CHECK 0   
  #endif // defined(_M_X64) || defined(__x86_64__) || defined (__amd64__) 
#endif // ifndef UE4_DO_ROOT_PRIVILEGE_CHECK

そして、UnrealEngine5.0をフルビルドします。

Linux toolchainをインストール

つぎにLinux向けにクロスコンパイルするため、Linux toolchainをインストールします。

UnrealEngineのサイトで配布されているLinux toolchainをダウンロードし、インストールします。今回はUnrealEngine 5.0を使用しますので、clang-11.0.1を指定します。

Dockerイメージを作成する

ビルド環境構築にはDocker も利用しますので事前にDocker Desktop for Windows(か、それに類するソフトウェア)をインストールしておきます。

そして必要なDockerのイメージを作成します。イメージを作成するには以下のようにバッチファイルを実行します。

> docker-create-image.bat

プロジェクトを作成

次にプロジェクトを作成します。

先ほど作成されたSimSpaceWeaverAppSdkDistributableフォルダで以下のコマンドを実行します。

.\create-project.bat --name ${PROJECT_NAME} --path ${PATH} --template 'PathfindingSampleUnreal'

${PROJECT_NAME}と${PATH}は任意で指定してください。今回は以下のように実行しました。

.\create-project.bat --name SimSpace1 --path C:\ue50\temp --template 'PathfindingSampleUnreal'

プロジェクトを生成した直後のフォルダ構成は次のようになっています 。

その中にあるPathfindingSampleUnrealSpatialフォルダがUnrealEngineのプロジェクトです。このプロジェクトの設定変更をするので、そのフォルダまで移動します。

├── build
├── cloudformation
│   └── weaver-SimSpace1-stack.yaml
├── CMakeLists.txt
├── CMakeSettings.json
├── dependencies
│   └── DemoFramework
├── src
│   ├── GenericViewApp
│   └── PathfindingSampleUnrealSpatial   ← UnrealEngineのプロジェクト
└── tools
    ├── linux
    ├── local
    ├── SimSpace1-config.sh
    ├── SimSpace1-schema.yaml
    └── windows

そのフォルダのなかには、.uprojectファイルがあるので、プロジェクトで利用できるように設定を行います。

まず、右クリックでメニューを表示し、対象となるUnrealEngineのバージョンを変更します。指定するUnrealEngineのプロジェクトは、先ほどビルドしたUnrealEngineのバージョンに合わせます。

次に、VisualStudio 2019のプロジェクトを生成します。

これで設定が変更できたのでUnrealEngineのプロジェクトを開きます。プロジェクトを開く際のUnrealEditorは先ほどビルドしたUnrealEngine 5.0を使用します。

プロジェクトの設定を変更

次にプロジェクトの設定項目を変更します。変更箇所は以下の通りです。

ここで気をつけるべき箇所は最後のクライアント数となります。こちらは4が設定されていますが、これは2×2の広さを指定するためにこのような設定となっています。シミュレーション対象の広さを変更する際には、こちらの数値を変更してください(詳細についてはドキュメントで確認してください)。

あと、あわせて「スタンドアローンゲーム」で実行するように設定を変更する必要があります。

実行する

実行すると、このような画面が表示されます。

改造するポイント

これらのサンプルコードを元にして自分たちに必要なシステムを構築していきます。変更すべきサンプルコードは先ほどのsrcフォルダにあります。軽く眺めてみましたが、このサンプルコードではC++で書かれていました。これらのコードはBlueprintを使ったモノに作り替えることも、おそらく可能でしょう。

まとめ

このようなシミュレーションがより手軽に作成できるようになりました。さまざまな群衆シミュレーション、ゲーム開発など、さまざまな用途に使われていくことになるのでしょう。