英偉達(dá)林耀南:如何用5大技術(shù)讓VR產(chǎn)品告別體驗(yàn)差?

巫盼 9年前 (2016-11-25)

如果你是一位剛?cè)胄械腃P,對(duì)于顯卡優(yōu)化的基本概念還不清楚;如果你在從事硬件開(kāi)發(fā),想系統(tǒng)了解如何優(yōu)化VR體驗(yàn);那么這篇文章,值得收藏、細(xì)讀。

英偉達(dá)林耀南:如何用5大技術(shù)讓VR產(chǎn)品告別體驗(yàn)差?

本文您將了解到:

1.影響VR產(chǎn)品體驗(yàn)的原因是什么?

2.如何提升VR產(chǎn)品體驗(yàn)?

VR產(chǎn)品層出不窮,但用戶(hù)的體驗(yàn)卻一直沒(méi)有達(dá)到最佳狀態(tài)。

畫(huà)面真實(shí)度差和延遲造成的眩暈感是影響VR產(chǎn)品體驗(yàn)的兩大重要原因。

既然從軟件到硬件都急需進(jìn)行優(yōu)化,那么究竟產(chǎn)品的優(yōu)化應(yīng)該如何進(jìn)行?這其中又有哪些方式?

本期(第15期)來(lái)自英偉達(dá)亞太GPU產(chǎn)品總監(jiān)林耀南在VRWDC世界虛擬現(xiàn)實(shí)開(kāi)發(fā)者論壇的分享:如何用5大技術(shù)提升VR產(chǎn)品的體驗(yàn)?

在分享之前,我想先提一個(gè)問(wèn)題:在你交男/女朋友的時(shí)候,第一次約會(huì)是否重要呢?

我相信在座大部分的朋友都會(huì)回答:重要。第一次約會(huì)對(duì)于雙方而言,都是一個(gè)很重要的體驗(yàn)。一旦這次的體驗(yàn)出了問(wèn)題,你就不再有和對(duì)方繼續(xù)發(fā)展下去的欲望了。

回到我的主題,我想表達(dá)的是,對(duì)于虛擬現(xiàn)實(shí)(價(jià)值菌:以下簡(jiǎn)稱(chēng)VR)產(chǎn)業(yè)而言,用戶(hù)的體驗(yàn)也十分重要。

而VR產(chǎn)業(yè)現(xiàn)在恰恰面臨著一種情況——在硬件設(shè)備并不普及的情況下,大多數(shù)用戶(hù)通過(guò)一些并不舒適的或簡(jiǎn)易的設(shè)備來(lái)體驗(yàn),這可是有點(diǎn)給VR產(chǎn)品的體驗(yàn)判了死刑。

明明有一些VR產(chǎn)品體驗(yàn)非常棒,但不少用戶(hù)在第一次卻經(jīng)歷了較差的體驗(yàn),從此對(duì)VR產(chǎn)品不再感冒,豈不是很可惜?

到底是什么造成了用戶(hù)比較差的VR體驗(yàn)?zāi)兀?/p>

造成用戶(hù)體驗(yàn)差的原因是什么?

●畫(huà)面真實(shí)度差

這主要取決于效能,效能是優(yōu)質(zhì)畫(huà)面的基礎(chǔ)力量。

通俗來(lái)講,絕大多數(shù)的游戲玩家一般是以1080p與30fps來(lái)進(jìn)行游戲,但VR的畫(huà)質(zhì)約為2k,描繪必須接近3k,且畫(huà)面刷新率要高于90fps才會(huì)順暢,代表執(zhí)行VR游戲的PC效能必須達(dá)到傳統(tǒng)PC的7倍。

但這很難,因此很容易造成畫(huà)面失真,影響用戶(hù)的體驗(yàn)。

●延遲造成眩暈感

玩家從當(dāng)前位置改變到另一位置時(shí)的圖像被CPU提交,GPU渲染,同步刷新到頭部顯示設(shè)備上,如果每秒有90幀的畫(huà)面,可是每一幀都比用戶(hù)的移動(dòng)慢一點(diǎn),這中間的延遲超過(guò)20ms就會(huì)導(dǎo)致用戶(hù)大腦因無(wú)力計(jì)算而發(fā)生錯(cuò)亂,臨床表現(xiàn)就是頭暈、頭暈、頭暈。

而這兩點(diǎn)也大大降低了用戶(hù)的VR產(chǎn)品體驗(yàn)。

所以我們不僅要解決效能的問(wèn)題,還要解決延遲的問(wèn)題,“天下武功,唯快不破”。那到底有哪些解決的方式呢?我們?cè)敢獍岩呀?jīng)掌握了的功能分享給大家,共同解決VR產(chǎn)品體驗(yàn)差的問(wèn)題。

如何改善VR產(chǎn)品體驗(yàn)?

一般來(lái)說(shuō),沉浸式VR體驗(yàn)(450MPixel/S)(價(jià)值菌注:MPixel/S為每秒百萬(wàn)像素)對(duì)性能的要求是普通PC游戲(60MPixel/S)的7倍。

PC游戲以1080p分辨率和30FPS刷新率為技術(shù)數(shù)據(jù),而VR游戲的實(shí)際渲染分辨率為1512×1680×2,刷新率需要達(dá)到90FPS,才能帶來(lái)良好的體驗(yàn)。

基于這樣的痛點(diǎn),我講講如何通過(guò)5 種圖形渲染方面的技術(shù)來(lái)解決這個(gè)問(wèn)題,實(shí)現(xiàn)更好的體驗(yàn)。

(價(jià)值菌:接下來(lái)一大堆專(zhuān)有名詞來(lái)襲,請(qǐng)準(zhǔn)備好詞典哦。)

? Multi-res shading 多分辨率著色

講白了,我們?cè)赩R的世界里看到直的是直的,橫的是橫的,這是因?yàn)橛幸粋€(gè)光學(xué)透鏡,通過(guò)光學(xué)透鏡可以看到圖片,所以我們必須做反扭曲(undistortion),來(lái)看到一個(gè)完美的世界。

但是做反扭曲,卻不是很容易的,這會(huì)浪費(fèi)很多其他項(xiàng)目。

我們所看到的畫(huà)面在眼鏡里其實(shí)沒(méi)有完全成像,只成像了一半,大部分的地方都是黑的,這些都沒(méi)有成像,那我為什么要畫(huà)那么大?

我畫(huà)了150份最后只顯示100份,太浪費(fèi)。

而Multi-res shading的基本原理是,將圖形渲染與VR頭盔的光學(xué)變形情況結(jié)合起來(lái)。

由于VR頭盔貼近眼球,所以需要一組鏡片幫助用戶(hù)對(duì)焦。但因?yàn)殓R片的存在,會(huì)導(dǎo)致畫(huà)面發(fā)生畸變,所以需要對(duì)畫(huà)面進(jìn)行畸變補(bǔ)償。

畸變補(bǔ)償?shù)漠?huà)面所需信息,比GPU渲染出的畫(huà)面要少很多(鏡片光路損失一部分,同時(shí)人眼對(duì)視覺(jué)中心比邊緣看得更清楚)。所以 GPU 本質(zhì)上做了很多無(wú)用功。

Multi-res shading 要做的就是,把每一幀的畫(huà)面分成多個(gè)部分,中間保留更多細(xì)節(jié),而邊緣保留較少細(xì)節(jié)。換個(gè)角度就是壓縮畫(huà)面,從而提升渲染速度。

所以當(dāng)我們把游戲切成9個(gè)部分,根據(jù)9個(gè)部分,中間形變最少采取100%的分辨率,剩下的開(kāi)發(fā)商可以自己填,填完之后在沒(méi)有減少視覺(jué)的差異下,還是100%,不會(huì)浪費(fèi)。

? Front Buffer Rendering前緩沖渲染

我剛剛講,天下武功為快不破,這里就要通過(guò)直接對(duì)前緩沖渲染來(lái)減少延遲。

前緩沖渲染技術(shù)原理跟直接模式相關(guān)。

簡(jiǎn)單來(lái)講,如果電腦把 VR 頭盔當(dāng)做普通的顯示器的話,就需要通過(guò)標(biāo)準(zhǔn)的兩級(jí)緩沖模式進(jìn)行渲染。而識(shí)別成 VR頭盔的話,就可以越過(guò) Back Buffer 直接進(jìn)入 Front Buffer,從而減少延遲。

? Context Priority上下文優(yōu)先級(jí)

Context Priority可控制GPU調(diào)度以支持各種先進(jìn)的VR功能,像是異步時(shí)間扭曲。

稍微解釋一下什么是異步時(shí)間扭曲。

它是指在一個(gè)線程(稱(chēng)為ATW線程)中進(jìn)行處理,這個(gè)線程和渲染線程并行運(yùn)行。在每次同步之前,ATW線程根據(jù)渲染線程的最后一幀生成一個(gè)新的幀。

可能不是很好理解,我用簡(jiǎn)單一點(diǎn)的語(yǔ)言來(lái)描述。

舉個(gè)例子。

如果轉(zhuǎn)頭過(guò)快的話,新位置的畫(huà)面還沒(méi)渲染出來(lái),或者出現(xiàn)的是前一個(gè)位置的畫(huà)面,就會(huì)引起不適。

怎么解決這個(gè)問(wèn)題呢?

技術(shù)專(zhuān)家想到一種方法,即人為插入一個(gè)根據(jù)位置計(jì)算出來(lái)的幀來(lái)占位。

GPU 需要一個(gè)獨(dú)立的線程來(lái)做這件事,搶在下一幀出現(xiàn)之前占位,從而減少畫(huà)面的延遲(或因?yàn)榈魩鸬亩秳?dòng))。

如此不僅能縮減延遲,當(dāng)游戲玩家移動(dòng)頭部時(shí)還能快速調(diào)整顯示影像,無(wú)須重新渲染畫(huà)面。

? VR SLI 多顯卡支持

這需要用到CPU,以確保兩個(gè)眼睛看到同一點(diǎn)。

這里就需要通過(guò)增加顯卡來(lái)增強(qiáng)渲染性能。

人有雙眼,所以VR圖像都被渲染成左右兩個(gè)畫(huà)面。

但是這兩個(gè)畫(huà)面是不一樣的,這就額外增加了CPU和GPU的占用。

雖然,有些計(jì)算不需要算兩遍,比如物理計(jì)算,陰影圖,游戲邏輯等,但實(shí)際視角包含的畫(huà)面肯定需要重新計(jì)算,以保證正確的時(shí)差和深度信息。

所以說(shuō),在有些極端情況下,虛擬現(xiàn)實(shí)渲染模式下GPU用量是翻番了的。

在這種情況下,如果使用兩塊顯卡,并行處理左右兩個(gè)畫(huà)面,就可以解決好了。

也就是說(shuō),一塊顯卡處理左眼的畫(huà)面,另一塊處理右眼的畫(huà)面,最后整合在一起輸出。

這個(gè)方法可以大大提升計(jì)算效率,卻也不會(huì)增加延遲。

舉一個(gè)例子。

常規(guī)多顯卡渲染即:

顯卡0和顯卡1輪流渲染第n幀和第n1幀,但是要求CPU提交得足夠快,因?yàn)镃PU要提交兩份DRAWCALL,CPU不能成為瓶頸。

而經(jīng)過(guò)改進(jìn)之后:

讓顯卡0和顯卡1分別負(fù)責(zé)繪制左右兩眼,而CPU為兩個(gè)顯卡提供一模一樣的DRAWCALL,因?yàn)樵赩R的兩眼繪制的東西基本是一樣的,除了PERSPECTIVE矩陣不一樣。

而VRWORKS通過(guò)其API,實(shí)現(xiàn)了一組DRAWCALL對(duì)多個(gè)顯卡的廣播,可以為不同顯卡設(shè)置不同的PERSPECTIVE(常量)。這樣CPU一份DRAWCALL對(duì)于兩眼,而兩眼的繪制在兩個(gè)CPU并行,延遲大大節(jié)省。

? DIRECT MODE 直接模式

這個(gè)模式使得GPU與頭戴式可視設(shè)備之間,能夠具備良好的即插即用兼容性。

它能兼容各種虛擬現(xiàn)實(shí)頭盔,即插即用。傳統(tǒng)的渲染,PC顯示器會(huì)把VR眼鏡作為顯示器的一個(gè)顯示擴(kuò)展,VR眼鏡和GPU是沒(méi)有直接交互的。

而透過(guò)Direct Mode (直連模式),我們的繪圖處理器驅(qū)動(dòng)程式就有能力,把頭戴裝置辨識(shí)成一部VR顯示器,而不僅僅是一個(gè)標(biāo)準(zhǔn)的桌面顯示器,因此能提供更接近無(wú)縫的用戶(hù)體驗(yàn)。

VR體驗(yàn)的重點(diǎn),是得匹配人類(lèi)的四大感官才可以得到很大的體驗(yàn)。我也希望以上所提到的五種技術(shù),可以幫助開(kāi)發(fā)者真正提升VR產(chǎn)品的用戶(hù)體驗(yàn)。

最后,記得關(guān)注微信公眾號(hào):鎂客網(wǎng)(im2maker),更多干貨在等你!

鎂客網(wǎng)


科技 | 人文 | 行業(yè)

微信ID:im2maker
長(zhǎng)按識(shí)別二維碼關(guān)注

硬科技產(chǎn)業(yè)媒體

關(guān)注技術(shù)驅(qū)動(dòng)創(chuàng)新

分享到