全部產品
Search
文件中心

Container Service for Kubernetes:Unity遠程渲染最佳實務

更新時間:Jun 19, 2024

本文介紹如何使用Unity遠程渲染。

背景資訊

Unity Render Streaming是Unity開源的一個高品質、高複雜的3D模型在雲端渲染,手機端、瀏覽器顯示的解決方案。 基於Unity Render Streaming容器化Unity應用,可以實現畫面在雲端渲染、然後即時傳輸到瀏覽器的雲遊戲情境。關於Unity Render Streaming的更多資訊,請參見UnityRenderStreaming

步驟一:使用Unity Editor開發Unity Render Streaming應用

本文以Unity Editor的2021.3.2f1c1/Mac M1 silicon版本為例進行說明。

  1. Unity Editor中單擊Windows > Package Manager,然後在左上方單擊+ > Add package from git URL
  2. 輸入並搜尋com.unity.renderstreaming@3.1.0-exp.2,然後單擊Add
  3. 在彈出的對話方塊單擊Yes,進行專案重啟。
    重啟後,在Package Manager頁面可以看到Unity Render Streaming包已經匯入。UnityRenderStreaming包
  4. Package Manager頁面的Samples地區下,單擊Import,匯入官方的Example。
    本文以匯入官方1.19 MB的Example Samples為例。匯入後,可以看到Assets目錄已更新。Assets
  5. 在頁面左上方單擊File > Build Settings,配置PlatformWindows, Mac, LinuxTarget PlatformLinuxScenesWebBrowserInput,然後單擊Build,命名為mac-linux
    建立完成後,檔案目錄如下圖所示:Build
  6. 在頁面左上方單擊Edit > Render Streaming > Download web app,下載服務應用。
    除了編譯Unity應用,您還需要製作對應的Webserver實現瀏覽器對渲染畫面的傳輸訪問。本文使用官方的Sample,因此直接下載對應的Webserver即可。
    下載完成後,一個能夠進行Remote Render Streaming的應用開發完成,應用程式套件含一個Unity的可執行檔和一個Webserver服務應用。關於RenderStreaming更多的實現方式,請參見About Unity Render Streaming

步驟二:容器化應用並部署

本次實驗的作業環境如下:
  • 叢集:ACK託管叢集,且版本為1.22.3-aliyun.1。
  • 節點池作業系統:Alibaba Cloud Linux 2.1903。
  • 執行個體規格:ecs.gn6v-c8g1.2xlarge。
  • Docker Engine:19.3.15。
  1. 容器化Unity應用以及對應的Webserver。
    1. 容器化Unity應用。具體操作,請參見Linux圖形應用最佳實務
      基礎鏡像請選擇對應的版本,具體請參見Editor。本文使用ubuntu-2021.3.2f1-mac-mono-1.0.1作為基礎鏡像,在其基礎上安裝依賴包:vulkan-util 、libc++1 、 libc++abi1。
    2. 容器化Webserver。
      Webserver的容器化和大多Web型應用類似,Dockfile樣本如下:
      FROMubuntu:20.04
      WORKDIR/run
      COPYwebserver./
      CMDwebserver-w
  2. 編寫並部署YAML檔案。
    1. 使用以下內容,建立unity-demo.yaml檔案。
      得到Unity應用和Webserver兩個鏡像後,將其部署至ACK叢集上,YAML樣本如下,請您結合Linux圖形應用最佳實務編寫實際的YAML檔案。
      apiVersion:v1
      kind:Pod
      metadata:
      name:unity-demo
      namespace:default
      spec:
      #由於Linux版本的Webserver樣本在使用WebSocket時只暴露了127.0.0.1地址,因此此處Pod使用宿主機網路,通過EIP訪問宿主機的方式讓瀏覽器建立WS串連。
      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
      將兩個容器放在一個Pod中,共用網路命名空間,Unity Demo會與Websever通過127.0.0.1:80進行Websocket串連,而Webserver暴露對應連接埠,等待瀏覽器訪問,建立該端串連。
    2. 執行以下命令,部署Pod。
      kubectl apply -f unity-demo.yaml

步驟三:訪問服務並查看遠程渲染效果

在瀏覽器訪問宿主機的EIP:80,然後單擊VideoPlayer Sample,訪問結果如下:
說明 通過多次訪問發現,即時顯示效果與網路環境有關,在網路通暢的情況下基本不出現卡頓的情況。