本文介紹如何使用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版本為例進行說明。
- 在Unity Editor中單擊 ,然後在左上方單擊 。
- 輸入並搜尋com.unity.renderstreaming@3.1.0-exp.2,然後單擊Add。
- 在彈出的對話方塊單擊Yes,進行專案重啟。重啟後,在Package Manager頁面可以看到Unity Render Streaming包已經匯入。
- 在Package Manager頁面的Samples地區下,單擊Import,匯入官方的Example。本文以匯入官方1.19 MB的Example Samples為例。匯入後,可以看到Assets目錄已更新。
- 在頁面左上方單擊 ,配置Platform為Windows, Mac, Linux,Target Platform為Linux,Scenes為WebBrowserInput,然後單擊Build,命名為mac-linux。建立完成後,檔案目錄如下圖所示:
- 在頁面左上方單擊 ,下載服務應用。除了編譯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。
- 容器化Unity應用以及對應的Webserver。
- 容器化Unity應用。具體操作,請參見Linux圖形應用最佳實務。基礎鏡像請選擇對應的版本,具體請參見Editor。本文使用ubuntu-2021.3.2f1-mac-mono-1.0.1作為基礎鏡像,在其基礎上安裝依賴包:vulkan-util 、libc++1 、 libc++abi1。
- 容器化Webserver。Webserver的容器化和大多Web型應用類似,Dockfile樣本如下:
FROMubuntu:20.04 WORKDIR/run COPYwebserver./ CMDwebserver-w
- 容器化Unity應用。具體操作,請參見Linux圖形應用最佳實務。
- 編寫並部署YAML檔案。
- 使用以下內容,建立unity-demo.yaml檔案。得到Unity應用和Webserver兩個鏡像後,將其部署至ACK叢集上,YAML樣本如下,請您結合Linux圖形應用最佳實務編寫實際的YAML檔案。
將兩個容器放在一個Pod中,共用網路命名空間,Unity Demo會與Websever通過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
127.0.0.1:80
進行Websocket串連,而Webserver暴露對應連接埠,等待瀏覽器訪問,建立該端串連。 - 執行以下命令,部署Pod。
kubectl apply -f unity-demo.yaml
- 使用以下內容,建立unity-demo.yaml檔案。
步驟三:訪問服務並查看遠程渲染效果
在瀏覽器訪問宿主機的EIP:80,然後單擊VideoPlayer Sample,訪問結果如下:
說明 通過多次訪問發現,即時顯示效果與網路環境有關,在網路通暢的情況下基本不出現卡頓的情況。