導語:2016作為VR虛擬現(xiàn)實的元年,各大VR廠商紛紛推出自己的硬件設(shè)備,巨頭們建立自己的VR生態(tài)圈,推出各自的設(shè)備-平臺-sdk為一體的閉環(huán),隨著VR硬件設(shè)備以及各大平臺的推出完善,VR內(nèi)容將成為下一階段的需求爆點,VR開發(fā)也將成為IT熱門職位。
本文旨在為各路希望進軍VR的開發(fā)者們提供VR的開發(fā)指引。
Step1 了解VR app依賴的運行環(huán)境和硬件設(shè)備
VR APP代碼的運行環(huán)境(不包括顯示環(huán)境)包括PC端、移動端、瀏覽器端和VR頭顯端,運行環(huán)境主要依賴于VR頭顯(Head-mounted Display,縮寫HMD)類型。
目前主要市場上主要有以下 3 種VR頭顯(HMD) 設(shè)備:
滑配式頭顯
入門級HMD,價格便宜。這種設(shè)備由一個盒子和兩塊凸透鏡組成,與智能手機相連接,將 2D 顯示變成 3D VR 顯示?;涫筋^顯設(shè)備性能依賴于主機系統(tǒng)(智能手機),智能手機是提供 VR 效果的必備部分,因此為移動端VR native app以及移動端瀏覽器的WebVR網(wǎng)頁運行提供硬件支持。
廠商:滑配式 HMD 設(shè)備包括谷歌 Cardboard 和三星 Gear VR。

分離式頭顯
分離式 HMD 設(shè)備較滑配式 HMD 設(shè)備復雜,內(nèi)置多種電子零部件。兩者的主要不同是,分離式 HMD 設(shè)備擁有自己的顯示屏,計算和處理模塊主要還在電腦或者主機。因此主要支持運行在PC端的APP或者WebVR網(wǎng)頁。
廠商:分離式 HMD 設(shè)備包括 Facebook Oculus Rift、HTC Vive 和 PlayStation VR。
整合式頭顯
整合式 HMD 設(shè)備擁有強大的計算能力和追蹤系統(tǒng)。作為一款獨立的計算設(shè)備,整合式 HMD 設(shè)備將處理器和顯示器合為一體,配備一整套零部件,價格高昂,app的運行環(huán)境主要是頭顯的操作系統(tǒng),因此現(xiàn)在應(yīng)用還不是很廣。
廠商:微軟 HoloLens(AR)
Step2 認識VR app項目產(chǎn)出流程
?一個VR app項目從落地到可運行大致需要經(jīng)歷三步:產(chǎn)品設(shè)計、UI設(shè)計和3d建模、開發(fā)編程。
1.產(chǎn)品設(shè)計
產(chǎn)品經(jīng)理向來都把握著app的第一環(huán),在這個階段VR產(chǎn)品經(jīng)理需要定位產(chǎn)品是面向移動端用戶、還是使用onculus或者HTC vive頭顯的用戶,還需要對用戶行為和產(chǎn)品功能進行多方面考慮,比如需要設(shè)計用戶在裸眼下點擊菜單和VR環(huán)境下凝視菜單的交互流程。同樣,如果開發(fā)的是VR游戲,我們需要VR游戲產(chǎn)品經(jīng)理對整個游戲進行策劃。產(chǎn)品經(jīng)理在第一環(huán)主要是輸出原型交互圖和prd。

2.UI設(shè)計與建模
產(chǎn)品原型出來之后,設(shè)計師就可以根據(jù)交互原型進行VR場景設(shè)計了(大部分的VR菜單設(shè)計都是采用弧形化的metro瓷片風格),游戲的設(shè)計師還需要對場景進行3d建模,現(xiàn)在主流的建模工具是c4d、3dmax、maya等,一些依賴于視頻資源為內(nèi)容的app還需要專業(yè)的360攝像機和錄音器進行全景錄制。
3.開發(fā)編程
當所有資源都準備完之后,就是VR開發(fā)者發(fā)揮了,與其他app開發(fā)相比,VR 開發(fā)者需要考慮更多的是3d場景的開發(fā)以及VR設(shè)備的事件觸發(fā),下文將進行主要介紹。
Step3 理解VR開發(fā)要點
1) VR場景開發(fā)
開發(fā)階段我們需要根據(jù)設(shè)計師的3d模型開發(fā)360°虛擬場景,這個階段有點像web前端開發(fā)的編寫html和css布局。
一個靜態(tài)的VR場景主要包含三個要素:場景、相機、實體。

VR開發(fā)空間主要由 場景、相機、對象實體組成
場景scene:即用戶所處的虛擬環(huán)境,VR場景的中心坐標軸x、y、z分別代表3d環(huán)境里的寬度、高度以及深度,我們可以將開發(fā)的場景分成由多個三維網(wǎng)格組成的世界,所有的VR元素如相機和實體都要被包含在內(nèi)。
相機camera:代表用戶的眼睛所在的位置,相機的位置代表用戶在VR場景所在的位置。
實體entity:代表虛擬世界里的所有物體,這些實體一般具有四個基本屬性為大小、位置、角度和材質(zhì),按照實體在場景里的功能分類,我們還可以分成:地面、天空、燈光和其它物質(zhì),我們可以通過設(shè)置實體的位移、大小、旋轉(zhuǎn)等屬性來布局用戶的虛擬環(huán)境。

靜態(tài)場景開發(fā)完之后,我們需要為場景元素增加動畫,VR的動畫產(chǎn)生主要是兩個方式:1.頁面初始化完成時觸發(fā);2.用戶事件觸發(fā)。
VR動畫其實主要是通過編程來控制相機或者實體的屬性來實現(xiàn),比如控制相機的位移來模擬用戶角色在場地里的移動,又比如我們給砍刀這個實體注冊監(jiān)聽,用戶揮動手柄來觸發(fā)場景里砍刀的位移等,這點跟其他app開發(fā)方式是相同的,都是需要給組件注冊事件監(jiān)聽函數(shù),不同的是VR的事件觸發(fā)類型。
2)事件觸發(fā)類型:
用戶在VR場景的事件類型主要為:初級模式:凝視觸發(fā)、手柄觸發(fā);高級模式:體感手勢觸發(fā)、語音識別觸發(fā)、行走觸發(fā)。
凝視觸發(fā)是VR頭顯支持的基本功能,VR按鈕監(jiān)聽到用戶凝視行為即可觸發(fā)事件;
手柄觸發(fā)類型依賴于VR設(shè)備配套的手柄所持支持手勢類型,一般手柄都配置了水平陀螺儀、加速計等傳感器,主要用于move平移、rotate轉(zhuǎn)動、press按壓按鈕的觸發(fā)事件;


體感手勢觸發(fā):這是個人比較支持的交互方式,它讓雙手進入VR世界,如leap motion。

語音識別觸發(fā):通過語音識別發(fā)送指令,是VR社交較為認可的交互方案。
行走觸發(fā):比較高級的觸發(fā)事件,市面較少見,一般需要萬向跑步機傳感輸入用戶的位移信息。

3)開發(fā)技術(shù)與框架:
主要有三個方向:VR大型游戲開發(fā)、VR移動端應(yīng)用開發(fā)、WebVR網(wǎng)頁開發(fā)
VR游戲開發(fā)
目前開發(fā)VR游戲最主流的框架是Unity 3D和Unreal Engine 4。
其中,Unity3D開發(fā)語言主要使用C#或者JavaScript,所以對于web開發(fā)者來說比較容易入門。而且Unity支持上述三種類型的頭戴顯示器,是跨平臺支持最好的開發(fā)框架和渲染引擎,這使得我們開發(fā)的VR游戲可以是運行在瀏覽器網(wǎng)頁、移動端上以及PC端的app。

移動端VR開發(fā)
Google VR SDK主要用來開發(fā)運行在ios、Android手機上的原生app,適用于滑配式頭顯。
瀏覽器端的WebVR網(wǎng)頁開發(fā)

如果我們希望將vr場景應(yīng)用在網(wǎng)頁瀏覽器上,WebVR API允許使用分離式頭顯來觀看運行在PC端上的網(wǎng)頁(草案階段),也支持使用滑配式頭顯觀看移動端瀏覽器的網(wǎng)頁,這提供了另一個開發(fā)模式,即使用開發(fā)web前端網(wǎng)頁的方式開發(fā)VR。
在 Web 上開發(fā) VR 應(yīng)用,有下面三種方式:
1.JavaScript, WebGL 與 監(jiān)聽設(shè)備方向(Device Orientation)
2.JavaScript, Three.js 與 WebVR
3.火狐WebVR框架A-Frame
A-Frame是一個通過 HTML 創(chuàng)建 VR 體驗的開源 WebVR 框架。通過該框架構(gòu)建的 VR 場景能兼容智能手機、PC、 Oculus Rift 和 HTC Vive所有使用到瀏覽器的場景。
關(guān)于WebVR的知識,這里就不細說啦,具體將在下一篇進行詳細介紹。
社區(qū)資源:
2016中國VR研究報告:VR概論介紹以及國內(nèi)VR情況描述
Unity 3D for VR:使用U3D開發(fā)VR教程
Google VR SDK:VR移動端App開發(fā)者網(wǎng)站
WebVR API:MDN關(guān)于WebVR API描述
Chrome Experiments for Virtual Reality:Chrome 團隊提供的 6 個 VR 案例
騰訊VR官網(wǎng):騰訊建立的VR開發(fā)者社區(qū)