Azure遠(yuǎn)程渲染目前為公共預(yù)覽版。此預(yù)覽版在提供時(shí)沒有附帶服務(wù)級(jí)別協(xié)議,不建議將其用于生產(chǎn)工作負(fù)荷。某些功能可能不受支持或者受限。
使用Azure遠(yuǎn)程渲染(ARR)服務(wù)可以在云中渲染高質(zhì)量的交互式3D內(nèi)容,并將其實(shí)時(shí)流式傳輸?shù)紿oloLens 2等設(shè)備。
插圖顯示經(jīng)過渲染的高質(zhì)量交互式3D汽車引擎示例。
離線設(shè)備的計(jì)算能力有限,很難渲染復(fù)雜的模型。同時(shí),在許多應(yīng)用場(chǎng)合中,視覺保真度出現(xiàn)任何形式的下降都是不可接受的。以下屏幕截圖比較的是細(xì)節(jié)完整的模型以及使用常用的內(nèi)容創(chuàng)建工具簡(jiǎn)化后的模型:
示例模型
簡(jiǎn)化后的模型包含大約200,000個(gè)三角形(包括詳細(xì)的內(nèi)部部分),而原始模型中有超過1800萬個(gè)三角形。
遠(yuǎn)程渲染解決了此問題,因?yàn)樗梢詫秩竟ぷ髫?fù)載轉(zhuǎn)移到云中的高端GPU。云托管的圖形引擎可以渲染圖像,將圖像編碼為視頻流,然后將編碼的內(nèi)容流式傳輸?shù)侥繕?biāo)設(shè)備。
混合渲染
在大多數(shù)應(yīng)用場(chǎng)合中,只是渲染復(fù)雜模型并不足夠,還需要通過自定義的UI向用戶提供功能。Azure遠(yuǎn)程渲染不強(qiáng)迫你使用專用的UI框架,它還支持混合渲染。這意味著,你可以使用首選的方法(例如MRTK)在設(shè)備上渲染元素。
在某個(gè)幀的末尾,Azure遠(yuǎn)程渲染會(huì)自動(dòng)將本地渲染的內(nèi)容與遠(yuǎn)程圖像合并到一起。它甚至可以通過適當(dāng)?shù)拈]合來做到這一點(diǎn)。
多GPU渲染
某些模型在以交互式幀速率渲染時(shí)過于復(fù)雜,即使對(duì)于高端GPU來說也是如此。尤其是在工業(yè)可視化中,經(jīng)常會(huì)遇到此問題。為了進(jìn)一步克服限制,Azure遠(yuǎn)程渲染可將工作負(fù)載分配到多個(gè)GPU。結(jié)果會(huì)合并成單個(gè)圖像,因此,該過程對(duì)于用戶而言完全是透明的。
高級(jí)體系結(jié)構(gòu)
下圖演示了遠(yuǎn)程渲染體系結(jié)構(gòu):
體系結(jié)構(gòu)
完整的圖像生成周期包括以下步驟:
1.客戶端:幀設(shè)置
a.你的代碼:處理用戶輸入并更新場(chǎng)景圖
b.ARR代碼:更新場(chǎng)景圖,并將預(yù)測(cè)的頭部姿勢(shì)發(fā)送到服務(wù)器
2.服務(wù)器端:遠(yuǎn)程渲染
a.渲染引擎在可用的GPU之間分配渲染工作負(fù)載
b.多個(gè)GPU的輸出組合成單個(gè)圖像
c.將圖像編碼為視頻流,并將其發(fā)送回客戶端
3.客戶端:最終確認(rèn)
a.你的代碼:渲染可選的本地內(nèi)容(UI、標(biāo)記等)
b.ARR代碼:提供的本地渲染內(nèi)容自動(dòng)與視頻流合并
網(wǎng)絡(luò)延遲是主要問題。通常情況下,從發(fā)送請(qǐng)求到接收結(jié)果的周轉(zhuǎn)時(shí)間相對(duì)于交互式幀速率而言太長(zhǎng)。因此,隨時(shí)都可能會(huì)有多個(gè)幀處于急速傳輸狀態(tài)。