我在前面的文章中提到過目前基于WebGL的前端三維可視化存在的一些問題:
1、前端瀏覽體驗和數(shù)據(jù)量有很大關(guān)系,需要花費(fèi)大量的數(shù)據(jù)進(jìn)行數(shù)據(jù)的輕量化以及切片處理,但是同樣要忍受切片調(diào)度加載的問題;
2、前端性能的穩(wěn)定性不高,高負(fù)載的情況下容易出現(xiàn)崩潰;
3、無法支持大分辨率的場景問題;
這些問題在目前情況下似乎都是無解的,要么就是退回到CS架構(gòu);要么就是限定使用場景,比如圈定一個比較小的數(shù)據(jù)使用范圍,以此來獲得比較好的使用體驗;
但是這個都只是權(quán)宜之計,在當(dāng)下強(qiáng)調(diào)全場景內(nèi)容分發(fā)的時代,限定內(nèi)容的分發(fā)渠道肯定是不明智之舉,在數(shù)字互聯(lián)時代,所有的內(nèi)容制作者都希望盡可能觸及到更多的消費(fèi)者,將內(nèi)容能在不同的平臺上分享,包括手機(jī)、平板電腦、個人電腦以及交互式屏幕。
顯然在當(dāng)前的技術(shù)背景下繼續(xù)折騰WebGL 或者H5都是不明智,因為天花板已經(jīng)很明顯了,既然“重前端”的模式有瓶頸,那是否可以考慮將高負(fù)載的“渲染”放置到能力強(qiáng)大的后端,解放前端?
那一個理想的后端渲染方案應(yīng)該實現(xiàn)哪些特性?
1、各種終端和平臺都可以在無需安裝的前提下無縫訪問三維場景;
2、客戶端可以非常高效的訪問三維場景,無需等待數(shù)據(jù)的下載;
3、場景的交互與數(shù)據(jù)量無關(guān),在前端都可以獲得一致的訪問體驗;
為此一些游戲引擎廠商提出了一種新的三維“云渲染”方案-基于WebRTC的視頻流推送技術(shù):
UE稱之為PixelStreaming;
Unity稱之為RenderStreaming;
由于基本原理一致,就是將場景通過后端渲染,然后采用實時視頻流推送到網(wǎng)頁端,并且能夠?qū)崿F(xiàn)前端到后端的交互同步。虛幻引擎相應(yīng)的宣傳以及資料多一些,下面就以此為例介紹一下:
UE Pixel Streaming
像素流送以插件形式集成在游戲引擎中,插件會對主機(jī)服務(wù)器的圖形流信息進(jìn)行編碼,然后通過 WebRTC 協(xié) 議將其發(fā)送給位于接收端的瀏覽器和設(shè)備。事實上,通過在高性能主機(jī)系統(tǒng)上運(yùn)行渲染引擎,用戶能在所有終 端設(shè)備上享受到與主機(jī)相同的畫質(zhì),并且能體驗到所有的渲染引擎功能。
由于數(shù)據(jù)保存在主機(jī)上,并且只有像素被流送到查看設(shè)備上,所以諸如像素流送這類流送解決方案本質(zhì)上要比 客戶端下載方案更快速、更安全。此外,用戶會話數(shù)據(jù)可以在引擎中捕獲以滿足任何指標(biāo)需求。
什么是WebRTC?
WebRTC(網(wǎng)頁實時通信)是一種通過網(wǎng)頁瀏覽器和移動應(yīng)用程序進(jìn)行實時通信的協(xié)議。該協(xié)議允許以直接鏈接 的方式傳輸音頻和視頻,用戶無需下載任何插件或應(yīng)用程序。通信命令通過 API 接口提交,前端只要聲明一個<video></video>標(biāo)簽就可以實現(xiàn)視頻流的加載和交互。
如何搭建像素流架構(gòu)?
借助 WebRTC 協(xié)議,像素流送插件可以在主機(jī)服務(wù)器上與網(wǎng)絡(luò)中的服務(wù)器或客戶端進(jìn)行通信,像素流送可以通過單臺服務(wù)器運(yùn)行,也可以通過允許動態(tài)擴(kuò)展并提供足夠硬件的 GPU 云環(huán)境運(yùn)行。在這些情況 中,關(guān)鍵之處是對所需規(guī)模進(jìn)行分析,因為這直接關(guān)系到最終主機(jī)環(huán)境的成本以及用戶體驗的流暢程度。
如果某個應(yīng)用程序需要支撐大量的最終用戶訪問,并且這些用戶所使用的硬件和軟件設(shè)置五花八門,那么就需要采用擁有可延展特性的云環(huán)境來實現(xiàn)像素流送。圖中展示了多終端場景下的推流布局,該布局同樣適用于對數(shù)據(jù) 訪問存在安全要求并且需要跟蹤記錄的共享體驗。
1:虛幻引擎開發(fā)內(nèi)容 2:采用 Web RTC 協(xié)議并且位于云中的 UE4 服務(wù)器應(yīng)用程序 3:STUN/TURN 服務(wù)器 4:用戶顯
在大多案例場景中,不同用戶需要不同的交互體驗和推流內(nèi)容。該系統(tǒng)會為每個用戶運(yùn)行一個單獨(dú)的像素流 送組件堆棧,并將每個用戶指向一臺單獨(dú)的網(wǎng)絡(luò)服務(wù)器和主機(jī)。匹配器會負(fù)責(zé)將每個請求者重定向至屬于它的信令和網(wǎng)絡(luò)服務(wù)器,從而為客戶端及其 WebRTC 代理服務(wù)器建立 連接。只要用戶在服務(wù)器上一直保持活躍狀態(tài),匹配器就會不斷為用戶推流內(nèi)容。匹配器組件可以在渲染引擎 以及其他服務(wù)器組件中找到。
需要怎樣的支持環(huán)境?
每個堆棧都需要一個唯一的標(biāo)識符和端口來控制體驗。許多消費(fèi)級顯卡最多只能同時運(yùn)行兩個編碼器,從而限制了電腦上可以運(yùn)行的實例數(shù)量。對于專業(yè)級顯卡來說,例如英偉達(dá)的 Quadro 或 Tesla 系列,或者基于云的 GPU 實例(AWS)則沒有這些限制。
英偉達(dá)的 GPU 自從 Kepler 架構(gòu)開始都包含一個名為 NVENC 的硬件編碼器,它能為視頻編碼提供獨(dú)立于圖形 性能的全面硬件加速功能。通過將涉及編碼的復(fù)雜計算任務(wù)轉(zhuǎn)移到 NVENC 上,圖形引擎和 CPU 將能夠?qū)W⒂?其他操作。NVENC 使得以下工作成為可能:
- 在不使用 CPU 的情況下,以高質(zhì)量和超低延遲對游戲和應(yīng)用程序進(jìn)行編碼和推流
- 為歸檔、OTT 推流和網(wǎng)絡(luò)視頻提供極高質(zhì)量的編碼
- 單次流送編碼的功耗極低(瓦特/流送)
視頻編碼硬件 NVENC 可通過英偉達(dá)的視頻編碼解碼器 SDK 獲得。該專用加速器支持對 windows 和 linux 上 的許多常見視頻編碼解碼器進(jìn)行硬件加速編碼。
1. 硬件編碼以及像素流送的生成過程。NVENC 編碼器通過緩沖區(qū)與 CPU 和 CUDA 核心協(xié)同工作并生成像素流,然后 通過 CPU 發(fā)送到分發(fā)網(wǎng)絡(luò)中。
最后總結(jié)一下,目前基于視頻流的“云渲染”方案其實已經(jīng)有了很成熟的商業(yè)應(yīng)用,在一些小場景的可視化中使用常規(guī)的WebGL可視化技術(shù)應(yīng)該是沒有問題的,而且成本可控,但是對于一些效果要求高,數(shù)據(jù)量大,效果酷炫的場景,可能就需要考慮這種“云渲染”的方案了,還是那句話隨著未來5G的普及,這種模式應(yīng)該是可以更好的適應(yīng)未來場景下的可視化開發(fā)場景。