24
本文作者: 王銳 | 2015-12-16 15:28 |
【編者按】本文作者王銳,VR行業(yè)資深從業(yè)者。
也許就是這一兩年之間,隨著VR熱潮的風(fēng)起云涌,“全景”這個(gè)詞匯被一次又一次地搬上了臺(tái)面,再冠以“虛擬實(shí)景”,“3D實(shí)景”,“360度”,“720度”等種種名號(hào),以至于被很多人當(dāng)作了虛擬現(xiàn)實(shí)內(nèi)容具體呈現(xiàn)形式的主要代名詞。
誠(chéng)然,VR內(nèi)容的缺失問(wèn)題現(xiàn)在已經(jīng)被越來(lái)越多的開(kāi)發(fā)者和商業(yè)團(tuán)體所關(guān)注,而全景拍攝的圖片和視頻,以及正在襁褓期的VR電影,無(wú)疑會(huì)成為一種很好的內(nèi)容落地方式。它能夠在不需要過(guò)多的交互方式以及因此產(chǎn)生的學(xué)習(xí)成本的同時(shí),帶給觀看者充分的沉浸式體驗(yàn),以及通過(guò)離線渲染和攝影得到各種極致的效果。
那么,全景的定義與實(shí)現(xiàn)過(guò)程究竟是怎樣的,人們可以如何去構(gòu)建全景內(nèi)容呢?本文會(huì)嘗試從多個(gè)不同的關(guān)鍵角度去進(jìn)行講述,期望能夠?qū)η案昂罄^的創(chuàng)想者們有所助益。
全景拍攝并非是多么時(shí)新的一個(gè)概念,事實(shí)上它甚至可以追溯到12世紀(jì)的《韓熙載夜宴圖》:
當(dāng)然這并非真正意義上的沉浸式體驗(yàn),就算我們把這幅長(zhǎng)畫(huà)給卷成一個(gè)圓筒,然后站在中心去觀看,也依然會(huì)覺(jué)得缺失了一點(diǎn)什么,沒(méi)錯(cuò),一個(gè)明顯的接縫,以及頭頂和腳下兩片區(qū)域的空白。
出現(xiàn)這種問(wèn)題的原因是很簡(jiǎn)單的,因?yàn)樗纬瞬](méi)有打算把這幅畫(huà)做成沉浸式的體驗(yàn)——當(dāng)然這是廢話——真正的原因是,畫(huà)面對(duì)應(yīng)的物理空間視域并沒(méi)有達(dá)到全包圍的程度,也就是水平方向(經(jīng)度)360度,垂直方向(緯度)180度。沒(méi)錯(cuò),說(shuō)到這里,你一定想到了這張圖:
類(lèi)似這樣的世界地圖也許在你家里的墻面上已經(jīng)貼了有一些年頭了,也許自從升上大學(xué)之后你從未正眼瞧過(guò)它,但是它卻符合一張全景圖片需要的全部條件,你把它放到各種VR眼鏡里去觀看的話,就宛若陷入了整個(gè)世界的環(huán)抱當(dāng)中。
這種能夠正確地展開(kāi)全物理視域的真實(shí)場(chǎng)景到一張2D圖片上,并且能夠還原到VR眼鏡中實(shí)現(xiàn)沉浸式觀看的數(shù)學(xué)過(guò)程,就叫做投影(projection)。
而那張看起來(lái)平凡無(wú)奇的世界地圖,使用的就是一種名為Equirectangular的常見(jiàn)投影方式,它的特點(diǎn)是水平視角的圖像尺寸可以得到很好的保持,而垂直視角上,尤其是接近兩極的時(shí)候會(huì)發(fā)生無(wú)限的尺寸拉伸。
下圖中對(duì)于這種投影方式的拉伸現(xiàn)象體現(xiàn)得更為明顯,注意看穹頂上的紋路變化,越是靠近畫(huà)面的頂端,就越是呈現(xiàn)出劇烈的扭曲變形。幸好,VR頭盔和應(yīng)用軟件的意義也就在于將這些明顯變形的畫(huà)面還原為全視角的內(nèi)容,進(jìn)而讓使用者有一種身臨其境的包圍感。
然而全景圖像的投影方式遠(yuǎn)不止這一種,比如最近剛剛發(fā)布的理光Theta S以及Insta360全景相機(jī),就采用了另外一種更為簡(jiǎn)單而有效的投影策略:
通過(guò)它的兩個(gè)魚(yú)眼攝像頭輸出的畫(huà)面,各自涵蓋了180度的水平和垂直視場(chǎng)角,然后將兩個(gè)輸出結(jié)果“扣”在一起就是全視域的沉浸式包圍體了。
當(dāng)然,這種名為Fisheye的投影方式,生成的2D畫(huà)面事實(shí)上扭曲變形是更加嚴(yán)重的。而通過(guò)圖像重投影處理的方式將它變換到VR眼鏡中顯示的時(shí)候,受到圖像采樣頻率的限制(或者通俗點(diǎn)說(shuō),像素點(diǎn)大小的限制),這樣的扭曲被還原時(shí)會(huì)多少產(chǎn)生一定程度的圖像質(zhì)量損失,因而也可能會(huì)造成全景內(nèi)容本身的質(zhì)量下降。
由此看來(lái),作為全景內(nèi)容的一種重要承載基體,投影圖像(或者視頻)不僅應(yīng)當(dāng)完整包含拍攝的全部?jī)?nèi)容,還要避免過(guò)多的扭曲變形以免重投影到VR眼鏡時(shí)產(chǎn)生質(zhì)量損失。
那么,除了上述兩種投影方式之外,還有更多方案可以選擇嗎?答案是,當(dāng)然了,而且有的是!
比如墨卡托投影(Mercator),它沿著軸線的拉伸變形比Equirectangular更小,對(duì)應(yīng)實(shí)際場(chǎng)景的比例更為真實(shí),但是垂直方向只能表達(dá)大約140度左右的內(nèi)容;
又比如Equisolid投影,也有人稱之為“小行星”或者“720度”全景,它甚至可以把垂直方向的360度視域都展現(xiàn)出來(lái),但是前提是使用者并不在乎巨大的扭曲變形可能帶來(lái)的品質(zhì)損失:
那么,有沒(méi)有什么投影方式生成的畫(huà)面,是能夠覆蓋至少360度水平方向和180度的垂直方向,并且沒(méi)有任何畫(huà)面的扭曲變形呢?
答案是:沒(méi)有扭曲變形的單一圖像投影方式,是不存在的。然而,如果投影的結(jié)果畫(huà)面不是單一圖像的話,方法還是有的:
如果你正好是一位圖形開(kāi)發(fā)或者虛擬現(xiàn)實(shí)軟件開(kāi)發(fā)的從業(yè)者的話,這張圖對(duì)你來(lái)說(shuō)應(yīng)該是非常熟悉的,這就是Cubemap(立方體圖像)。
它相當(dāng)于一個(gè)由六幅圖像拼合組成的立方體盒子,如果假設(shè)觀察者位于立方體的中心的話,那么每幅圖像都會(huì)對(duì)應(yīng)立方體的一個(gè)表面,并且在物理空間中相當(dāng)于水平和垂直都是90度的視域范圍。而觀察者被這樣的六幅畫(huà)面包圍在中心,最終的視域范圍同樣可以達(dá)到水平360度,垂直360度,并且畫(huà)面是絕對(duì)不存在任何扭曲變形的。
如下:
這是一種很理想的投影結(jié)果了,并且如果你恰好懂得使用一些離線渲染軟件或者插件來(lái)制作和輸出全景內(nèi)容的話,這一定是最合適的一種選擇。然而,在實(shí)際拍攝當(dāng)中我們卻幾乎不可能用到這種立方圖的記錄方式,原因很簡(jiǎn)單——我們現(xiàn)有的拍攝設(shè)備難以做到。
如果說(shuō)有六臺(tái)攝像機(jī),它們的FOV角度被嚴(yán)格限定為水平和豎直都是90度,然后造一個(gè)一絲不茍的支架,把這六臺(tái)攝像機(jī)牢固而穩(wěn)定地安裝到支架上,確保它們的中心點(diǎn)嚴(yán)格重合在一起,并且各自朝向一個(gè)方向——這樣的話,輸出的圖像也許能夠正好符合立方圖的標(biāo)準(zhǔn),并且可以直接使用。
然而,無(wú)論攝像機(jī)鏡頭的感光面積,焦距參數(shù)(以及因此計(jì)算得到的FOV視場(chǎng)角度),還是支架的鋼體結(jié)構(gòu)設(shè)計(jì)與制作,都無(wú)法確保精確地達(dá)到上面要求的參數(shù),幾mm的光學(xué)或者機(jī)械誤差看似無(wú)傷大雅,但是對(duì)于嚴(yán)絲合縫的立方圖圖像來(lái)說(shuō),必然會(huì)在最終呈現(xiàn)的沉浸式場(chǎng)景中留下一條或者多條明顯的裂縫。更何況還有支架運(yùn)動(dòng)時(shí)產(chǎn)生的振動(dòng)問(wèn)題,以及相機(jī)鏡頭老化產(chǎn)生的焦點(diǎn)偏移問(wèn)題,這些看似細(xì)小的麻煩各個(gè)都足以讓我們剛剛構(gòu)建的理想物理模型化為泡影。
理想和現(xiàn)實(shí)的差距如此之大,幸好我們還有解決的辦法——沒(méi)錯(cuò),如果在拼接的地方留下足夠大的冗余,然后正確識(shí)別和處理兩臺(tái)攝像機(jī)畫(huà)面重合的區(qū)域,這樣不就可以做到六幅畫(huà)面的輸出和組成全景內(nèi)容了嗎——而這正是全景內(nèi)容制作的另一大法寶,圖像的拼接與邊緣融合。
下圖是360Heros系列全景攝像機(jī)。
它使用了6個(gè)GoPro運(yùn)動(dòng)相機(jī)以及一個(gè)支架來(lái)輔助完成拍攝,這六臺(tái)相機(jī)分別朝向不同的方向,如果采用4X3寬視角設(shè)定的話,其水平和垂直FOV角度約為122度和94度。
在全景視頻拼接和輸出軟件中讀取六臺(tái)攝像機(jī)的輸入流或者視頻文件,并且設(shè)置它們?cè)谥Ъ苌系膶?shí)際方位信息(或者直接獲取數(shù)碼相機(jī)本身記錄的姿態(tài)信息)。這樣我們就得到了足夠覆蓋全視域范圍的視頻內(nèi)容。
正如我們之前所描述的,因?yàn)闊o(wú)法做到精確的對(duì)齊,因此需要在每臺(tái)相機(jī)的視域角度上提供必要的冗余,因而得到的視頻畫(huà)面互相之間會(huì)存在一定的交疊關(guān)系,直接輸出全景畫(huà)面的時(shí)候,可能會(huì)存在明顯的疊加區(qū)域或者錯(cuò)誤的接邊。雖然目前幾種常見(jiàn)的全景視頻處理工具,諸如VideoStitch,Kolor等具備一定程度的自動(dòng)邊緣融合功能,但是很多時(shí)候我們還是免不了要自己手動(dòng)去裁切和調(diào)整這些邊緣區(qū)域(例如下圖中使用PTGui來(lái)進(jìn)行各幅畫(huà)面接縫的修正),擇取畫(huà)面質(zhì)量更高或者畸變更小的邊緣區(qū)域,并且確保畫(huà)面之間是嚴(yán)格對(duì)齊的。
這樣的工作耗時(shí)耗力,并且有一個(gè)重要的前提,就是作為輸入源的畫(huà)面必須能夠覆蓋360度全視域并且存在冗余。
正如我們之前所計(jì)算的,如果采用六個(gè)相機(jī)拼裝的方式,那么每個(gè)相機(jī)的FOV角度不應(yīng)小于90度,對(duì)于GoPro Hero3系列相機(jī)來(lái)說(shuō),此時(shí)必須采用4x3的寬視域模式,如果是16x9的寬高比設(shè)置,那么垂直方向的FOV角度很可能無(wú)法達(dá)到要求的數(shù)值,進(jìn)而產(chǎn)生“無(wú)論如何都拼接不上”的問(wèn)題——當(dāng)然我們可以通過(guò)在支架上調(diào)整各個(gè)相機(jī)的朝向角度,或者增加相機(jī)的數(shù)量,來(lái)避免這一問(wèn)題的產(chǎn)生,不過(guò)無(wú)論從何種角度來(lái)看,采用接近1x1的寬高比的寬視域相機(jī)都是一個(gè)更為理想的選擇。
如果只是為了輸出一張全景圖片的話,那么上面的步驟通常來(lái)說(shuō)已經(jīng)綽綽有余,不需要再考慮更多的事情。但是,不會(huì)動(dòng)的圖片是很難讓戴上VR頭盔的人哇哇大叫的,能看到身邊戰(zhàn)火紛飛,或者野鬼出沒(méi)的動(dòng)態(tài)景象才更加刺激。如果你正在考慮如何制作如是的VR電影,那么有一個(gè)問(wèn)題不得不提出來(lái),那就是——
同步性——簡(jiǎn)單來(lái)說(shuō),就是你手中所有的攝像機(jī)如何精確保證同時(shí)開(kāi)始,以及在錄制的過(guò)程中保持幀率的一致性。
這看起來(lái)似乎并不算什么問(wèn)題,然而如果兩臺(tái)攝像機(jī)的開(kāi)始時(shí)間不一致的話,會(huì)直接影響到它們的對(duì)齊和拼接結(jié)果——甚至如果場(chǎng)景中存在大量的動(dòng)態(tài)元素或者相機(jī)位置在這個(gè)過(guò)程中發(fā)生了改變的話,結(jié)果可能根本是無(wú)法對(duì)齊的。因此,對(duì)于需要大量攝像機(jī)同時(shí)參與的全景拍攝工作而言,同步開(kāi)始以及同步錄制的需求就變得分外重要了。
要從硬件上根本解決這個(gè)問(wèn)題,可以用到“同步鎖相”(genlock)的技術(shù),即通過(guò)外部設(shè)備傳遞時(shí)間碼來(lái)控制各臺(tái)相機(jī)的同步運(yùn)行(典型的例如Red One專(zhuān)業(yè)電影攝像機(jī))。當(dāng)然并不是所有的攝像機(jī)都具備專(zhuān)門(mén)的Genlock接口,這種情況下,也可以考慮一些傳統(tǒng)或者是看起來(lái)略微“山寨”的同步方法,例如:路見(jiàn)不平一聲吼……
在拍攝開(kāi)始的時(shí)候,演員大吼一聲,或者用力拍一下巴掌。然后在進(jìn)行拼接的過(guò)程中,找到每個(gè)視頻當(dāng)中吼聲對(duì)應(yīng)的時(shí)間節(jié)點(diǎn),作為同步開(kāi)始的位置,然后再進(jìn)行全景視頻的拼接。這種方法雖然并沒(méi)有什么精確性可言,但是同樣沒(méi)有開(kāi)銷(xiāo)什么額外的成本;但是確保了基本的同步起始位置之后,再進(jìn)行視頻的細(xì)微調(diào)節(jié)和拼縫工作,卻無(wú)疑從相當(dāng)程度上簡(jiǎn)化了后期制作的難度。
類(lèi)似的方法還有給所有的攝像機(jī)蒙上黑布,然后開(kāi)始拍攝的時(shí)候快速抽走,等等。總之在硬件條件無(wú)法完全具備的前提下,就是八仙過(guò)海各顯神通的時(shí)候了。
細(xì)心的你可能已經(jīng)發(fā)現(xiàn),之前討論的所有全景視頻的拍攝過(guò)程都忽略了一個(gè)要點(diǎn):無(wú)論采用何種投影方式,生成的都只是一幅360度的全景內(nèi)容,放在PC或者網(wǎng)頁(yè)端去觀看當(dāng)然沒(méi)有任何問(wèn)題,但是如果要將這樣的內(nèi)容輸入到VR頭盔顯示器上,結(jié)果恐怕是不正確的。為了將畫(huà)面賦予立體感并呈現(xiàn)到人的眼中,我們提供的內(nèi)容必須采用左右眼水平分隔顯示的模式:
這看起來(lái)只是將原來(lái)的全景畫(huà)面復(fù)制了一份而已,但是悉心觀察的話,在靠近畫(huà)面邊界的位置就會(huì)發(fā)現(xiàn),左右畫(huà)面的內(nèi)容存在了一定的偏移。因?yàn)槿说碾p眼是存在一定的視角差的,雙眼各自看到的圖像有一定的差異,再通過(guò)大腦的解算就可以得到立體的感受。景物距離人眼越近,這種視差就越明顯,遠(yuǎn)處的景物則相對(duì)沒(méi)有很強(qiáng)的立體感。
而任何一種現(xiàn)有的VR眼鏡,都需要通過(guò)結(jié)構(gòu)的設(shè)計(jì)確保佩帶者的左右眼都只能看到實(shí)際屏幕的一半,也就是分別看到分隔后的左右眼畫(huà)面內(nèi)容,從而模擬了人眼的真實(shí)運(yùn)作機(jī)制。
這種情形下,全景內(nèi)容的拍攝設(shè)備也需要做出一些對(duì)應(yīng)的改動(dòng),比如將原來(lái)的6臺(tái)相機(jī)改成12臺(tái)相機(jī),即每個(gè)方向都有左右眼兩臺(tái)相機(jī)負(fù)責(zé)拍攝;支架的構(gòu)建形式也因此與原來(lái)的設(shè)計(jì)大相徑庭(圖中為360 Heros3 Pro12,使用了12臺(tái)GoPro運(yùn)動(dòng)相機(jī))。
對(duì)于拼接和融合軟件來(lái)說(shuō),倒是并沒(méi)有什么特別需要做的,只是要先后兩次讀取六個(gè)視頻流,處理后輸出兩個(gè)不同的全景視頻,分別對(duì)應(yīng)左右眼的畫(huà)面內(nèi)容。之后再通過(guò)后期工具或者應(yīng)用程序?qū)⑺鼈兒喜⒌揭环?huà)面中即可。
當(dāng)然了,另辟蹊徑的路子也有很多,比如從2011年就震動(dòng)了Kickstarter的眾籌者,卻直到如今VR全景應(yīng)用大火卻依然沒(méi)有按期發(fā)出的Panono,它的設(shè)計(jì)原理是通過(guò)均勻分布在球體上的36個(gè)攝像頭來(lái)拍攝,拼接并得到左右眼的全景圖像。
這個(gè)設(shè)計(jì)雖然看起來(lái)拽得飛起,實(shí)際上卻是萬(wàn)變不離其宗:朝向不同方向的36臺(tái)攝像機(jī)拍攝的畫(huà)面,疊加在一起足以覆蓋水平360度和垂直360度的視域范圍,并且一定可以覆蓋兩遍!再加上自身精準(zhǔn)的結(jié)構(gòu)設(shè)計(jì)和安裝姿態(tài),這樣就能夠從內(nèi)部準(zhǔn)確計(jì)算出拼接后的全景圖像,并且直接按照左右眼兩幅圖像的標(biāo)準(zhǔn)輸出視頻流或者文件,其能夠輸出的實(shí)際分辨率也是相當(dāng)可觀的。
與之相仿的還有Bublcam(四個(gè)遍布球身的超大廣角鏡頭),Nokia的OZO(8個(gè)遍布球身的廣角鏡頭),以及Jaunt研發(fā)中的產(chǎn)品等等。它們都具備直接輸出立體形式的全景內(nèi)容的能力。
當(dāng)然了,最不濟(jì)的情形下,我們還有一種選擇,就是自己假造一種立體模式……
將原始的全景畫(huà)面復(fù)制成兩份,其中一份向左偏移一點(diǎn),另一份向右偏移一點(diǎn),然后各自做一個(gè)輕度的透視變換(為了模擬視線角度的偏轉(zhuǎn))。這樣構(gòu)成的“立體”畫(huà)面在多數(shù)情形下也具有一定的立體欺騙效果,但是對(duì)于近處的景物,或者左右眼畫(huà)面中的景物存在遮擋關(guān)系的時(shí)候(比如模擬臉貼在門(mén)上,一只眼被門(mén)閂擋住的情景),則會(huì)有明顯的瑕疵。當(dāng)然了,對(duì)于依然對(duì)VR全景內(nèi)容處于懵懂階段的愛(ài)好者來(lái)說(shuō),這也許暫時(shí)不是什么嚴(yán)重的問(wèn)題了。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。