3
本文作者: 王銳 | 2016-06-01 10:17 |
雷鋒網(wǎng)按:作者王銳,VR行業(yè)資深從業(yè)者。在本文討論“如何用極客范兒打造HTC Vive虛擬演播室”之前,王銳還曾寫(xiě)過(guò)一篇廣受歡迎的《如何用極客范兒做一款VR頭盔?不是插個(gè)手機(jī)的那種》,有興趣的讀者可以看看。那么,打造HTC Vive虛擬演播室的原理是什么?本文將會(huì)給你答案。
HTC Vive如期在四月份開(kāi)始供貨以來(lái),已經(jīng)有相當(dāng)一部分嘗鮮者拿到了第一批產(chǎn)品,由虛擬現(xiàn)實(shí)頭盔,手柄以及Lighthouse定位裝置組成的完整的VR互動(dòng)體驗(yàn)也著實(shí)讓從業(yè)者和玩家們感到興奮。當(dāng)然,從現(xiàn)階段來(lái)看,針對(duì)Vive的內(nèi)容還遠(yuǎn)未到位,很多游戲體驗(yàn)還處在預(yù)告或者試玩的階段;更大的一波攻勢(shì)怕是還在路上,即將到來(lái)。
而在這為數(shù)不多的初期體驗(yàn)當(dāng)中,有一則有趣的新聞吸引了筆者的注意。
對(duì)于游戲者本人而言,她所看到的內(nèi)容并沒(méi)有什么實(shí)質(zhì)的變化,只是在進(jìn)行一個(gè)VR游戲并與其中的內(nèi)容和角色進(jìn)行互動(dòng)(例如下圖中的小女孩正在嘗試用手柄“吸引”電子寵物)而已。而讓人感到嘖嘖稱(chēng)奇的是,現(xiàn)場(chǎng)觀眾可以通過(guò)直播畫(huà)面看到如下的情景(圖片來(lái)自相關(guān)新聞的視頻截圖):
而實(shí)際的拍攝場(chǎng)地,則類(lèi)似下圖的布置,游戲者在一片綠色幕布的包圍下開(kāi)心地進(jìn)行玩耍,而手持?jǐn)z像機(jī)的工作人員則將她的現(xiàn)場(chǎng)表現(xiàn)通通記錄下來(lái),再與第三人稱(chēng)視角的VR游戲場(chǎng)景直接疊加,讓其他也許正在排隊(duì)等待的人能夠更真切地目睹游戲中的一切,以及預(yù)想自己即將在別人眼中呈現(xiàn)出來(lái)的英姿(或許是丑態(tài)也說(shuō)不定)。
這無(wú)疑讓一個(gè)可能的線下VR體驗(yàn)館變得熱鬧了許多,而且對(duì)于難得參與一次VR重度游戲的孩子而言,也是一次重要的經(jīng)歷,值得用這種直觀的方式記錄下來(lái),回去慢慢品味。
那么問(wèn)題就來(lái)了,這個(gè)看起來(lái)十分炫酷的游戲方式,在現(xiàn)實(shí)中有可能實(shí)現(xiàn)嗎?還是說(shuō)這只是為了宣傳而專(zhuān)門(mén)拍攝的畫(huà)面而已,或者只能專(zhuān)屬于一些領(lǐng)先的國(guó)外技術(shù)團(tuán)隊(duì)呢?
就讓我們?cè)俅闻e起極客的大旗,去努一努力好了。
首先,前文所述的種種并不是多么高深的“黑科技”,它事實(shí)上源于一個(gè)現(xiàn)實(shí)中已然到處存在的視頻制作技術(shù)——虛擬演播室(Virtual Studio System,簡(jiǎn)稱(chēng)VSS)。
這一技術(shù)的本質(zhì)是將計(jì)算機(jī)制作的虛擬場(chǎng)景(通常是三維場(chǎng)景)與現(xiàn)場(chǎng)拍攝的實(shí)時(shí)活動(dòng)畫(huà)面進(jìn)行疊加,并且確保兩幅畫(huà)面的運(yùn)動(dòng)與透視關(guān)系完全一致,從而自然和迅速地得到了虛實(shí)結(jié)合的畫(huà)面效果。在這類(lèi)應(yīng)用當(dāng)中,通常會(huì)采取前景和主持人為真實(shí)拍攝,而千變?nèi)f化的背景通過(guò)計(jì)算機(jī)實(shí)時(shí)演算生成的結(jié)合手段,并將疊加完成的效果傳遞到電視信號(hào)。例如:
很顯然主持人并不是真的站在這么一個(gè)抽象數(shù)字和圖形組成的空間里。要隨著我國(guó)的GDP突飛猛進(jìn)而經(jīng)常更新直播間的室內(nèi)裝潢,這也遠(yuǎn)不如在計(jì)算機(jī)上動(dòng)動(dòng)手指來(lái)得有效率。所以,實(shí)際的拍攝場(chǎng)地往往可能是這樣的布置:
或者也常使用藍(lán)色的背景:
要在這樣的場(chǎng)地條件下談笑風(fēng)生,還真是對(duì)演員和嘉賓能力的一種考驗(yàn)了。而這樣的演播過(guò)程同樣包含了對(duì)大量設(shè)備與技術(shù)的集成和應(yīng)用,僅僅掐指一算,就有虛擬場(chǎng)景設(shè)計(jì)與實(shí)現(xiàn),燈光,實(shí)時(shí)摳像,攝像機(jī)跟蹤,色鍵合成,視頻合成,實(shí)時(shí)轉(zhuǎn)播等種種門(mén)類(lèi)涵蓋在其中。要想在這一篇短文里把它們都講解清楚,恐怕非筆者力所能及,也非本文所能容納的了。
不過(guò),僅僅是針對(duì)我們?cè)谖恼麻_(kāi)頭的需求,還是大有工夫可做的。那么我們就來(lái)思考第一個(gè)問(wèn)題,也許也是虛擬演播室技術(shù)實(shí)現(xiàn)中最為核心的一個(gè)問(wèn)題:電腦生成的背景,與氣定神閑的演員,是怎么疊加在一起的?
主持人或者演員的表演是怎么被記錄下來(lái)的,這一點(diǎn)不用多說(shuō),自然是通過(guò)攝像機(jī)進(jìn)行拍攝,然后輸出直播畫(huà)面或者錄制到文件再做處理,所以這并非我們所關(guān)注的重點(diǎn)。至于為什么演員的前后左右都要用純粹的綠色或者藍(lán)色伺候,這是我們稍后將會(huì)討論的話題。而在此之前,我們需要引入一個(gè)也許并不陌生的概念——虛擬攝像機(jī)(virtual camera)。
當(dāng)然,這里要說(shuō)的絕不是VR全景攝像機(jī)的概念。我們所指的恰恰是不存在于現(xiàn)實(shí)當(dāng)中的攝像機(jī)設(shè)備,它存在于我們的游戲場(chǎng)景里,就仿佛是在游戲場(chǎng)地中架設(shè)了一臺(tái)攝像機(jī),將走過(guò)路過(guò)的主角和敵人,以及他們之間的恩怨情仇統(tǒng)統(tǒng)拍攝下來(lái),就像是拍攝動(dòng)物世界的紀(jì)錄片那樣。
這樣很酷,不過(guò)既然是攝像機(jī),那么它自然也應(yīng)當(dāng)具備真正的攝像設(shè)備的基本參數(shù)了,例如鏡頭焦距,景深,視場(chǎng)角(FOV),最關(guān)鍵的是,這臺(tái)攝像機(jī)是放在游戲場(chǎng)地的什么位置上?又是朝著哪個(gè)方向進(jìn)行拍攝的?如果這是一臺(tái)可以運(yùn)動(dòng)的攝像機(jī)的話,那么還需要考慮它的運(yùn)動(dòng)跟蹤。當(dāng)然,用斯坦尼康之類(lèi)來(lái)做運(yùn)動(dòng)拍攝時(shí)畫(huà)面的防抖處理,這樣的繁瑣需求在這里應(yīng)該是用不著了。
而對(duì)于虛擬演播室的需求來(lái)說(shuō),更重要的一條原則是:這個(gè)虛擬攝像機(jī)的光學(xué)參數(shù)與運(yùn)動(dòng)位姿,必須和拍攝演員的攝像機(jī)完全同步和一致。這樣才有可能在后面的疊加處理中做到兩幅畫(huà)面的統(tǒng)一,以及透視關(guān)系的正確性。
(Via 3dcpptutorials.sk)
聽(tīng)起來(lái)很簡(jiǎn)單,但實(shí)際上這是一個(gè)不小的挑戰(zhàn)。事實(shí)上在我國(guó),長(zhǎng)期以來(lái)高端的3D虛擬演播室業(yè)務(wù)都是被Orad(傲威)等行業(yè)龍頭所占據(jù)的。為了做到上述的攝像機(jī)跟蹤的需求,他們會(huì)采用非常高精度的編碼器云臺(tái)來(lái)做角度的探測(cè),其售價(jià)通常會(huì)以20萬(wàn)元起步,令人生畏。
后來(lái)也有部分高端虛擬演播室系統(tǒng)用到了計(jì)算機(jī)視覺(jué)(Computer Vision,CV)的方法來(lái)識(shí)別藍(lán)幕上的淺藍(lán)色線條,從而實(shí)現(xiàn)攝像機(jī)的運(yùn)動(dòng)和姿態(tài)探測(cè)。但是這樣做的算法并不容易,售價(jià)同樣很昂貴。
而Orad的虛擬演播室系統(tǒng)的銷(xiāo)售是以“信道”為單位的,之前一個(gè)信道可以賣(mài)到70萬(wàn)左右的價(jià)格,而采購(gòu)是最少3個(gè)信道起價(jià)的。當(dāng)然我們也能見(jiàn)到售價(jià)十多萬(wàn)的虛擬演播室系統(tǒng),但是其中很可能會(huì)直接無(wú)視攝像機(jī)跟蹤的需求,僅僅把實(shí)際拍攝的片子做綠幕摳像,然后導(dǎo)入到虛擬場(chǎng)景中直接疊加。合成的結(jié)果很容易讓真實(shí)的演員顯得像是早期建筑動(dòng)畫(huà)和海報(bào)里不自然的紙片人一樣。
回歸正文,如果只是確保虛擬系統(tǒng)和真實(shí)系統(tǒng)的光學(xué)參數(shù)一致的話,我們倒是可以簡(jiǎn)單地給虛擬攝像機(jī)的焦距,F(xiàn)OV等數(shù)值(盡管這樣并不準(zhǔn)確,不過(guò)多數(shù)情況下變化的幅度可以容忍)。難點(diǎn)在于攝像機(jī)的位置與姿態(tài)的跟蹤,如果用數(shù)學(xué)公式來(lái)表達(dá)的話,大致如下:
(Via slideplayer.com)
是不是有點(diǎn)似曾相識(shí)的感覺(jué)?沒(méi)錯(cuò),如果您已經(jīng)熟練地掌握了OpenVR API的使用(也就是HTC Vive的C++開(kāi)發(fā)工具庫(kù)),那么想必也已經(jīng)發(fā)現(xiàn)了一個(gè)現(xiàn)成的函數(shù):
它的作用就是獲取指定Vive設(shè)備的位置和姿態(tài)矩陣,而這個(gè)設(shè)備可能是頭盔,手柄,或者是Lighthouse定位裝置。如此一來(lái),假設(shè)我們開(kāi)一個(gè)腦洞,把某個(gè)Vive設(shè)備完全綁定在真實(shí)的攝像機(jī)上的話,那么攝像機(jī)的移動(dòng)和旋轉(zhuǎn)信息就會(huì)被完整地記錄下來(lái),并傳遞到OpenVR API以及我們自己的應(yīng)用程序里——換句話說(shuō),虛擬攝像機(jī)的位置和姿態(tài)信息也就由此被確定了。
這樣的做法事實(shí)上也并不是筆者首創(chuàng)的,國(guó)外早就有玩家把Vive的控制手柄固定在大腿上來(lái)讀取和模擬人的腿部姿態(tài)和運(yùn)動(dòng),如下面的新聞(圖片同樣來(lái)自Yivian):
當(dāng)然了,這種做法并不是沒(méi)有局限性,否則高端的虛擬演播室系統(tǒng)開(kāi)發(fā)和集成廠家也都要找筆者算賬來(lái)了。因?yàn)镠TC Vive的控制器只能在Lighthouse所圈定的優(yōu)先區(qū)域內(nèi)被識(shí)別(例如5x5米),所以這種做法并不能跟隨實(shí)際的攝像機(jī)大范圍地運(yùn)動(dòng)。不過(guò)Lighthouse在理論上是可以被拼接和擴(kuò)大識(shí)別范圍的,所以不久的將來(lái)我們也許真的能夠見(jiàn)到基于Vive控制原理的虛擬演播室系統(tǒng)模塊也說(shuō)不定。畢竟科技是飛速發(fā)展的,顛覆一些傳統(tǒng)和守舊的做法也是毫不稀奇的事情。
實(shí)現(xiàn)了虛擬攝像機(jī)與實(shí)際攝像機(jī)的同步之后,我們要面臨的第二個(gè)大問(wèn)題,叫做摳像(keying)。它的基本含義是——
從拍攝的畫(huà)面中抽取某一種顏色作為透明色,即把這種顏色所對(duì)應(yīng)的像素點(diǎn)從畫(huà)面中摳掉,讓可能的背景畫(huà)面顯露出來(lái),從而呈現(xiàn)出疊加的效果。
摳像之前的布景條件往往比較嚴(yán)格,現(xiàn)場(chǎng)會(huì)要求前景的演員和道具與背景的幕布之間區(qū)別明顯,色調(diào)也不接近,同時(shí)背景的光照要均勻布設(shè),避免有過(guò)大的陰影區(qū)域或者褶皺。而通常的摳像場(chǎng)景會(huì)選擇藍(lán)色或者綠色的幕布來(lái)作為背景,這是因?yàn)樵谌梭w上幾乎不存在這兩種顏色,因此不會(huì)出現(xiàn)錯(cuò)誤的摳掉演員本身的問(wèn)題(當(dāng)然部分人的瞳孔會(huì)有綠色和藍(lán)色的色彩,此時(shí)要單獨(dú)進(jìn)行處理)。如果在場(chǎng)景中故意布置一些綠色包裹的道具,例如讓演員站在綠色的箱子上,那么摳像處理完成后就會(huì)產(chǎn)生浮空的效果,再加上計(jì)算機(jī)生成背景畫(huà)面的巧妙疊加,就會(huì)形成如今各種好萊塢大片中的特效場(chǎng)面。
這樣的話,再返回頭去看本文開(kāi)頭的游戲現(xiàn)場(chǎng)布景,就不難理解他們這樣做的用意了。進(jìn)行游戲的小女孩是在綠幕構(gòu)成的環(huán)境中運(yùn)動(dòng)的,攝像機(jī)將她的一舉一動(dòng)拍攝下來(lái),然后摳像處理將綠色的背景透明化,再與Vive游戲的畫(huà)面相疊加。因?yàn)閿z像機(jī)的位置和姿態(tài)都被傳遞到虛擬游戲場(chǎng)景當(dāng)中,因此兩幅畫(huà)面疊加的透視效果是完全一致的,再加上合適的深度遮擋判斷的話,就可以做到一種混合現(xiàn)實(shí)(Mixed Reality)一般的現(xiàn)場(chǎng)感了。
當(dāng)然,這里面有兩個(gè)重要的事實(shí)需要聲明:
一是游戲本身必須支持這種第三人稱(chēng)的觀看模式,并且能夠接收來(lái)自位置跟蹤設(shè)備(例如Vive的手柄)的數(shù)據(jù)和設(shè)置自身的虛擬攝像機(jī)參數(shù)。
二是這一畫(huà)面只會(huì)呈現(xiàn)給其他的觀看者,正在進(jìn)行游戲的人看到的畫(huà)面依然是VR的第一人稱(chēng)視角內(nèi)容,不會(huì)看到自己的真實(shí)形象混疊于其中。
原理既然已經(jīng)闡述完畢,下面的時(shí)間,我們就自己試做一款基于Vive的虛擬演播室系統(tǒng),當(dāng)然所有的功能都是最簡(jiǎn)的。Unity和Unreal這樣的游戲引擎在這里恐怕也起不到什么用武之地,讓C++的代碼遍地開(kāi)花就好。
如何自己動(dòng)手做一款基于Vive的虛擬演播室系統(tǒng)?請(qǐng)繼續(xù)關(guān)注《如何用極客范兒打造一個(gè)HTC Vive虛擬演播室?(下)》。
雷鋒網(wǎng)注:作者王銳,本文為雷鋒網(wǎng)獨(dú)家約稿,轉(zhuǎn)載請(qǐng)聯(lián)系并保留完整信息,不得刪減、修改文章。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。