標籤:
也許就是這一兩年之間,隨著VR熱潮的風起雲湧,“全景”這個詞彙被一次又一次地搬上了檯面,再冠以“虛擬實景”,“3D實景”,“360度”,“720度”等種種名號,以至於被很多人當作了虛擬現實內容具體呈現形式的主要代名詞。
誠然,VR內容的缺失問題現在已經被越來越多的開發人員和商業團體所關注,而全景拍攝的圖片和視頻,以及正在繈褓期的VR電影,無疑會成為一種很好的內容落地方式。它能夠在不需要過多的互動方式以及因此產生的學習成本的同時,帶給觀看者充分的沈浸式體驗,以及通過離線渲染和攝影得到各種極致的效果。
那麼,全景的定義與實現過程究竟是怎樣的,人們可以如何去構建全景內容呢?本文會嘗試從多個不同的關鍵角度去進行講述,期望能夠對前赴後繼的創想者們有所助益。
1、投影方式
全景拍攝並非是多麼時新的一個概念,事實上它甚至可以追溯到12世紀的《韓熙載夜宴圖》:
當然這並非真正意義上的沈浸式體驗,就算我們把這幅長畫給捲成一個圓筒,然後站在中心去觀看,也依然會覺得缺失了一點什麼,沒錯,一個明顯的接縫,以及頭頂和腳下兩片地區的空白。
出現這種問題的原因是很簡單的,因為宋朝人並沒有打算把這幅畫做成沈浸式的體驗——當然這是廢話——真正的原因是,畫面對應的物理空間視域並沒有達到全包圍的程度,也就是水平方向(經度)360度,垂直方向(緯度)180度。沒錯,說到這裡,你一定想到了這張圖:
類似這樣的世界地圖也許在你家裡的牆面上已經貼了有一些年頭了,也許自從升上大學之後你從未正眼瞧過它,但是它卻符合一張全景片需要的全部條件,你把它放到各種VR眼鏡裡去觀看的話,就宛若陷入了整個世界的環抱當中。
這種能夠正確地展開全物理視域的真實情境到一張2D圖片上,並且能夠還原到VR眼鏡中實現沈浸式觀看的數學過程,就叫做投影(projection)。
而那張看起來平凡無奇的世界地圖,使用的就是一種名為Equirectangular的常見投影方式,它的特點是水平視角的映像尺寸可以得到很好的保持,而垂直視角上,尤其是接近兩極的時候會發生無限的尺寸展開。
中對於這種投影方式的展開現象體現得更為明顯,注意看穹頂上的紋路變化,越是靠近畫面的頂端,就越是呈現齣劇烈的扭曲變形。幸好,VR頭盔和應用軟體的意義也就在於將這些明顯變形的畫面還原為全視角的內容,進而讓使用者有一種身臨其境的包圍感。
然而全景像的投影方式遠不止這一種,比如最近剛剛發布的理光Theta S以及Insta360全景相機,就採用了另外一種更為簡單而有效投影策略:
通過它的兩個魚眼網路攝影機輸出的畫面,各自涵蓋了180度的水平和垂直視場角,然後將兩個輸出結果“扣”在一起就是全視域的沈浸式包圍體了。
當然,這種名為Fisheye的投影方式,產生的2D畫面事實上扭曲變形是更加嚴重的。而通過映像重投影處理的方式將它變換到VR眼鏡中顯示的時候,受到映像採樣頻率的限制(或者通俗點說,像素點大小的限制),這樣的扭曲被還原時會多少產生一定程度的映像品質損失,因而也可能會造成全景內容本身的品質下降。
由此看來,作為全景內容的一種重要承載基體,投影映像(或者視頻)不僅應當完整包含拍攝的全部內容,還要避免過多的扭曲變形以免重投影到VR眼鏡時產生品質損失。
那麼,除了上述兩種投影方式之外,還有更多方案可以選擇嗎?答案是,當然了,而且有的是!
比如墨卡托投影(Mercator),它沿著軸線的展開變形比Equirectangular更小,對應實際情境的比例更為真實,但是垂直方向只能表達大約140度左右的內容;
又比如Equisolid投影,也有人稱之為“小行星”或者“720度”全景,它甚至可以把垂直方向的360度視域都展現出來,但是前提是使用者並不在乎巨大的扭曲變形可能帶來的品質損失:
那麼,有沒有什麼投影方式產生的畫面,是能夠覆蓋至少360度水平方向和180度的垂直方向,並且沒有任何畫面的扭曲變形呢?
答案是:沒有扭曲變形的單一映像投影方式,是不存在的。然而,如果投影的結果畫面不是單一映像的話,方法還是有的:
如果你正好是一位元影像形開發或者虛擬現實軟體開發的從業者的話,這張圖對你來說應該是非常熟悉的,這就是Cubemap(立方體映像)。
它相當於一個由六幅映像拼合組成的立方體盒子,如果假設觀察者位於立方體的中心的話,那麼每幅映像都會對應立方體的一個表面,並且在物理空間中相當於水平和垂直都是90度的視域範圍。而觀察者被這樣的六幅畫麵包圍在中心,最終的視域範圍同樣可以達到水平360度,垂直360度,並且畫面是絕對不存在任何扭曲變形的。
如下:
這是一種很理想的投影結果了,並且如果你恰好懂得使用一些離線渲染軟體或者外掛程式來製作和輸出全景內容的話,這一定是最合適的一種選擇。然而,在實際拍攝當中我們卻幾乎不可能用到這種立方圖的記錄方式,原因很簡單——我們現有的拍攝裝置難以做到。
2、拼接與融合
如果說有六台攝像機,它們的FOV角度被嚴格限定為水平和豎直都是90度,然後造一個一絲不苟的支架,把這六台攝像機牢固而穩定地安裝到支架上,確保它們的中心點嚴格重合在一起,並且各自朝向一個方向——這樣的話,輸出的映像也許能夠正好符合立方圖的標準,並且可以直接使用。
然而,無論攝像機鏡頭的感光面積,焦距參數(以及因此計算得到的FOV視場角度),還是支架的鋼體結構設計與製作,都無法確保精確地達到上面要求的參數,幾mm的光學或者機械誤差看似無傷大雅,但是對於嚴絲合縫的立方圖映像來說,必然會在最終呈現的沈浸式情境中留下一條或者多條明顯的裂縫。更何況還有支架運動時產生的震動問題,以及相機鏡頭老化產生的焦點位移問題,這些看似細小的麻煩各個都足以讓我們剛剛構建的理想物理模型化為泡影。
理想和現實的差距如此之大,幸好我們還有解決的辦法——沒錯,如果在拼接的地方留下足夠大的冗餘,然後正確識別和處理兩台攝像機畫面重合的地區,這樣不就可以做到六幅畫面的輸出和組成全景內容了嗎——而這正是全景內容製作的另一大法寶,映像的拼接與邊緣融合。
是360Heros系列全景攝像機。
它使用了6個GoPro運動相機以及一個支架來輔助完成拍攝,這六台相機分別朝向不同的方向,如果採用4X3寬視角設定的話,其水平和垂直FOV角度約為122度和94度。
在全景視頻拼接和輸出軟體中讀取六台攝像機的輸入資料流或者視頻檔案,並且設定它們在支架上的實際方位資訊(或者直接擷取數位相機本身記錄的姿態資訊)。這樣我們就得到了足夠覆蓋全視域範圍的視頻內容。
正如我們之前所描述的,因為無法做到精確的對齊,因此需要在每台相機的視域角度上提供必要的冗餘,因而得到的視頻畫面互相之間會存在一定的交疊關係,直接輸出全景畫面的時候,可能會存在明顯的疊加地區或者錯誤的接邊。雖然目前幾種常見的全景視頻處理工具,諸如VideoStitch,Kolor等具備一定程度的自動邊緣融合功能,但是很多時候我們還是免不了要自己手動去裁切和調整這些邊緣地區(例如中使用PTGui來進行各幅畫面接縫的修正),擇取畫面品質更高或者畸變更小的邊緣地區,並且確保畫面之間是嚴格對齊的。
這樣的工作耗時耗力,並且有一個重要的前提,就是作為輸入源的畫面必須能夠覆蓋360度全視域並且存在冗餘。
正如我們之前所計算的,如果採用六個相機拼裝的方式,那麼每個相機的FOV角度不應小於90度,對於GoPro Hero3系列相機來說,此時必須採用4x3的寬視域模式,如果是16x9的寬高比設定,那麼垂直方向的FOV角度很可能無法達到要求的數值,進而產生“無論如何都拼接不上”的問題——當然我們可以通過在支架上調整各個相機的朝向角度,或者增加相機的數量,來避免這一問題的產生,不過無論從何種角度來看,採用接近1x1的寬高比的寬視域相機都是一個更為理想的選擇。
如果只是為了輸出一張全景片的話,那麼上面的步驟通常來說已經綽綽有餘,不需要再考慮更多的事情。但是,不會動的圖片是很難讓戴上VR頭盔的人哇哇大叫的,能看到身邊戰火紛飛,或者野鬼出沒的動態景象才更加刺激。如果你正在考慮如何製作如是的VR電影,那麼有一個問題不得不提出來,那就是——
同步性——簡單來說,就是你手中所有的攝像機如何精確保證同時開始,以及在錄製的過程中保持幀率的一致性。
這看起來似乎並不算什麼問題,然而如果兩台攝像機的開始時間不一致的話,會直接影響到它們的對齊和拼接結果——甚至如果情境中存在大量的動態元素或者相機位置在這個過程中發生了改變的話,結果可能根本是無法對齊的。因此,對於需要大量攝像機同時參與的全景拍攝工作而言,同步開始以及同步錄製的需求就變得分外重要了。
要從硬體上根本解決這個問題,可以用到“同步鎖相”(genlock)的技術,即通過外部裝置傳遞時間碼來控制各台相機的同步運行(典型的例如Red One專業電影攝像機)。當然並不是所有的攝像機都具備專門的Genlock介面,這種情況下,也可以考慮一些傳統或者是看起來略微“山寨”的同步方法,例如:路見不平一聲吼……
在拍攝開始的時候,演員大吼一聲,或者用力拍一下巴掌。然後在進行拼接的過程中,找到每個視頻當中吼聲對應的時間節點,作為同步開始的位置,然後再進行全景視頻的拼接。這種方法雖然並沒有什麼精確性可言,但是同樣沒有開銷什麼額外的成本;但是確保了基本的同步起始位置之後,再進行視頻的細微調節和拼縫工作,卻無疑從相當程度上簡化了後期製作的難度。
類似的方法還有給所有的攝像機蒙上黑布,然後開始拍攝的時候快速抽走,等等。總之在硬體條件無法完全具備的前提下,就是八仙過海各顯神通的時候了。
3、立體與偽立體
細心的你可能已經發現,之前討論的所有全景視頻的拍攝過程都忽略了一個要點:無論採用何種投影方式,產生的都只是一幅360度的全景內容,放在PC或者網頁端去觀看當然沒有任何問題,但是如果要將這樣的內容輸入到VR頭盔顯示器上,結果恐怕是不正確的。為了將畫面賦予立體感並呈現到人的眼中,我們提供的內容必須採用左右眼水平分隔顯示的模式:
這看起來只是將原來的全景畫面複製了一份而已,但是悉心觀察的話,在靠近畫面邊界的位置就會發現,左右畫面的內容存在了一定的位移。因為人的雙眼是存在一定的視角差的,雙眼各自看到的映像有一定的差異,再通過大腦的解算就可以得到立體的感受。景物距離人眼越近,這種視差就越明顯,遠處的景物則相對沒有很強的立體感。
而任何一種現有的VR眼鏡,都需要通過結構的設計確保佩帶者的左右眼都只能看到實際螢幕的一半,也就是分別看到分隔後的左右眼畫面內容,從而類比了人眼的真實運作機制。
這種情形下,全景內容的拍攝裝置也需要做出一些對應的改動,比如將原來的6台相機改成12台相機,即每個方向都有左右眼兩台相機負責拍攝;支架的構建形式也因此與原來的設計大相徑庭(圖中為360 Heros3 Pro12,使用了12台GoPro運動相機)。
對於拼接和融合軟體來說,倒是並沒有什麼特別需要做的,只是要先後兩次讀取六個視頻流,處理後輸出兩個不同的全景視頻,分別對應左右眼的畫面內容。之後再通過後期工具或者應用程式將它們合并到一幅畫面中即可。
當然了,另闢蹊徑的路子也有很多,比如從2011年就震動了Kickstarter的眾籌者,卻直到如今VR全景應用大火卻依然沒有按期發出的Panono,它的設計原理是通過均勻分布在球體上的36個網路攝影機來拍攝,拼接並得到左右眼的全景像。
這個設計雖然看起來拽得飛起,實際上卻是萬變不離其宗:朝向不同方向的36台攝像機拍攝的畫面,疊加在一起足以覆蓋水平360度和垂直360度的視域範圍,並且一定可以覆蓋兩遍!再加上自身精準的結構設計和安裝姿態,這樣就能夠從內部準確計算出拼接後的全景像,並且直接按照左右眼兩幅映像的標準輸出視頻流或者檔案,其能夠輸出的實際解析度也是相當可觀的。
與之相仿的還有Bublcam(四個遍布球身的超大廣角鏡頭),Nokia的OZO(8個遍布球身的廣角鏡頭),以及Jaunt研發中的產品等等。它們都具備直接輸出立體形式的全景內容的能力。
當然了,最不濟的情形下,我們還有一種選擇,就是自己假造一種立體模式……
將原始的全景畫面複製成兩份,其中一份向左位移一點,另一份向右位移一點,然後各自做一個輕度的透視變換(為了類比視線角度的偏轉)。這樣構成的“立體”畫面在多數情形下也具有一定的立體欺騙效果,但是對於近處的景物,或者左右眼畫面中的景物存在遮擋關係的時候(比如類比臉貼在門上,一隻眼被門閂擋住的情景),則會有明顯的瑕疵。當然了,對於依然對VR全景內容處於懵懂階段的愛好者來說,這也許暫時不是什麼嚴重的問題了。
轉至:http://www.leiphone.com/news/201512/bMLT4bE88swBjG19.html?foxhandler=RssReadRenderProcessHandler
在討論全景視頻的未來之前,我們先搞清楚全景視頻是如何?的[轉]