VR陀螺11月23日消息,在2020Google開發(fā)者大會(huì)最后一天,關(guān)于ARCore的深度API技術(shù)演講如期舉行。ARCore 1.18 中發(fā)布的深度 API,賦能數(shù)以億計(jì)的 Android 設(shè)備,在只是使用一個(gè) RGB 攝像頭的情況下,生成深度圖。本演講介紹什么是深度 API,它如何工作,以及開發(fā)者如何可以利用它創(chuàng)造出有趣且真實(shí)的 ARCore 應(yīng)用。
Google 技術(shù)布道師周克忠與Google 軟件工程師Eric Turner以“使用深度 API 提升 AR 的真實(shí)性”為主題進(jìn)行了演講。演講的前半部分,周克忠介紹了ARCore的最新功能,包括深度API是什么,它可以解決什么問(wèn)題等;后半部分,Eric介紹了ARCore如何實(shí)現(xiàn)深度API。
一、深度API是什么?它可以解決什么問(wèn)題?
之前Google大中華區(qū)ar/vr負(fù)責(zé)人熊子青也曾講述,ARCore是Google為安卓平臺(tái)制作的AR開發(fā)平臺(tái),目前在全球支持超過(guò)5億臺(tái)設(shè)備。其核心能力是運(yùn)動(dòng)追蹤、環(huán)境理解和光估測(cè)?,F(xiàn)在已經(jīng)有很多APP使用ARCore制作出各種各樣的豐富體驗(yàn)。
通過(guò)ARCore制作的應(yīng)用看上去很逼真,但是實(shí)際體驗(yàn)上,這些虛擬內(nèi)容看起來(lái)好像他們就是手機(jī)膜一樣被貼到手機(jī)屏幕上,他們并不是真的在現(xiàn)實(shí)世界里面,這里缺少的就是遮擋,會(huì)破壞ARCore應(yīng)用的真實(shí)感。
深度API的加入,可以解決虛擬對(duì)象缺乏真實(shí)感的問(wèn)題,能夠消除違和感。
二、如何實(shí)現(xiàn)遮擋?
首先我們需要定義深度。如圖C點(diǎn)是攝像機(jī)的位置,Z軸是攝像機(jī)的主軸,A點(diǎn)表示一個(gè)現(xiàn)實(shí)的物體,從C到A的深度則被定義為線段CA在Z軸的投影。此為場(chǎng)景物體的深度軸。
根據(jù)深度信息,智能手機(jī)就能夠渲染虛擬物體。在著色渲染器里面計(jì)算每一個(gè)像素點(diǎn)的時(shí)候,我們將當(dāng)前像素點(diǎn)的深度值,和之前在這個(gè)像素點(diǎn)所渲染過(guò)的顏色的深度值進(jìn)行對(duì)比。
如果之前的像素點(diǎn)深度值更低,那么就意味著它更近;相反,則更遠(yuǎn)。就這樣便可以實(shí)現(xiàn)基于深度的遮擋效果。
三、除了遮擋,深度API增強(qiáng)真實(shí)感的其他方式
1.AR光標(biāo)。在AR應(yīng)用里面,用戶可以把定點(diǎn)的光標(biāo)貼合深度API生成的網(wǎng)格,此時(shí)光標(biāo)就變成了在現(xiàn)實(shí)世界存在的AR光標(biāo)。目的是更好地幫助用戶理解現(xiàn)在所看到、所對(duì)準(zhǔn)的具體位置,以及這個(gè)位置的形狀。
2.物理交互。比如如圖所示,將一個(gè)虛擬物體丟到健身自行車上面,讓AR物體和真實(shí)世界的物體發(fā)生物理碰撞,進(jìn)行物理模擬。
3.表面交互。通過(guò)讓AR角色在識(shí)別真實(shí)物體表面的高低起伏,從而做出更加真實(shí)的前進(jìn)路線,甚至可以繞開障礙物。
周克忠還介紹了目前團(tuán)隊(duì)發(fā)表的論文《Depth Lab:Real-time 3D Interaction with Depth Maps for Mobile Augmented Reality》(UIST,2020),論文主要關(guān)于如何從深度信息實(shí)現(xiàn)以上功能,以及深度信息可以開啟怎樣的應(yīng)用場(chǎng)景。
四、如何實(shí)現(xiàn)復(fù)雜的用法?
團(tuán)隊(duì)利用了三種輔助數(shù)據(jù)結(jié)構(gòu)來(lái)幫助計(jì)算。
第一種數(shù)據(jù)結(jié)構(gòu)就是一個(gè)深度數(shù)組,可以在屏幕上進(jìn)行局部坐標(biāo)的深度信息查詢。
第二種是深度網(wǎng)格,可以用來(lái)和真實(shí)物體的表面進(jìn)行交互。注意這里是平面坐標(biāo)系的網(wǎng)格,畢竟世界坐標(biāo)系的網(wǎng)格運(yùn)算量過(guò)大,一般手機(jī)無(wú)法承載。
第三種是深度貼圖,對(duì)GPU能處理的每一個(gè)像素都提供對(duì)應(yīng)的深度值。
這三種結(jié)構(gòu)在Depth Lab(深度API應(yīng)用程序)都有提供代碼,是一個(gè)開源項(xiàng)目,提供給開發(fā)者進(jìn)行自主設(shè)計(jì)。
五、關(guān)于局部、表面和密集深度貼圖的方法
通過(guò)使用深度數(shù)組,用戶可以查詢局部的點(diǎn)的信息,以及這個(gè)點(diǎn)周圍的局部區(qū)域的深度信息。
局部深度用法中,只用某些點(diǎn)的深度估測(cè)值,可以用于測(cè)量、3D資源的放置和碰撞檢測(cè)。也可以配合多點(diǎn)的深度,實(shí)現(xiàn)簡(jiǎn)單的AR角色的障礙規(guī)避。比如說(shuō)通過(guò)深度信息查詢環(huán)境中一個(gè)點(diǎn)與另一個(gè)點(diǎn)的實(shí)際距離。
表面深度用法,是基于深度信息快速構(gòu)建屏幕空間的網(wǎng)格模型,利用游戲引擎進(jìn)行網(wǎng)格交互。表面深度算法讓我們可以在3D網(wǎng)格上面實(shí)現(xiàn)光照、物理效果、陰影等功能。
密集深度用法,即通過(guò)在深度貼圖上直接進(jìn)行操作,以實(shí)現(xiàn)復(fù)雜的逐像素特效。由于深度貼圖上的每個(gè)像素都有深度值,使得計(jì)算量特別大。一般的屏幕空間網(wǎng)格,其實(shí)是經(jīng)過(guò)相當(dāng)?shù)暮?jiǎn)化后的網(wǎng)格,而ARCore把計(jì)算量移到了GPU上,減小了手機(jī)的計(jì)算負(fù)擔(dān)。
第二部分里,在周克忠介紹深度API實(shí)際運(yùn)作方式的基礎(chǔ)上,Eric通過(guò)具體例子進(jìn)行了補(bǔ)充。
六、深度API原理剖析
一般而言,手機(jī)需要配備特殊的深度硬件才能實(shí)現(xiàn)深度識(shí)別,比如ToF深度傳感器,但實(shí)際上并不需要特殊設(shè)備,只需要有攝像頭,就可以實(shí)現(xiàn)ARCore的深度API功能。
如圖,左邊是手機(jī)相機(jī)拍攝的原始圖像,右邊是深度API為此場(chǎng)景生成的深度。用戶可以近距離觀察單車,也可以遠(yuǎn)距離觀察遠(yuǎn)處的門和走廊,分別對(duì)應(yīng)的顏色是紅色和藍(lán)色,表示近處和遠(yuǎn)處。
這意味著無(wú)論AR應(yīng)用在做什么,它都可以獲取整個(gè)場(chǎng)景中的每個(gè)幀的深度信息。根據(jù)相機(jī)的運(yùn)動(dòng)生成深度信息,如藍(lán)色幀為遠(yuǎn)處,紅色幀為近處,這些幀會(huì)被最后的相機(jī)畫面幀(黑色)引用為立體匹配關(guān)鍵幀。過(guò)去的幀與當(dāng)前的幀之間的基線,可用來(lái)估算場(chǎng)景的立體深度。
但Eric提到,基于用戶自然移動(dòng)的規(guī)則,團(tuán)隊(duì)為此添加了一些限制。因此與傳統(tǒng)的并行立體匹配相比,設(shè)計(jì)基于自然移動(dòng)的深度API則存在一些挑戰(zhàn)。
傳統(tǒng)的并行立體匹配可以全面控制相機(jī)之間的相對(duì)位置。而在典型AR應(yīng)用中,對(duì)于隨機(jī)相機(jī)移動(dòng),團(tuán)隊(duì)無(wú)法控制相機(jī)的位置,即用戶在進(jìn)行自由移動(dòng)時(shí),相機(jī)可能在任何方向。
而目前,ARCore深度API添加了智能圖像處理功能,以確保整個(gè)圖像都具有準(zhǔn)確的深度。除此之外,還能夠補(bǔ)償速度匹配錯(cuò)誤、運(yùn)動(dòng)模糊、自動(dòng)聚集聚焦變化或自然移動(dòng)導(dǎo)致的小于正?;€的問(wèn)題等。
深度API的完整流程是:
實(shí)時(shí)圖像-形成關(guān)鍵幀池-篩選出關(guān)鍵幀-根據(jù)智能算法剔除無(wú)效關(guān)鍵幀-立體匹配-使關(guān)鍵幀平滑-調(diào)用深度API-實(shí)現(xiàn)渲染遮擋。
其亮點(diǎn)在于,即使是一面空白無(wú)特征的墻,ARCore的深度API仍然能夠生成正確表示該空白墻的深度圖像。
其原理是,如圖所示,白墻是黃色幀,箱子是橙色幀。在圖二的中間,可以看到偽色深度圖像,正確呈現(xiàn)了場(chǎng)景中的物體的遠(yuǎn)近位置。而圖三則是以點(diǎn)云代替顏色,進(jìn)行了側(cè)面視角觀察,但同樣能以垂直點(diǎn)表示墻面、水平點(diǎn)表示箱子,準(zhǔn)確判斷出墻和箱子的相對(duì)距離。
演講的最后,周克忠總結(jié),實(shí)現(xiàn)深度API最大的難點(diǎn)是怎么擴(kuò)展這個(gè)能力。到數(shù)以億計(jì)的安卓設(shè)備上設(shè)計(jì)深度API的時(shí)候,一方面我們需要盡可能的呃讓它的結(jié)果準(zhǔn)確精確,另外我們需要盡量去減少它的計(jì)算量,以盡量支持更多的已有設(shè)備。
而近年來(lái),Google一直在進(jìn)行深度API的優(yōu)化,以減少它的計(jì)算量。
投稿/爆料:tougao@youxituoluo.com
稿件/商務(wù)合作: 六六(微信 13138755620)
加入行業(yè)交流群:六六(微信 13138755620)
元宇宙數(shù)字產(chǎn)業(yè)服務(wù)平臺(tái)
下載「陀螺科技」APP,獲取前沿深度元宇宙訊息