このトピックでは、Unityを使用してコンテンツをリモートでレンダリングする方法について説明します。
背景情報
Unity Render Streamingは、Unityの高品質で複雑なレンダリング機能を提供するオープンソースソリューションで、クラウド、モバイルプラットフォーム、またはブラウザで3Dモデルをレンダリングします。 Unity Render Streamingに基づくコンテナ化されたUnityアプリケーションを使用して、クラウドでグラフィックスをレンダリングし、クラウドゲームシナリオでそのグラフィックスをブラウザにストリーミングできます。 詳細については、「Unity Render Streaming」をご参照ください。
手順1: Unity Editorを使用してUnity Render Streamingアプリケーションを開発する
このトピックで使用するUnity Editorのバージョンは、2021.3.2 f1c1/Mac M1シリコンです。
Unity Editorで を選択し、左上隅の を選択します。
入力してcom.unity.renderstreaming@3.1.0-exp.2を検索し、追加をクリックします。
表示されるメッセージで、[はい] をクリックしてプロジェクトを再起動します。
プロジェクトが再起動されると、[パッケージマネージャー] ページにUnity Render Streamingパッケージがインポートされたことが表示されます。
[パッケージマネージャー] ページの [サンプル] セクションで、[インポート] をクリックして、Unityが提供するサンプルをインポートします。
このトピックでは、サイズが1.19 MBのサンプルがインポートされます。 サンプルがインポートされると、Assetsディレクトリが更新されます。
、ページの左上隅にある を選択し、[プラットフォーム] をWindows、Mac、Linuxに、[ターゲットプラットフォーム] をLinuxに、[シーン] をWebBrowserInputに設定し、[ビルド] をクリックします。 ビルドの名前をmac-linuxに変更します。
次の図は、ビルドの作成後のディレクトリを示しています。
、ページの左上隅にある の順に選択し、Unityアプリケーションをダウンロードします。
Unityアプリケーションのコンパイルに加えて、レンダリングされたグラフィックスをブラウザーにストリーミングするwebサーバーも作成する必要があります。 このトピックでは、Unityが提供するサンプルを使用します。 したがって、サンプルに対応するwebサーバーを直接ダウンロードできます。
ダウンロードが完了すると、リモートレンダーストリーミングをサポートするアプリケーションが開発されます。 アプリケーションは、Unity実行可能ファイルとwebサーバーアプリケーションで構成されます。 Unity Render Streamingの実装方法の詳細については、「Unity Render Streamingについて」をご参照ください。
ステップ2: アプリケーションのコンテナ化とデプロイ
このトピックでは、次のクラスターバージョン、インスタンスタイプ、オペレーティングシステム、およびDockerエンジンバージョンを使用しています。
クラスター: バージョンが1.22.3のContainer Service for Kubernetes (ACK) 管理クラスター-aliyun.1
ノードプールオペレーティングシステム: Alibaba Cloud Linux 2.1903
インスタンスタイプ: ecs.gn6v-c8g1.2xlarge
Dockerエンジンのバージョン: 19.3.15
Unityアプリケーションとwebサーバーをコンテナー化します。
UnityアプリケーションをContainerizeします。 詳細については、「Best practice for Linux graphics applications」をご参照ください。
エディターを参照し、基本イメージのバージョンを選択します。 このトピックでは、ubuntu-2021.3.2f1-mac-mono-1.0.1ベースイメージが使用され、次の依存関係がインストールされます: vulkan-util、libc ++ 1、およびlibc ++ abi1。
webサーバーをコンテナー化します。
Webサーバーのコンテナ化は、webアプリケーションのコンテナ化に似ています。 次のコードブロックは、Dockerfileのサンプルを示しています。
FROMubuntu:20.04 WORKDIR/run COPYwebserver./ CMDwebserver-w
ポッドを作成してデプロイします。
次の内容に基づいて、unity-demo.yamlという名前のファイルを作成します。
Unityアプリケーションとwebサーバーのコンテナイメージを取得したら、それらをACK管理クラスターにデプロイします。 次のコードブロックは、YAMLファイルの例を示しています。 Best practice for Linux graphics applicationsを参照して、ファイルを変更できます。
apiVersion:v1 kind:Pod metadata: name:unity-demo namespace:default spec: # The Linux web server sample exposes the IP address 127.0.0.1 when it uses WebSocket. Therefore, browsers establish WebSocket connections to the elastic IP address (EIP) of the host when they access the host. 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:Always
同じネットワーク名前空間を共有するために、常に2つのコンテナーがポッドに作成されます。 Unityデモでは、webサーバーのIPアドレス
127.0.0.1:80
へのWebSocket接続が確立され、webサーバーはポート80をブラウザーに公開します。次のコマンドを実行してポッドをデプロイします。
kubectl apply -f unity-demo.yaml
ステップ3: アプリケーションにアクセスし、リモートレンダリングを確認する
ブラウザのアドレスバーにホストアドレスEIP:80を入力し、VideoPlayer Sampleをクリックします。 次の結果が表示されます。
表示はネットワークの状態によって異なります。 ネットワークの待ち時間が短い場合、吃音は発生しません。