【Unity】云渲染

1 前言

????????最近在搞Unity云渲染的東西,所以研究了下官方提供的云渲染方案Unity Renderstreaming。注:本文使用的Unity渲染管線是URP。

2 文檔

????????本文也只是介紹基本的使用方法,更詳細內容參閱官方文檔。官方文檔:Unity Renderstreaming文檔。

3 簡單云渲染實現

3.1 系統結構

????????如上圖,一個Web服務器,兩個對等用戶。在渲染流媒體中,兩個對等方之間會創建一個P2P網絡,并且這個網絡會發送視頻/音頻/二進制數據。?Web服務器?使兩個對等方之間能夠進行通信。這種通信被稱為?信令(signaling)

? ? ? ? 這是文檔中的部分內容,這里提一下可以先對整體結構有個了解。

3.2 安裝Unity Renderstreaming

????????在Unity 的Package Manager中通過git URL來添加包:

之后將com.unity.renderstreaming填入其中點擊Add即可。

添加時可能會提示需要Unity新的輸入系統Input System Package,點擊Yes即可。

? ? ? ? 之后可打開RenderStreaming的設置窗口,Unity Editor→Window→Render Streaming→Render Streaming Wizard:

初次打開時是設置窗口中會報有錯誤,點擊Fix All按鈕修復即可:

3.3 安裝WebRTC

? ? ? ? 這里通過Render Streaming提供的示例項目來導入WebRTC包,導入示例項目,然后WebRTC包就自動安裝了。

點擊Import安裝,這里因為我安裝過了,所以顯示的是Reimport。之后就可以看到WebRTC安裝完畢了:

3.4 安裝NodeJS

????????需要安裝到電腦上,來提供一個JavaScript運行環境。這個可以選擇安裝,具體什么時候需要會在后面說明,這里可以先不安裝。

NodeJS官網鏈接

? ? ? ? 進入官網,點擊左上角的Download按鈕,進入下載頁面:

這里我選擇的是Windows平臺64位,然后下載了安裝文件Windows installer。之后點擊安裝即可,路徑若無要求,則一路往下按就行。

? ? ? ? 安裝完成后需要檢查是否安裝成功。在電腦左下角搜索框輸入cmd,點擊回車打開命令行窗口,輸入如下命令檢查:

若安裝成功,將會如上圖所示輸出版本號;若失敗,則會無法識別輸入命令。

3.5 下載WebServer

????????官方提供的有一個WebServer,我們下載使用即可。GIt地址:WebServer。

【圖略,網頁當時打不開就沒截圖了】

????????在Release頁面中可以找到不同版本的WebServer。這里我們選擇3.1.0-exp.7版本,下載其中的webserver.exe,這是編譯好的可執行程序。源碼也可以下載一份留存,其中包含對應版本的UnityRenderStreaming包、webserver源碼。

????????3.1.0-exp.9版本則沒有提供可執行程序下載,若想使用此版本的,則需要自己編譯源代碼生成webserver.exe,那么這時就需要安裝NodeJS,按照前面章節的操作安裝即可。編譯源碼生成.exe可執行程序的方法如下:

  1. cmd打開命令行窗口。
  2. cd命令進入WebServer源碼文件中的WebApp文件夾。
  3. npm install,安裝依賴。
  4. npm run build,構建項目。
  5. npm run start,啟動項目(服務),等價于webserver.exe啟動,啟動后看看是否正常。
  6. npm run pack,啟動沒問題后使用此命令打包生成.exe可執行程序,方便后續啟動。

參考官方文檔:Customize web application。

? ? ? ? 那么如何使用webserver.exe啟動服務?這里不能點擊執行,需要通過命令行執行。流程如下:

  1. cmd打開命令行窗口。
  2. 進入到webserver.exe所在的文件夾(命令:cd + 路徑)。
  3. 執行webserver.exe(命令:webserver.exe,如果要制定端口的話為webserver.exe -p 端口號)。

如圖,啟動成功,此狀態即為服務運行中。

3.6 創建Unity場景

????????服務啟動成功了,但在開始體驗云渲染之前,我們還需要搭建好一個Unity場景。在Unity中創建一個空場景。

3.6.1 配置Renderstreaming組件

? ? ? ? 需要對Renderstreaming組件進行一些配置。這里主要是在Unity場景中配置一些包中提供的可用組件。

? ? ? ? 在場景中創建一個空對象命名隨意,這里我命名為“UnityRenderStreaming”。然后給此物體添加如下組件:

  • SignalingManager
  • Broadcast
  • VideoStreamSender
  • AudioStreamSender

然后對各組件進行設置:

這里設置了組件間的索引,同時將Video Source Type修改為Screen,Audio Listener設置為相機身上的Audio Listener。至于組件的其他屬性設置,目前保持默認即可。屬性具體含義可參考官方文檔。

3.6.2?配置Renderstreaming設置

? ? ? ? 點擊SignalingManager組件中的Open Project Setings按鈕,打開設置窗口。

若我們執行websever.exe時沒有指定端口,則這里使用默認的配置內容即可。若我們當時指定了端口,比如這里我指定的是8088,那么就要修改URL了。這里可以點擊Create New Settings Asset按鈕創一個新的配置資源文件(不是必須的),然后再修改URL,如圖:

使用了一個新的配置資源文件,并修改URL加上了端口號。

3.6.3 搭建場景

? ? ? ? 然后在場景中隨意創些模型,后續通過云渲染開查看此場景。目前只要能看到場景中的內容即可。

3.7 體驗云渲染

????????首先,在Unity編輯器中點擊Play運行。

????????然后打開瀏覽器(我這里使用的IE瀏覽器,瀏覽器支持情況附在本章節末尾),輸入服務地址127.0.0.1:8088,回車進入頁面(若在局域網內,其他人可通過輸入服務所在設備的IP地址+端口號來訪問)。

點擊Receiver Sample進入接收案例頁面,然后點擊窗口中的播放按鈕接收畫面。

可以看到我們成功看到了畫面,此時我們就成功實現了云渲染。畫面對網絡要求挺高的,在網絡較差時畫面會比較卡且模糊。

Unity Render Steaming對瀏覽器支持情況

4 外網訪問

????????參考官方文檔:Setting for TURN Servers。目前還未研究,暫時貼在這里。

? ? ? ? 按文檔說法,不一定需要這個,可以在運行webserber.exe后看命令行窗口中是否顯示公網IP,若顯示則應該可以讓外網訪問,我沒測試,自己測吧。不通了再考慮防火墻和Turn服務器等問題。

5 官方案例

? ? ? ? 官方文檔中也有提供幾個案例,這里挑一些說一說。當然,這里只是簡單介紹案例,案例提供的功能具體實現方式還是要去自己研究源碼。

????????首先需要做兩步:

  1. 運行webserver服務器(參考前面章節),這里我設置的端口為8088,所以用的地址為:http://127.0.0.1:8088。
  2. 打開Unity編輯器,可以在安裝的Unity Render Steaming案例文件中找到Menu場景,點擊進去,然后啟動Unity編輯器。

5.1 Receiver

? ? ? ? 接收畫面案例。

? ? ? ? 在運行的Unity編輯器的Menu場景中,點擊Broadcast按鈕,可以進入一個測試場景。然后打開web瀏覽器,輸入服務器地址(同前面章節),點擊Receiver即可看到場景內容。這個實例實際跟前面的“體驗云渲染”章節內容差不多,只不過這里的測試場景是官方提供的。

場景UI提供了一些可設置屬性:畫面源(分屏幕與相機)、帶寬、下采樣(降低畫面清晰度,減少帶寬壓力)、幀率、分辨率。左側是燈光開關、音頻播放按鈕。

? ? ? ? 另外,我們也可以在編輯器中將項目打包,初始場景設置為Menu場景。打包后,點擊可執行程序運行,然后在Menu場景中點擊Receiver進入接收場景,輸入一個隨意的ID,點擊Start按鈕后,也可以接收到測試場景畫面。只不過在可執行程序接收的畫面中不能操作,可能是是官方案例沒有提供非web的操作,也可能是我沒有配置好新的輸入系統,這里暫時不管了。

? ? ? ? 可以多個打包的可執行程序來接收畫面,也可以多個瀏覽器接收畫面,即多端接收,這些畫面是同一個畫面,一端操作,其他端也可以看到操作。

5.2?Broadcast

? ? ? ? 廣播畫面案例。

? ? ? ? 因為5.1在演示接收時使用了本節案例(官方行為)。所以本節內容與5.1是一樣的,不再說明。Broadcast案例的提供是為了說明畫面廣播功能,我們已在5.1中說明,即多端接收。

5.3?Web Browser Input

? ? ? ? web瀏覽器端輸入案例。

? ? ? ? 主要展示瀏覽器中輸入檢測,以及單獨的畫面展示。

????????與Broadcast很相似。首先輸入檢測Broadcast也有,它們原理是一樣的,都是借助新的輸入系統,只是輸入后的處理方法不同(Broadcast只展示輸入,這里是展示+移動視角)。關于單獨畫面展示,在瀏覽器接收的畫面中多展示了一個小窗畫面,主畫面是編輯器中WebBrowserInput場景的Camera1畫面,而小窗口畫面是Camera2畫面。

5.4?Multiplay

????????多端接收案例。

? ? ? ? 這里的多端是特殊的,Receiver與Broadcast案例中有提到多端接收,但它們的多端是指廣播接收,收到的畫面是一樣的,而本案例中的多端指它們可以接收到不同的畫面,如每個終端所接收的都是獨屬于自己的Camera的畫面。

? ? ? ? 同樣的在編輯器中的Mune場景中,點擊Multiplay按鈕:

然后可以選擇Host與Guest,即主機與用戶,這里我們將編輯器作為主機,需要勾選Host,用戶名可以自定義輸入。

然后點擊Start進入場景:

目前場景中就我們一個(小球貼圖丟失,問題不大),接下來使用瀏覽器或者打包的可執行程序都可以,我們這里用瀏覽器,在瀏覽器中點擊Multiplay Sample鏈接,然后點擊按鈕接收畫面:

可以看到,我們也進入了此場景,就像聯網游戲一樣,多個玩家在同一個場景中,大家都有各自的視角畫面展示。瀏覽器的用戶名是自動生成的,如果使用打包的可執行程序的話是可以自定義的,這里就不演示了。

6 問題

6.1 畫面顯示不全

? ? ? ? 問題:有時候在終端接收畫面時會出現畫面只顯示了一部分的情況。

? ? ? ? 解決:這是因為接收畫面設置的分辨率與畫面源的分辨率是設置不一致導致的,故將兩者設置相同即可。

7 后記

? ? ? ? 暫時這些吧。想深入了解,則文檔、Unity Render Streaming源碼、示例代碼都要看一看才行,不過最大的問題還是web服務器這塊,畢竟涉及JS方面的內容。

參考

  1. 官方文檔 Unity Render Streaming
  2. Unity Renderstreaming 云渲染入門教程 - 技術專欄 - Unity官方開發者社區
  3. Unity 云渲染本地部署方案_unity 中使用云渲染-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82376.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82376.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82376.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

組相對策略優化(GRPO):原理及源碼解析

文章目錄 PPO vs GRPOPPO的目標函數GRPO的目標函數KL散度約束與估計ORM監督RL的結果PRM監督RL的過程迭代RL算法流程 GRPO損失的不同版本GRPO源碼解析 DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models PPO vs GRPO PPO的目標函數 J P P O…

Linux或者Windows下PHP版本查看方法總結

確定當前服務器或本地環境中 PHP 的版本,可以通過以下幾種方法進行操作: 1. 通過命令行檢查 這是最直接且常用的方法,適用于本地開發環境或有 SSH 訪問權限的服務器。 方法一:php -v 命令 php -v輸出示例:PHP 8.1.12 (cli) (built: Oct 12 2023 12:34:56) (NTS) Copyri…

[Linux] MySQL源碼編譯安裝

目錄 環境包安裝 創建程序用戶 解壓源碼包 配置cmake ?編輯編譯 安裝 配置修改屬性 屬主和屬組替換成mysql用戶管理 系統環境變量配置 初始化數據庫 服務管理 啟動 環境包安裝 yum -y install ncurses ncurses-devel bison cmake gcc gcc-c 重點強調:采…

【C++項目】負載均衡在線OJ系統-1

文章目錄 前言項目結果演示技術棧:結構與總體思路compiler編譯功能-common/util.hpp 拼接編譯臨時文件-common/log.hpp 開放式日志-common/util.hpp 獲取時間戳方法-秒級-common/util.hpp 文件是否存在-compile_server/compiler.hpp 編譯功能編寫(重要&a…

轉戰海外 Web3 遠程工作指南

目錄 一、明確職業目標和技能 二、準備常用軟件 (一)通訊聊天工具 (二)媒體類平臺 (三)線上會議軟件 (四)辦公協作工具 (五)云存儲工具 (六…

MongoDB賬號密碼筆記

先連接數據庫,新增用戶密碼 admin用戶密碼 use admin db.createUser({ user: "admin", pwd: "yourStrongPassword", roles: [ { role: "root", db: "admin" } ] })用戶數據庫用戶密碼 use myappdb db.createUser({ user: &…

CSS強制div單行顯示不換行

在CSS中&#xff0c;要讓<div>的內容強制單行顯示且不換行&#xff0c;可通過以下屬性組合實現&#xff1a; 核心解決方案&#xff1a; css 復制 下載 div {white-space: nowrap; /* 禁止文本換行 */overflow: hidden; /* 隱藏溢出內容 */text-overflow: e…

RK3568-快速部署codesys runtime

前期準備 PC-win10系統 RK3568-debian系統,內核已打入實時補丁,開啟ssh服務。PC下載安裝CODESYS Development System V3.5.17.0 https://store.codesys.com/en/codesys.html#product.attributes.wrapperPC下載安裝 CODESYS Control for Linux ARM64 SL 4.1.0.0.package ht…

中英混合編碼解碼全解析

qwen模型分詞器怎么映射的:中英混合編碼解碼全解析 中英文混合編碼與解碼的過程,本質是 字符編碼標準(如 UTF-8)對多語言字符的統一處理 ,核心邏輯圍繞“字節序列 ? 字符映射”展開 北京智源人工智能研究院中文tokenID qwen模型分詞器文件 一、編碼階段:統一轉為字節序…

React 事件處理與合成事件機制揭秘

引言 在現代前端開發的技術生態中&#xff0c;React憑借其高效的組件化設計和聲明式編程范式&#xff0c;已成為構建交互式用戶界面的首選框架之一。除了虛擬DOM和單向數據流等核心概念&#xff0c;React的事件處理系統也是其成功的關鍵因素。 這套系統通過"合成事件&qu…

冷雨泉教授團隊:新型視覺驅動智能假肢手,擬人化抓握技術突破,助力截肢者重獲生活自信

研究背景&#xff1a;日常生活中&#xff0c;健康人依靠手完成對物體的操作。對于手部截肢患者&#xff0c;手部的缺失導致他們難以有效地操作物體&#xff0c;進而影響正常的日常生活。擁有一個能夠實現擬人地自然抓取多種日常物體的五指動力假手是手部截肢患者的夙愿&#xf…

android 媒體框架之MediaCodec

一、MediaCodec 整體架構與設計思想 MediaCodec 是 Android 底層多媒體框架的核心組件&#xff0c;負責高效處理音視頻編解碼任務。其架構采用 生產者-消費者模型&#xff0c;通過雙緩沖區隊列&#xff08;輸入/輸出&#xff09;實現異步數據處理&#xff1a; 輸入緩沖區隊列…

Starrocks Full GC日志分析

GC日志樣例&#xff1a; [2025-06-03T07:36:06.1770800] GC(227) Pause Full (G1 Evacuation Pause) [2025-06-03T07:36:06.1960800] GC(227) Phase 1: Mark live objects [2025-06-03T07:36:06.9480800] GC(227) Cleaned string and symbol table, strings: 47009 processed,…

React從基礎入門到高級實戰:React 高級主題 - React 微前端實踐:構建可擴展的大型應用

React 微前端實踐&#xff1a;構建可擴展的大型應用 引言 在2025年的技術生態中&#xff0c;Web應用的規模和復雜性持續增長&#xff0c;微前端&#xff08;Micro Frontends&#xff09;已成為應對大型項目挑戰的主流架構。通過將前端應用拆分為多個獨立模塊&#xff0c;微前…

定時器:中央對齊模式剖析

中央對齊模式&#xff08;Center-Aligned Mode&#xff09;下&#xff0c;當配置為 模式3&#xff08;CMS[1:0] 11&#xff09; 時&#xff0c;定時器會同時觸發 上溢中斷&#xff08;ARR中斷&#xff09; 和 下溢中斷&#xff08;0中斷&#xff09;&#xff0c;即一個PWM周期…

MySQL強化關鍵_019_索引優化

目 錄 一、最左前綴原則 1.完全使用索引 2.部分使用索引 3.不使用索引 4.效率折損 &#xff08;1&#xff09;使用范圍查找 &#xff08;2&#xff09;索引斷開 二、索引失效場景 1. 索引列參與運算 2.索引列模糊查詢以“%”開始 3.索引列是字符串類型&#xff0c;查…

【Oracle】安裝單實例

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;Oracle 文章目錄 1. 安裝前的準備工作1.1 硬件和系統要求1.2 檢查系統環境1.3 下載Oracle軟件 2. 系統配置2.1 創建Oracle用戶和組2.2 配置內核參數2.3 配置用戶資源限制2.4 安裝必要的軟件包 3. 目錄結構和環境變量3.1 創建Ora…

6年“豹變”,vivo S30系列引領手機進入場景“體驗定義”時代

出品 | 何璽 排版 | 葉媛 5月29日晚&#xff0c;備受用戶期待的vivo S30系列如約而至。 相比前幾代S系列產品&#xff0c;S30系列變化顯著&#xff0c;堪稱“豹變”。首先&#xff0c;其產品打造思路發生了質變&#xff0c;產品體驗更好&#xff0c;綜合競爭力更為強。其次&a…

線性動態規劃

具有「線性」階段劃分的動態規劃方法統稱為線性動態規劃&#xff08;簡稱為「線性 DP」&#xff09;&#xff0c;如下圖所示。 一、概念 如果狀態包含多個維度&#xff0c;但是每個維度上都是線性劃分的階段&#xff0c;也屬于線性 DP。比如背包問題、區間 DP、數位 DP 等都屬…

Rust 學習筆記:使用自定義命令擴展 Cargo

Rust 學習筆記&#xff1a;使用自定義命令擴展 Cargo Rust 學習筆記&#xff1a;使用自定義命令擴展 Cargo Rust 學習筆記&#xff1a;使用自定義命令擴展 Cargo Cargo 支持通過 $PATH 中的 cargo-something 形式的二進制文件拓展子命令&#xff0c;而無需修改 Cargo 本身。 …