學習諸如 Oculus Rift 等虛擬現實設備開發需要掌握哪些知識和技術? | 知乎問答精選

 

A-A+

學習諸如 Oculus Rift 等虛擬現實設備開發需要掌握哪些知識和技術?

2019年09月22日 知乎問答精選 暫無評論 閱讀 3 ℃ 次

【YeFeng的回答(34票)】:

要想完整說明的話,先要明確以下Oculus Rift是個什麼概念。

Oculus Rift是一種虛擬現實儀器(以下簡稱rift),用一個遮罩在雙眼前的不透明顯示器,搭配兩個可更換透鏡,高質量陀螺儀、加速度傳感器和地磁傳感器,以及後來的位置跟蹤器(DK2專有)而成的一整套設備。目前rift尚未發佈面向正式消費者的版本,而只公開了兩個版本開發包(development kit),通常稱之為DK1和DK2。

Rift的工作原理分為兩部分。一部分跟目前3D電影或者3D眼鏡概念類似(順帶說一句,我個人比較討厭3D這個說法,太寬泛也極具商業欺騙性,更準確的說法是stereoscope,這裡感謝 @Milo Yip 指正),即模仿現實世界,通過為左右兩眼顯示不同的畫面,讓大腦合成一副帶有更多深度信息的「立體」圖像。另一部分是跟互動相關。由於rift不只是要做另一個Sony HMZ-T3W,所以它為了互動體驗還專門提供和優化了捕捉頭部運動的組件。Rift設備可以很精準且迅速地捕捉到頭部的任意旋轉,DK2更能在一個空間角範圍內捕捉頭部的線性運動。

結合這兩部分,rift能營造一個和現實世界完全隔絕的視覺環境,且能提供一定程度上的體感結合,即頭部旋轉和小範圍線性移動。在硬件上也做到了較好的廣視域和低延遲。

=============================

Rift的義務廣告到此結束。瞭解了rift是什麼後,我們進入正題:要具備怎樣的知識才能進行rift開發?

首當其衝的一點是3D相關知識。這裡我說的不是stereoscopic的「3D」,而是一些計算機圖形學基本知識。這裡面包括現代實時圖形應用的主要邏輯組成部分,包括:

  • 攝像機
  • 光照及其原理
  • 坐標系及其轉換

  • 材質和紋理系統
  • 基於網格的物件表示

其他方面如屏幕空間後處理效果、shader、動畫系統等鋪開的部分不是必須項。說得更明白一些,是一個運用3ds max/Maya這類數字內容創作軟件的創作人員應該熟知的部分。這方面稍有門檻,但不算太高。

在早期stereoscope概念出來的時候,很多開發者還必須關心如何在節省性能的前提下渲染左右兩張不同的畫面。而現在rift硬件和SDK已經做掉大部分工作,不要說什麼頭部高速同步,連透鏡色散和調瞳距都被我們卡馬克大神和Abrash大神做掉了。而且Oculus公司也跟很多引擎大廠合作,提供了這些引擎的插件。所以如果你用Unity或者Unreal的話,連SDK集成的事都可以省去了(out-of-box)。留給開發者的任務是更好地理解rift硬件所能帶給我們的特性,並將這些特性應用到實際應用中去。

舉個很實際的例子:由於rift是沉浸式的體驗,帶上了rift視覺上就跟外界說拜拜了。這時候輸入便成了一個棘手問題。如果要用戶在看到logo之後,再脫下rift去摸鍵盤就太弱了,而且不是所有鍵盤用戶都能應付盲打,保不齊某些用戶還要在使用過程中再脫下來去找鍵位。配備一個手柄會好一些,但不能從根本上解決問題。當然還有一些諸如掛載LeapMotion、MYO之類的解決方案,但這都超出了rift本身的範疇。就這個問題來說,我傾向於從rift能提供的輸入來著手解決。比如把頭部旋轉和移動不僅看做是攝像機的同步,還能當做一種輸入方式。這方面比較好的例子有《Titans of Space》和《Vanguard V》,但我最欣賞的還是Google Cardboard官方應用的做法(好像有奇怪的東西混了進來)。

所以我認為除了必要的3D知識之外,rift開發要學習的東西對於大部分人都是全新的,而且他們基本都屬於應用層問題。

官方煞費苦心地在官網放了很多關於如何開發rift應用的忠告(Oculus Best Practices Guide),主要是一些Do and Don't的條例,有較多關於避免眩暈(sickness)和增強沉浸感方面的內容。不過我瀏覽了官方Oculus VR Share (Beta)中的demo(吐了)之後,卻發現好像甚少有人注意這些點。這裡先列出一些我初步看下來有必要關心的吧:

  • 從頭部動作到畫面展現之間的延遲控制在20ms以內,以減少眩暈感。可使用內置的延遲測試工具測試應用的延遲。
  • 使用位置跟蹤的場合下,當用戶接近跟蹤區域邊緣時,以某種方式提示用戶回到跟蹤區域內。
  • 不要嘗試修改圖像變形算法、不要嘗試修改頭部跟蹤數據、不要嘗試修改位置跟蹤數據。
  • 人眼通過立體圖像獲得場景深度信息,對近處物體很敏感,一旦物體拉遠則感知度立即變差。
  • 盡可能地將UI融合在場景內,且最佳顯示的位置是距離觀察者2-3米的位置。準星一類的UI應該以聚焦對象的深度進行渲染。
  • 加速/停止會引起視覺和平衡器官之間的感知衝突,如果加速/停止不是由用戶發起的,則盡可能地避免上述情況。
  • 避免線性垂直震動,接近0.2Hz頻率的垂直震動讓人最感不適。非垂直震動在接近0.3Hz的頻率讓人最感不適。
  • Zoom,或鏡頭縮放效果,盡可能避免。
  • 避免要求用戶平移、後退、旋轉的場景。
  • 使用用戶熟知的環境作為背景(如響應頭部轉動的天空盒)有助於減輕視覺衝突和增強舒適感。
  • 避免使用高頻紋理(如條狀、精細的紋理),高頻紋理會增強環境中對於運動的感知,會讓人不適。改用低頻紋理可以改善這一狀況。
  • 解決用戶接觸輸入設備困難的問題,或者將頭部運動本身作為一種輸入方式。
  • 使用3D音效加強沉浸感。

最後還是夾一下私貨,這是我在知乎專欄寫的:[原]Oculus Rift DK2試用手記 - 燈塔實驗室,有興趣可以看看。

以上

【高大勇的回答(16票)】:

如果想要開始 Oculus Rift 的開發,首要的一點是:你可以將 Oculus Rift 理解為一個擴展顯示器。這個顯示器有一點像我們平時看到的 3D 電視的屏幕,左右各有一個畫面,兩個畫面有視差。在使用的時候,左右眼各看到一個畫面。

所以,你只要應用各種方法實現這兩個畫面就可以了

如果你是 3D 遊戲的開發者,那麼可以通過各種開發工具來實現這兩個畫面同時顯示。當然,最快的方式是使用 Unity,因為 Oculus VR 已經提供了 Unity 的支持,其最主要的作用就是提供了一個支持 Oculus Rift 的攝像頭,只要將這個 camera 放入場景,那麼通過這個 camera 看到的畫面就已經是符合 Oculus Rift 要求的了。簡單來說,如果你已經做好了一個第一/第三人稱視角的 3D 遊戲,那麼用 Oculus VR 提供的 camera 替換掉正常的 camera,然後再做一些輔助工作就可以實現你想要的效果了。其它框架或者引擎也是大同小異(比如 Unreal 或者 Source Engine 等)。

其實我們使用 Oculus Rift 不一定局限在 3D 應用/遊戲中,我們也可以將其應用在網頁中。這個相對會複雜一些,目前常用的方法是在後台跑一個 Socket Server(甚至可以採用 node.js 來跑 socket.io),這個 Server 不斷的獲取 Oculus Rift 頭盔的數據變化,然後通過 Web Socket 傳遞給瀏覽器。瀏覽器裡面採用 WebGL(常用 three.js)來渲染兩個有視差的畫面,這時戴上 Oculus Rift 就可以看到效果。

有了這兩個例子,既然 Oculus Rift 是個顯示器,那麼我們是否需要專門去學習某些特定的知識就變得不那麼重要了,在瞭解了原理和特性之後,我們就可以使用我們用著比較順手的 Adobe Flash、Adobe AIR、Processing、SDL……等等具有圖形開發功能的工具來開發 Oculus Rift App 了。如果有 3D 攝影設備(3D 攝像機、3D Panorama 全景攝像機等),也完全可以做出支持 Oculus Rift 的帶有沉浸感的 3D 視頻。配合其它的附件,比如 Leap Motion(同樣也支持 Web 使用)等,就能做出更佳豐富的體驗了。

那麼,基於自己的現有的知識積累,說不定就能找到突破口。不斷的嘗試並且瞭解 Oculus Rift 的工作原理,吃透它的機能才是首要的。所以,關鍵還是在於要做出什麼樣的東西,拿出什麼樣的驚人想法(別忘了 2D 的遊戲/應用也是可能出現在 Oculus Rift 上的哦~還有直接用頭盔當遊戲控制器的也有哦~)。

【野火Taffy的回答(3票)】:

碰巧在坡島的時候參加了一個VR Workshop,當時用了Unity 3D來做一個VR的Demo遊戲,類似Pacman迷宮這樣,所以對VR的開發也有一個初步的認識了,有一些乾貨,所以來答一下。

————————————

根據我的感覺,其實一個VR Game Developer和傳統的Game Developer並沒有巨大的區別。

= 基本能力 =

編程知識,寫代碼的能力。對框架的熟悉程度,學習新技術的能力。具體的路線的話選擇應該就比較多,跟一般的遊戲開發差別不大,還有3D建模的能力(美工,原型設計)。

有兩個我比較瞭解的路線。

1. Unity + VR SDK

直接使用Unity,導入專門的Oculus SDK,使用VR視角就好了,然後就是慢慢去磨咯。

我自己做的Demo:VR Workshop - pacman prototype(Youtube鏈接,需翻牆)

2. WebGL + Three.js + WebVR

VR meetup 上的 Demo: desertVR(用手機打開可以直接看在VR設備的效果)

因為WebGL實際上是按照OpenGL規範去設計的,所以學習WebGL可以從OpenGL開始。

具體學習可以參考某個關於WebGL學習路線的問題與下面的答案:WebGL 是否需要以 OpenGL 為學習基礎? - OpenGL。

如果要學習 OpenGL,那麼脫不了三本書

紅寶書 OpenGL Programming Guide,出到第八版

藍寶書 OpenGL SuperBible,出到第六版

橙寶書 OpenGL Shading Language,出到第三版

如果要學習OpenGL ES,那麼只有一本,入門的話我最推薦的是這本,它與 WebGL 的關係也最近

OpenGL ES 2.0 Programming Guide

(2014-04-26更新,已經出到 OpenGL ES 3.0 版本了)

其實還有一本最靠譜的

WebGL Programming Guide,但是還沒發售(2014-04-26更新,已發售)

2013-11-03 更新

WebGL高級編程:開發Web 3D圖形 是一本非常全面的書籍,推薦作為第一本入門書。

然後再加上一定的Javascript的知識,就可以開發了,利用Three.js這樣的框架 + WebVR就可以開發VR應用了。

WebGL現在雖然大部分都是Prototype的階段,但是由於Web非常利於傳播,一次開發全應用適配等等原因,加上現在基本上VR設備都會支持WebGL,所以有一定理由相信WebGL在未來會是遍地開花的情況

= 綜合能力 =

美術常識、遊戲系統設計算是綜合能力裡面最基本的。除了這些以外,任何的知識與人生體驗都有幫助。因為一款遊戲會融入了很多個人的東西。

因為是VR,所以還有一些別的要求,比方說設計交互方式,交互設備的能力,HCI的經驗等等,甚至一些醫學常識(比方說如何設計遊戲以避免暈眩,這一點在官方指南上也有提及)。

—————————————

補充:

我大概看了一下前面的答案,或多或少都說到了一些東西,但是都沒有全部說到點上,把他們結合在一起就是一個很好的答案了。

總結一下,

——@Shen Li 列舉了Valve招聘的要求。

或多或少說明了如何點技能點。比一般的Game Developer多出的要求就是HCI的經驗,畢竟如果使用VR的話,還有甚至能有一些硬件的知識最好,因為有可能需要自己去設計交互設備,畢竟光有視覺沒有體感不能算完整的VR。

——@didayin 提到了用SDK從零開發和用遊戲引擎的區別。

——@康托耶夫 講了一個自己開發的故事,其實還是蠻貼近現在的情況的。

利用遊戲引擎入門的話,其實花上很多很多的時間,細心設計,慢慢打磨都能做出一款很好的遊戲,對技術上的要求並不高,重要的在如何去實現你的東西,花多少時間,有多少能力和創意。

——@Ye Feng 提到了一個很重要的一點,就是設備暈眩的問題。

想必工程師們在開發Oculus Rift的時候就已經感受到了,並且提出了一些在遊戲設計上的解決辦法。(這一點我自己也是深有體會,我大概5分鐘左右就開始覺得噁心了,這種感覺和暈車的感覺是一樣的。)

個人見解,請多指教。

希望本答案能有幫助。

【楊定鵬的回答(2票)】:

謝邀。外出中,用手機大概說下。索尼那個不熟悉,說說OR吧,因為是用unity來開發的,所以unity你得會吧,那unity的腳本語言你也得會吧(個人建議c#),這樣,你就有了基本的開發能力。然後,你需要一個可操作的場景,這個一般由美工和建模師來完成,偷懶可以網上下,作死可以自己學3dmax,maya等比如我。。。學完這些就能完成個比較簡單的虛擬現實場景了。然後就是再深入了,上到。玩家體驗,下到物理模擬。。。各種天坑等你填(我受夠了T_T)

【張海濤的回答(1票)】:

OR 有三種實現方式,實拍,3D動畫,3D引擎。

可以根據自己比較擅長和熟悉的領域的去選擇。

比較簡單的適合個人的就是3D引擎這個方式了,用unity就好了。

進階過程中要仔細研究什麼情況會產生眩暈感,然後在製作和設計層面要規避開,同時也可以看些3D電影拍攝的知識,這些也是很好的借鑒。

【陶仁賢的回答(0票)】:

用UE4吧,裝好驅動後,插上DK2,任何遊戲瞬間升級成VR遊戲。

不需要程序員也能完成遊戲邏輯,

【康托耶夫的回答(6票)】:

來扯會淡吧

雖然說現在OculusRift當紅,是個誰都知道,又和可穿戴設備聯繫在一塊(我老婆買個奮達電子的股票還說丫會漲因為是可穿戴設備。。。)所以大家自然的想成了一個高大上的東西。 其實開發起來令人驚訝的簡單。

這麼說,它根子就是把個顯示器套頭上而已,(要不然國內廠商怎麼一窩蜂過去山寨,技術不複雜的),硬件層面似乎沒太多困難,要說有主要是OculusRift用的是弧面屏幕,國內廠商往往就是給你個放大鏡,效果還是有區別。

真正有哏的可能倒是更多集中在硬件層面。

來說說我的開發故事。

我朋友某甲是個神奇的人,精熟各種哲學理論,雄辯驚人,初次見他,他用鮑德裡亞的消費社會理論配上虛擬現實的概念解釋魔獸世界。。。 毀我三觀於一旦。

後來覺得盛大的零世界項目簡直太需要這個一個能在哲學層面扯淡的高人,推薦他前去面試,據說面試中藐視考官,考官問策劃理論他直接繞過軟肋大談禪機,把面試的策劃徹底逼瘋,於是未果。

(這種案例似乎在他的生涯裡面發生無數)

過了很多年之後,又再次相望與江湖,這哥們據說已經愛上了遊戲引擎,在家好好學習了一陣UDK決定重返上海灘,要做一番事業,聽聞我在各種奇葩項目上面頗有建樹,於是再邀我一聚,聊聊他此行的宏圖。

其時某甲從未聽聞過oculusrift,MYO ,Leaopmotion之類我們新媒體行業的騙錢利器,只是紅口白牙談了個願景,說能否像刀劍神域一樣,大家戴上個頭盔,拿起茶杯在個茶室喝茶,這樣身在曹營眼在漢,虛擬場景裡面或茫茫草原,或皚皚白雪,或酒池肉林,與手中茶有種種呼應,甚至可以和隔壁茶屋上的人的Avatar來個交談,人不相見,精神出軌,似乎頗為好玩。

我對他的想法頗有興趣,倒不覺得項目能夠盈利(或者就算某甲用扭曲現實立場弄來筆投資,要到兜裡其實前路漫漫,犯不上我資深業內混子全情投入)不過對這個技術的可實現性還是興趣盎然,覺得可以完全free,給他弄個小demo出來,讓他去忽悠投資,我全身而退,盡了人事,賺了經驗,也不耗費我太多精力。

於是找朋友借了個Oculus,開始瞎折騰,主要是實現兩個場景,一個在一個虛擬空間裡面,一杯熱茶飄蕩,人跳入熱茶,隨後在一道如同時間隧道的荒誕場景裡面,各種生活雜物在空中如走馬燈在身邊呼嘯過(此處強調三維出畫感),隨後人物飛入一個車廂坐定,面前出一虛擬人物與之談人生談感情云云

腦洞大開啊,設計有飛機稿,這項目也足可打上一飛機

於是打開unity,下載oculusrift sdk導入,找了一堆美術素材,三四天業餘搞定

需要什麼技術呢,會個引擎導入插件就成,於是輕鬆的搞定

這個項目後來似乎朋友也沒忽悠到投資,但是因此愛上了unity,奮發了一年學習了一下,居然開了加公司做起增強現實的生意來,這是後話。

這是不是也側面反映了OculusRift的開發難度?

找不著工程了 哪天找到了放幾張截圖上來

ps: 騰訊開始採購奮達的頭戴設備。。 媽的提前漲了 說好行情呢 嗚嗚

【didayin的回答(1票)】:

以 Oculus Rift 為例,應用開發主要兩種途徑,一種是直接使用 SDK,一種是使用 UE4,Unity 這樣的遊戲引擎。

前者的話要求你掌握一種編程語言,然後使用對應該語言的 SDK,具體可以參照 Manning: Oculus Rift in Action。使用 SDK 可以擁有最大的靈活度,不過工作量也大,更要命的是,不同的設備應該會有不同的 SDK。而且 OR 只是虛擬現實的輸出設備,當你進一步考慮各種不同的輸入設備時,就會發現直接使用 SDK 是件工作量巨大的事情。

使用遊戲引擎的話則可以避免這個問題,因為引擎的一個責任就是對不同的 SDK 進行封裝,包括輸入與輸出。在 Unity 推出免費的 OR 支持前,UE4 是最好的選擇。除了遊戲引擎外,最好還能擅長一種建模軟件,可以試試 Blender。在建模軟件之外如果還有餘力的話,可以研究下圖像處理和音頻處理。

【ShenLi的回答(0票)】:

這是Valve Software軟件和硬件工程師的招聘要求。

Virtual Reality - Engineers

At Valve we are pushing the boundariesof virtual reality and related technologies. We are looking for versatile,self-directed hardware and software engineers in many disciplines that can helpus achieve the next steps in VR. Join the Valve team pursuing hardware design,software development, prototyping, testing, and production as we invent,design, and deliver new experiences to over 100 million customers.

Experience in one or more of thefollowing areas:

· User Interfaces

· Human Computer Interaction

· Controllers

· Computer Vision (Tracking, Photogrammetry, BundleAdjustment)

· Image-Based Rendering & Light Field Rendering

· Optics & Computational Displays

· Tracking (EKF, State Estimation, Inertial Navigation,Control Theory)

· 3D Graphics: Shading, Rendering, Drivers

· Engine Integration (Unity, Unreal)

· Spatialized Audio

· Human Perception & Vision Science

· FPGA / ASIC Development

· Analog / Mixed Signal Circuit Design

· Embedded Firmware

· Video Compression

· Wireless Technologies

Apply for thisposition >

Valve

【褚躍躍的回答(0票)】:

就是3D遊戲開發。

標籤:-OculusRift -SonyMorpheus -虛擬現實(VR)


相關資源:





給我留言