この Topic では、Unity リモートレンダリングの使用方法について説明します。
背景情報
Unity Render Streaming は、高品質で複雑な 3D モデルをクラウドでレンダリングし、モバイルデバイスやブラウザに表示するための Unity のオープンソースソリューションです。Unity Render Streaming を使用して Unity アプリケーションをコンテナ化することで、クラウドでフレームをレンダリングし、リアルタイムでブラウザにストリーミングできます。これにより、クラウドゲーミングのシナリオが可能になります。Unity Render Streaming の詳細については、「UnityRenderStreaming」をご参照ください。
ステップ1:Unity Editor を使用した Unity Render Streaming アプリケーションの開発
この Topic では、Mac M1 Silicon 向けの Unity Editor バージョン 2021.3.2f1c1 を例として使用します。
- Unity Editor で、[Windows][Package Manager][+][Add package from git URL]
- com.unity.renderstreaming@3.1.0-exp.2 を検索します。[Add] をクリックします。
- 表示されたダイアログボックスで [Yes] をクリックして、プロジェクトを再起動します。再起動後、Unity Render Streaming パッケージがインポートされ、[Package Manager] ページで利用可能になります。

- [Package Manager] ページの [Samples] セクションで、[Import] をクリックして公式サンプルをインポートします。この Topic では、公式サンプルの samples (1.19 MB) をインポートします。インポート後、Assets フォルダが更新されます。

- ページの左上隅で、[File] > [Build Settings] をクリックします。[Platform] を [Windows, Mac, Linux] に設定します。[Target Platform] を [Linux] に設定します。[Scenes] を [WebBrowserInput] に設定します。[Build]mac-linuxビルドが完了すると、ファイルディレクトリは次のように表示されます。

- ページの左上隅で、[Edit][Render Streaming][Download web app]Unity アプリケーションのビルドに加えて、ブラウザがレンダリングされたフレームにアクセスできるように、対応する Web サーバーもセットアップする必要があります。この Topic では公式サンプルを使用するため、公式の Web サーバーを直接ダウンロードできます。ダウンロード後、リモートレンダリングアプリケーションが完成します。これには、Unity の実行可能ファイルと Web サーバーアプリケーションが含まれます。Render Streaming の他の実装オプションについては、「Unity Render Streaming について」をご参照ください。
ステップ2:アプリケーションのコンテナ化とデプロイ
この実験では、次の環境を使用します。
- クラスター:ACK マネージドクラスター、バージョン 1.22.3-aliyun.1。
- ノードプールのオペレーティングシステム:Alibaba Cloud Linux 2.1903。
- インスタンスタイプ:ecs.gn6v-c8g1.2xlarge。
- Docker Engine:19.3.15。
- Unity アプリケーションとその Web サーバーをコンテナ化します。
- Unity アプリケーションをコンテナ化します。詳細な手順については、「Linux グラフィックスアプリケーションのベストプラクティス」をご参照ください。正しいベースイメージのバージョンを選択してください。利用可能なバージョンについては、「Editor」をご参照ください。この Topic では、ベースイメージとして ubuntu-2021.3.2f1-mac-mono-1.0.1 を使用し、vulkan-util、libc++1、libc++abi1 の依存パッケージをインストールします。
- Web サーバーをコンテナ化します。Web サーバーのコンテナ化は、Web アプリケーションの標準的なプラクティスに従います。以下は Dockerfile の例です。
FROM ubuntu:20.04 WORKDIR /run COPY webserver ./ CMD webserver -w
- Unity アプリケーションをコンテナ化します。詳細な手順については、「Linux グラフィックスアプリケーションのベストプラクティス」をご参照ください。
- YAML ファイルを作成してデプロイします。
- unity-demo.yaml という名前のファイルを次の内容で作成します。Unity アプリケーションと Web サーバーのイメージをビルドした後、それらを ACK クラスターにデプロイします。「Linux グラフィックスアプリケーションのベストプラクティス」に基づいて、次の YAML の例をリファレンスとして YAML ファイルをカスタマイズしてください。
両方のコンテナを 1 つの Pod に配置し、ネットワーク名前空間を共有します。Unity デモは、WebSocket を介してapiVersion: v1 kind: Pod metadata: name: unity-demo namespace: default spec: # Linux Web サーバーのサンプルは、WebSocket を 127.0.0.1 でのみ公開します。ブラウザが WebSocket 経由で接続できるようにするには、ホストネットワークモードを使用し、EIP を介してホストにアクセスします。 hostNetwork: true nodeName: xxx containers: - image: xxx:xx name: unity command: ["/run/mac-linux/mac-linux.x86_64"] securityContext: privileged: true - image: xxx:xx name: webserver ports: - containerPort: 80 protocol: TCP restartPolicy: Always127.0.0.1:80で Web サーバーに接続します。Web サーバーは、ブラウザからの接続を受け入れるためにポート 80 を公開します。 - 次のコマンドを実行して Pod をデプロイします。
kubectl apply -f unity-demo.yaml
- unity-demo.yaml という名前のファイルを次の内容で作成します。
ステップ3:サービスへのアクセスとリモートレンダリング結果の表示
ブラウザで、ホストの EIP:80 にアクセスします。[VideoPlayer Sample] をクリックします。結果は次のように表示されます。
説明 繰り返しテストした結果、リアルタイムパフォーマンスはネットワークに依存することがわかりました。ネットワークが安定している場合、カクつきはほとんど発生しません。