【Verge3D】如何開發WebVR應用
本教程使用Verge3D 2.10正式版,有關這個版本的主要功能參見更新日誌。2.10版的一大更新是增加了AR/VR支援,其中AR部分由於依賴的webXR標準還在開發當中,尚不穩定,所以該功能暫時禁用。
準備工作
首先了解什麼是webXR?
它是Verge3D 2.10 AR/VR功能實現的技術依賴。它是Mozilla於2017年提出的用於取代WebVR的新的技術標準,原有的WebVR API也將會被新的 WebXR Device API 取代。WebXR是在網路上實現VR/AR/MR,從而實現沉浸式Web體驗的技術標準。詳情見 https://github.com/immersive-web/webxr 。
現在支援WebVR的硬體裝置有哪些?
就WebVR功能的實現來說,目前有兩大類,一是使用眼鏡盒子的移動端裝置,主要是支援 Google Daydream 的安卓手機;另一類就是VR頭顯裝置,如HTC vive,oculus rift,及其它支援google Daydream的VR一體機。
支援的WebVR的瀏覽器有哪些?
首先自然是firefox瀏覽器,WebXR是Mozilla提出的,而firefox正是自家的產品。在PC平臺使用最新穩定版本的firefox,在google Daydream平臺上可以安裝 firefox reality 。另外一個靠譜的瀏覽器就是google的chrome瀏覽器。
開發
首先建立專案,目前由於Verge3D對WebVR的實驗性支援,官方建議在建立新專案時勾選 Legacy VR 選項,以獲得更普遍的裝置的支援。

接下來就要建立場景。和普通的web3d專案一樣,按照標準的流程搭建場景,甚至拼圖部分也和標準流程一樣,VR功能像是額外增加的一種互動方式,並沒有什麼特殊的地方。
要說有,當然是有的,要不然也不需要寫這個教程了——第一個需要注意相機。
相機有兩點需要說明:
1.進入VR模式前相機和以前沒什麼不同,但是進入VR模式後不管相機在場景的什麼位置都會回到世界原點,這樣就會造成相機位置上的錯誤。所以我們需要在在場景中設定一個虛擬體,用它來標記相機的位置,在進入VR模式後,使用拼圖將相機位置吸附到虛擬體身上,如果相機需要移動,還要把相機P到虛擬體上。這裡會用到兩個拼圖:snap to object、parent to object。
2.很重要的一點是虛擬體不要有縮放。如果有縮放,在VR模式基於注視的互動中,注視標記點也會被縮放。也就是下圖中綠色的注視點。

關於互動方式
互動方式有兩種,對於沒有控制器的裝置,如眼鏡盒子這種型別的,互動使用注視,即上圖所示的方式。對於有控制器的裝置,會從控制器發射出一種虛擬的射線,但是隻支援一個控制器,也就是隻能用一個手柄進行互動。

可以使用 when hovered 或 when clicked 拼圖來處理使用者事件,從這裡可以看出VR的互動事件與普通模式下的點選、經過事件是一樣的,所以前面說VR像是增加了一個互動,並不會和原來的程式有相容性問題。
關於VR模式
進入VR模式只需要兩個拼圖就可以了。需要注意的是進入VR模式通常需要通過點選按鈕實現。按鈕可以是場景中的物體,或者html按鈕。

預設有3種VR模式:sitting or standing、walking、looking from orgin,前兩種就實際體驗來看並沒有什麼不同,但是根據規範,兩者一個是靜止的,一個是運動的。而第三種模式就是固定位置的,類似Flying型別相機。
關於瀏覽器
Google Daydream 平臺上使用穩定版Chrome瀏覽器,並在chrome:// flags頁面上開啟兩個WebXR選項:

HTC Vive和Oculus裝置可在穩定版Chrome和Firefox瀏覽器中使用。此外,Chrome瀏覽器需要在chrome:// flags頁面上啟用某些WebXR選項:

需要說明的是,在目前的Firefox瀏覽器上不支援控制器的互動,只能使用注視互動;在Chrome瀏覽器上進入VR模式後,PC上的畫面是靜止的,不能與頭顯同步。
最後,這是我開發一個WebVR應用程式:高空墜落體驗。
