OpenXR 架構簡單介紹

| | 0 Comments| 10:15
Categories:

去年 Heresy 已經有簡單介紹過 Khronos 的跨平台 VR / AR 開發標準、OpenXR 了。

他的官網是:https://www.khronos.org/openxr/

不過在當時由於並沒有什麼真正可以使用的 runtime,所以 Heresy 並沒有真得下去研究該怎麼用,而是繼續使用 Valve 的 OpenVR 來做相關的開發。

而一年過去了,看來目前幾家主要的廠商,都開始有提供 OpenXR 的 Runtime 了!所以感覺上,也算是可以開始玩看看了~


目前看到的 OpenXR Runtime 包括了:

基本上,雖然不見得是正式版,但是至少算是主要頭戴式顯示器都可以用了。

以 Heresy 主要有在用的兩個系統的頭戴式顯示器來說:

  • Windows MR 的系統(例如 Acer AH101)只需要另外安裝 Microsoft Store 上的「Windows Mixed Reality OpenXR Developer Tools」這個 App(連結)就可以了。
    (其實不裝好像也可以用)
  • SteamVR 的系統(例如 HTC ViveValve 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 了~

而如果想靠範例來學的話,或許可以參考下面的一些相關的專案:

沒意外的話,Heresy 之後應該也會繼續在整理一些文章和範例吧。

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *