??教程說明
Meta Quest 一體機(jī)具有透視(Pass through)的功能。它通過 VST(Video See Through)技術(shù),使用戶能夠透過頭顯看到現(xiàn)實(shí)中的場景,并且能將虛擬的物體融入于透視場景中,與用戶進(jìn)行交互。利用這個(gè)功能,我們可以開發(fā)一些混合現(xiàn)實(shí) MR 應(yīng)用,將虛擬和現(xiàn)實(shí)相互融合。
前期需要的一體機(jī)開發(fā)的環(huán)境配置可以參考這篇教程:Unity VR 開發(fā)教程: Meta Quest 一體機(jī)開發(fā) (一) 環(huán)境配置
電腦操作系統(tǒng):Windows
使用的 VR 設(shè)備:Meta Quest 2
使用的 Unity 版本:2021.3.5 LTS (這里推薦使用 2021 及以上的 LTS 版本)
Oculus Integration 版本:v54 (目前 v54 以上也適用)
官方文檔:https://developer.oculus.com/documentation/unity/unity-passthrough/
注:本篇教程可能具有時(shí)效性,因?yàn)?Oculus 的 SDK 更新迭代得比較快,如果大家使用的 SDK 版本比我的新,在不方便查看官方文檔的情況下也可以先試試本篇教程的配置步驟,如果發(fā)現(xiàn)教程過時(shí),歡迎大家進(jìn)行反饋,我也會及時(shí)進(jìn)行更改說明,一切以官方文檔為主。
最終實(shí)現(xiàn)效果:在透視下的現(xiàn)實(shí)場景中看到虛擬物體。
??配置透視的串流調(diào)試功能
開啟了這個(gè)功能后,就可以在設(shè)備與電腦串流的條件下運(yùn)行支持透視的軟件。這時(shí)候可以直接通過點(diǎn)擊 Unity 編輯器中的運(yùn)行按鈕,在頭顯中看到透視的場景。這樣就更加方便調(diào)試,不用每次打包到頭顯中運(yùn)行。
配置步驟很簡單:
- Quest 的系統(tǒng)版本要在 v37 及以上。
- Oculus 電腦客戶端軟件的版本要在 v37 及以上,并且確保設(shè)置-> Beta 測試版中的 “開發(fā)者 Runtime 功能” 和 “通過 Oculus Link 透視” 選項(xiàng)是開啟的。
??第一步:設(shè)置 OVRManager
首先我們新建一個(gè)場景,刪除場景中的 Main Camera。然后搜索 OVRCameraRig 這個(gè) Prefab,將它拖到場景中。這個(gè)物體就相當(dāng)于 XR 中的相機(jī)。
找到 OVRCameraRig 中的 OVR Manager 腳本,接下來需要做的步驟是:
1) 在 Quest Features 的 General 選項(xiàng)中,將 Passthrough Support 設(shè)為 Supported 或者 Required ,這樣打包的應(yīng)用就能開啟透視功能。
2)勾選 Insight Passthrough 下的 Enable Passthrough。這樣在應(yīng)用啟動時(shí)就會初始化透視的功能。如果不想在程序啟動時(shí)就初始化,可以取消勾選 Enable Passthrough,然后在自己的腳本中通過代碼設(shè)置 OVRManager.instance.isInsightPassthroughEnabled = true/false 來控制透視的開啟和關(guān)閉,這里的作用相當(dāng)于手動勾選或取消 Enable Passthrough。
另外,OVR Manager 中有個(gè) Tracking Origin Type 參數(shù)需要注意一下,它相當(dāng)于追蹤的參考系,參數(shù)分為 Eye Level, Floor Level 和 Stage。
這三個(gè)參數(shù)的區(qū)別可以參考這篇文章:Unity VR:Oculus Integration 中 OVRManager 的 Eye Level,F(xiàn)loor Level,Stage 的區(qū)別
??第二步:添加 OVRPassthroughLayer 腳本
接下來,我們在 OVRCameraRig 物體上添加 OVRPassthroughLayer 腳本,然后把 Placement 設(shè)為 Underlay:
Quest 中透視的現(xiàn)實(shí)場景相當(dāng)于單獨(dú)的一個(gè)圖層,而我們的虛擬場景和虛擬物品相當(dāng)于另外的圖層。
當(dāng) Placement 設(shè)置成 Underlay 的時(shí)候,相當(dāng)于透視的現(xiàn)實(shí)圖層置于應(yīng)用圖層的最底端,這時(shí)候現(xiàn)實(shí)圖層位于虛擬圖層之下。可以理解為現(xiàn)實(shí)場景充當(dāng)背景,虛擬物體疊加在現(xiàn)實(shí)場景上,也可以理解為虛擬物體會把現(xiàn)實(shí)物體遮擋住。
當(dāng) Placement 設(shè)置成 Overlay 的時(shí)候,則反之。相當(dāng)于現(xiàn)實(shí)圖層置于應(yīng)用最頂層,也就是現(xiàn)實(shí)圖層位于虛擬圖層之上,這個(gè)時(shí)候現(xiàn)實(shí)場景會把整個(gè)虛擬場景覆蓋掉,我們只能看到現(xiàn)實(shí)場景,看不到虛擬物體。
因?yàn)槲覀兿胍谕敢曄碌默F(xiàn)實(shí)場景中看到虛擬物體,所以我們要選擇 Underlay。
而位于 Placement 參數(shù)下的 Composition Depth 表示圖層的深度,數(shù)值越小,越后渲染,也就是渲染在越前面。這個(gè)參數(shù)一般是用到多個(gè)透視圖層的時(shí)候使用,因?yàn)?Quest 的透視 API 不僅能把整個(gè)圖層變成透視場景,也就是你看到的是完全的現(xiàn)實(shí)世界,除此之外還能做到局部透視,比如在一個(gè)虛擬物體的表面添加透視圖層,如下圖所示:
而 Composition Depth 一般用于多個(gè)透視圖層上,比如有一個(gè)深度為 0 的物體和一個(gè)深度為 1 的物體,會先渲染深度為 1 的物體,再渲染深度為 0 的物體,當(dāng)這個(gè)物體放在一起時(shí),深度為 0 的物體會遮擋深度為 1 的物體。
不過局部透視會放到未來的教程中介紹,這篇教程就不展開討論了。
??第三步:在場景中添加虛擬物體
我這里在 OVRCameraRig 物體前面添加了一個(gè) Cube 方塊:
但是如果這時(shí)候嘗試運(yùn)行程序,你會發(fā)現(xiàn)即使設(shè)置了 OVRPassthroughLayer 的 Placement 為 Underlay,自己還是看不到現(xiàn)實(shí)場景,只能看到虛擬場景。因?yàn)槲覀冞€有幾個(gè)步驟要做。
??第四步:刪除場景中的天空盒
如果渲染了天空盒,因?yàn)槲覀冎霸O(shè)置過現(xiàn)實(shí)圖層位于虛擬圖層之下,所以天空盒的場景會覆蓋掉現(xiàn)實(shí)場景。根據(jù)需求,我們想要在完全透視場景下,所以不需要渲染天空盒。
在 Unity 菜單欄選擇 Window -> Rendering -> Lighting ,點(diǎn)擊 Environment 選項(xiàng),將 Skybox Material 設(shè)為 None。
??第五步:設(shè)置相機(jī)
在 Hierarchy 面板中找到 OVRCameraRig/TrackingSpace/CenterEyeAnchor 這個(gè)子物體,它相當(dāng)于我們的相機(jī)。
然后在 Inspector 面板中,將 Camera 組件的 Clear Flags 設(shè)為 Solid Color,然后將 Background 的 alpha 值設(shè)為 0,也就是將背景的透明度設(shè)為0。Background 的顏色決定了透視場景的顏色,如果設(shè)為黑色(RGBA 都是 0),則看到的是默認(rèn)的透視顏色。因?yàn)槲沂褂玫氖?Quest 2,所以如果我將 Background 設(shè)為黑色,我看到的就是 Quest 2 默認(rèn)的黑白透視,如果是 Quest pro 或者之后擁有彩色透視的 Quest 設(shè)備,那么看到的應(yīng)該就是彩色透視的場景(和現(xiàn)實(shí)中的場景顏色一樣)。
現(xiàn)在,透視的環(huán)境配置已經(jīng)完成了。
最終效果:
注:
1)因?yàn)橹拔覀冊?OVRPassthroughLayer 腳本中設(shè)置了 Underlay,所以現(xiàn)實(shí)圖層會位于虛擬圖層的下方。當(dāng)我們用現(xiàn)實(shí)的手伸進(jìn)方塊時(shí),現(xiàn)實(shí)的手會被虛擬的方塊遮擋。
2)因?yàn)?Meta 的隱私政策,在 Unity 編輯器中無法看到透視場景,但是在頭顯里是能正常顯示的。
同時(shí),在 Oculus/SampleFramework/Usage/Passthrough/Scene 文件夾下有官方提供的一些透視 Demo,大家可以研究一波。
但是需要注意的是,OVRCameraRig 的 OVRManager 腳本中的 Passthrough Support 需要確認(rèn)選擇了 Supported 或者 Required,才能在打包出來的程序中看到透視場景。文章來源:http://www.zghlxwxcb.cn/news/detail-567847.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-567847.html
到了這里,關(guān)于Unity VR 開發(fā)教程:Meta Quest 一體機(jī)開發(fā) (二)混合現(xiàn)實(shí) MR 透視 Passthrough 環(huán)境配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!