去年 Heresy 已經有簡單介紹過 Khronos 的跨平台 VR / AR 開發標準、OpenXR 了。
他的官網是:https://www.khronos.org/openxr/。
不過在當時由於並沒有什麼真正可以使用的 runtime,所以 Heresy 並沒有真得下去研究該怎麼用,而是繼續使用 Valve 的 OpenVR 來做相關的開發。
而一年過去了,看來目前幾家主要的廠商,都開始有提供 OpenXR 的 Runtime 了!所以感覺上,也算是可以開始玩看看了~
目前看到的 OpenXR Runtime 包括了:
- Microsoft OpenXR runtime for Windows Mixed Reality headset
- Oculus
- Valve OpenXR Developer Preview
- Monado (Linux Open-Source)
基本上,雖然不見得是正式版,但是至少算是主要頭戴式顯示器都可以用了。
以 Heresy 主要有在用的兩個系統的頭戴式顯示器來說:
- Windows MR 的系統(例如 Acer AH101)只需要另外安裝 Microsoft Store 上的「Windows Mixed Reality OpenXR Developer Tools」這個 App(連結)就可以了。
(其實不裝好像也可以用) - SteamVR 的系統(例如 HTC Vive 或 Valve Index),則是需要將 SteamVR 切換至 beta 版(應該是 1.13.3 以後)才能使用。
而比較麻煩的一點是,在單一系統上有多個 OpenXR Runtime 的時候,目前似乎只能將其中一個設為啟用(active)狀態,所以必要的時候需要自己手動切換。
像下面兩張截圖,就是 SteamVR 和 Windows MR 在說自己沒有被設定成啟動狀態的畫面。
而個人覺得比較麻煩的,是目前似乎也沒有一個比較好的官方範例可以測試?
以 Heresy 自己找到的資訊來說,目前要在 Windows 上測試,最簡單的方案或許是去自己建置微軟給的範例程式「BasicXrApp」(GitHub)了。
不過這個範例程式某方面來說也過度簡單了,在無法執行的情況下、也不會給出錯誤,有點麻煩…
如果是要自己開發 OpenXR 的程式呢?這邊主要是要透過 OpenXR Loader 來做中介層、對 OpenXR Runtime 進行操作。
OpenXR Loader 的 GitHub 頁面是:https://github.com/KhronosGroup/OpenXR-SDK
如果不想自己建置的話,也可以點選右側的「Release」(頁面),下載官方建置好的 Windows 版本;目前最新版本是 1.0.9。
下載之後,裡面就是一般 C 函式庫的形式,包括必要的 header 檔、各環境的 lib 以及 dll;除了一般的 win32 和 x64 外,還有 UWP 的版本、甚至連 Windows ARM 的版本都有,算是相當完整的。
而一般的開發者基本上只需要透過這個 OpenXR Loader 的 header 檔所提供的介面來進行程式開發就可以了。
下圖就是官方《OpenXR® Loader – Design and Operation》(GitHub、目前似乎沒有線上版)所提供的示意圖:
基本上,左邊綠色的 OpenXR Application 就是一般開發者要進行程式開發的部分。
右邊藍色的 OpenXR Runtime 主要則是硬體廠商(頭戴式顯示器系統廠商、例如 Valve、Microsoft)所要提供的;雖然在一個系統上可以安裝多個 runtime,但是一次應該是只能有一個是處於 active 狀態。
下方褐色的 OpenXR API Layer 呢,主要是可以在不修改程式、 API 的情況下、在應用程式和 runtime 之間插入額外的功能,可以用來提供驗證、測試等功能;他基本上算是非必要性的,不一定會存在(現階段似乎沒有可以用的實作?)。
而實際上在呼叫 OpenXR 的時候,大致上會類似下面的樣子:
應用程式呼叫的函式,基本上都會先經過 OpenXR Loader,然後視狀況、交給 API Layer 做處理,最後再傳遞給 OpenXR Runtime。
其中,API Layer 不一定會存在、而也不是所有函式都會經過所有 API Layer。
另外,Khronos 也還有一個 OpenXR-Hpp 的專案,可以產生 C++ 版的 OpenXR 介面。
不過,他並沒有提供已經產生好的版本可以直接使用,所以如果想要使用的畫,就需要自己建置了。
而考慮到官方文件只有原生的 C 語言…個人覺得還是先放棄 openxr.hpp 好了。
至於要開始寫 OpenXR 的程式的話…恩,該說不窺是 Khronos 嗎?OpenXR 並沒有直接提供 programming guide 類的東西、也沒有提供官方的範例程式可供參考。
官方的文件,基本上就是:
雖然不是沒辦法透過這些東西來學習,但是個人覺得光憑 Khronos 官方提供的資訊,應該是很難上手的…
如果想要了解通盤的運作架構的話,最主要應該就是 Reference Guide 的這張 overview 了~
而如果想靠範例來學的話,或許可以參考下面的一些相關的專案:
- 微軟的範例:OpenXR Samples for Mixed Reality Developers
- Windows-Only、C++17、Direct 3D 11
- Monado:Demos
- Linux-Only、Vulkan 和 OpenGL 的都有
- manoreken2/ View360Photo
- Windows-Only、使用 OpenXR + Direct 3D 撰寫的 360 照片顯示程式
- maluoi/ OpenXRSamples
- Windows-Only、OpenXR + Direct 3D 的單一檔案範例
- jherico/ OpenXR-Samples
- 使用 Qt 框架寫的範例
沒意外的話,Heresy 之後應該也會繼續在整理一些文章和範例吧。