原文鏈接: Three approaches to VR lens distortion
個(gè)人學(xué)習(xí)翻譯作品阿逃,鼓勵(lì)大家看原文铭拧。原文中大部分鏈接已經(jīng)失效,本文做了相應(yīng)更新恃锉,但并不保證今后會持續(xù)更新。大部分翻譯忠于原文呕臂,但部分語句不通(才疏學(xué)淺實(shí)在理解不能)的地方會有譯者潤色破托,如有重要用詞或原理闡述錯(cuò)誤,還請?jiān)u論斧正歧蒋。
VR 透鏡畸變的三種解決方案
想要在 VR 體驗(yàn)中獲得沉浸感需要有一個(gè)相對較大的視場角土砂。這可以通過在你面前部署一個(gè)巨大的球狀曲面屏來實(shí)現(xiàn),當(dāng)然谜洽,這種技術(shù)是超級貴的萝映。一個(gè)相對可行的增加視場角的解決方案是使用兩片透鏡來觀察一塊普通的小矩形屏幕。
一塊部署在眼前的透鏡可以極大地增加視場角阐虚,但這是有代價(jià)的:畫面產(chǎn)生了球狀畸變序臂。視場角增加的越大,圖像畸變越嚴(yán)重实束。這篇文章對當(dāng)前三種圖像反畸變主流方案做了簡單的摘要奥秆,這三種方案都在不同的 JavaScript WebVR 相關(guān)項(xiàng)目中有所實(shí)踐。
下面是一個(gè)典型的頭戴式顯示屏的顯示效果咸灿」苟可以看到,透鏡導(dǎo)致了枕形失真避矢。
解決方案是將桶狀畸變施加到圖像上。當(dāng)我們再通過畸變透鏡觀察圖像時(shí)审胸,圖像在兩次畸變中被中和了亥宿。
透鏡畸變可以通過數(shù)學(xué)公式更好的理解箩绍。要合理反畸變,我們需要計(jì)算兩眼的中心尺上,這需要知道屏幕和場景本身的幾何屬性材蛛。這些都可以獲取圆到,甚至是在一個(gè)網(wǎng)頁應(yīng)用上!
1. Fragment based solution (bad) 基于片元的解決方案(差)
畸變最簡單的方案是使用二次渲染的方法卑吭。首先我們渲染左右眼到一張紋理上芽淡,然后通過片元(像素)著色器處理該紋理,具體方法為向相對眼部中心方向移動每一個(gè)像素點(diǎn)豆赏。
這是最初的也是最簡單的方法挣菲,但也是效率最低的,因?yàn)槊恳粋€(gè)像素都是分開處理的掷邦。WebVR 的最初版本樣板使用了此方法白胀。
2. Mesh based solution (better) 基于三角網(wǎng)的解決方案(更好)
這種畸變方案不需要分別處理每一個(gè)像素,我們畸變一個(gè)相對松散的三角形網(wǎng)格(40 乘 20 的三角網(wǎng)就能勝任)抚岗。
這個(gè)方案可以節(jié)省許多直接的計(jì)算并讓 GPU 做相對合理的插值計(jì)算或杠。我們不需要處理屏幕的每個(gè)像素點(diǎn)(1920 * 1080 ~= 2e6),只需計(jì)算這個(gè)三角網(wǎng)的每個(gè)頂點(diǎn)(40 * 20 = 800)宣蔚。結(jié)果是計(jì)算量的顯著減少(3次方或更多)向抢,和性能的起飛。WebVR Polyfill 現(xiàn)在應(yīng)用的就是此方法胚委。
畸變操作在此方法中并非唯一費(fèi)時(shí)的部分挟鸠,還有大部分的時(shí)間浪費(fèi)在拷貝整個(gè)場景到中間紋理過程中了。
3. Vertex displacement based solution (best) 基于頂點(diǎn)置換的解決方案 (最好)
現(xiàn)在我們來看三種畸變當(dāng)中效率最高的一種亩冬,此方案不再需要在一開始生成中間文林艘希。幾何體將通過特定的頂點(diǎn)著色器進(jìn)行畸變。此方法的思路是根據(jù)攝像頭的位置鉴未,我們相應(yīng)地重置頂點(diǎn)枢冤,使得 2D 像是已經(jīng)經(jīng)過桶狀畸變。這種方法將不再需要二次渲染铜秆,因此我們省去了拷貝生成紋理的費(fèi)時(shí)的中間步驟淹真。
但是,這種方法要求每個(gè)三角網(wǎng)擁有一定的頂點(diǎn)密度來保證變形连茧。思考這樣一個(gè)情況核蘸,我們將渲染一個(gè)離鏡頭很近的巨大的四點(diǎn)矩形,然而這四個(gè)點(diǎn)畸變之后任然得到一個(gè)四點(diǎn)矩形啸驯,顯然并沒有桶狀效果客扎。因此,如果在程序員這邊不進(jìn)行額外處理的話罚斗,此方法將無法作為通用方法使用徙鱼。(譯者注:程序需要對三角網(wǎng)進(jìn)行細(xì)分處理)
此方案應(yīng)用于 Cardboard Design Lab 以及開源項(xiàng)目 VR View project 中「み海基于幾何的畸變(此處和小標(biāo)題名稱不完全相同厌衙,但應(yīng)該是一種方法)同樣會造成尖銳的渲染結(jié)果,因?yàn)殡p程方案會造成鋸齒效果绞绒,特別是當(dāng)中間紋理不夠大的話婶希。你可以從這篇文章中督導(dǎo)關(guān)于畸變更多詳細(xì)內(nèi)容。