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