すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Unityリモートレンダリングのベストプラクティス

最終更新日:Oct 29, 2024

このトピックでは、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シリコンです。

  1. Unity Editor[Windows] > [パッケージマネージャー] を選択し、左上隅の [+ > git URLからパッケージを追加] を選択します。

  2. 入力してcom.unity.renderstreaming@3.1.0-exp.2を検索し、追加をクリックします。

  3. 表示されるメッセージで、[はい] をクリックしてプロジェクトを再起動します。

    プロジェクトが再起動されると、[パッケージマネージャー] ページにUnity Render Streamingパッケージがインポートされたことが表示されます。 Unity Render Streaming package

  4. [パッケージマネージャー] ページの [サンプル] セクションで、[インポート] をクリックして、Unityが提供するサンプルをインポートします。

    このトピックでは、サイズが1.19 MBのサンプルがインポートされます。 サンプルがインポートされると、Assetsディレクトリが更新されます。 Assets

  5. 、ページの左上隅にある [ファイル] > [ビルド設定] を選択し、[プラットフォーム]Windows、Mac、Linuxに、[ターゲットプラットフォーム]Linuxに、[シーン]WebBrowserInputに設定し、[ビルド] をクリックします。 ビルドの名前をmac-linuxに変更します。

    次の図は、ビルドの作成後のディレクトリを示しています。Build

  6. 、ページの左上隅にある [編集] > [レンダーストリーミング] > [webアプリのダウンロード] の順に選択し、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

  1. Unityアプリケーションとwebサーバーをコンテナー化します。

    1. UnityアプリケーションをContainerizeします。 詳細については、「Best practice for Linux graphics applications」をご参照ください。

      エディターを参照し、基本イメージのバージョンを選択します。 このトピックでは、ubuntu-2021.3.2f1-mac-mono-1.0.1ベースイメージが使用され、次の依存関係がインストールされます: vulkan-util、libc ++ 1、およびlibc ++ abi1。

    2. webサーバーをコンテナー化します。

      Webサーバーのコンテナ化は、webアプリケーションのコンテナ化に似ています。 次のコードブロックは、Dockerfileのサンプルを示しています。

      FROMubuntu:20.04
      WORKDIR/run
      COPYwebserver./
      CMDwebserver-w
  2. ポッドを作成してデプロイします。

    1. 次の内容に基づいて、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をブラウザーに公開します。

    2. 次のコマンドを実行してポッドをデプロイします。

      kubectl apply -f unity-demo.yaml

ステップ3: アプリケーションにアクセスし、リモートレンダリングを確認する

ブラウザのアドレスバーにホストアドレスEIP:80を入力し、VideoPlayer Sampleをクリックします。 次の結果が表示されます。

説明

表示はネットワークの状態によって異なります。 ネットワークの待ち時間が短い場合、吃音は発生しません。