Home People Research Blog Courses Links Search Download
NCHC

Blog

Blog 最新文章

  1. Visual Studio 的遠端偵錯:Windows
    2021/03/24 14:45
  2. Visual Studio 2019 16.9 支援使用 OpenMP LLVM
    2021/03/03 13:52
  3. Valve 推出完全支援 OpenXR 的 SteamVR 1.16.8
    2021/02/25 09:43

Blog 最新回應

  1. 加入斜體文字...
    2021/02/07 21:06
  2. 加入斜體文字...
    2021/02/07 21:06
  3. 加入斜體文字...
    2021/02/07 21:06

Keyword 關鍵字

OpenNI2 HTC Vive Pro OpenCV Python Qt svn WebGL Java ASUS Xtion 3d print Docker NiTE2 HTC Vive OpenXR 開放資料 Pandas Windows MR javascript C++ Pandas C++14 C++20 OpenCL GitLab xml C++11 Oculus Quest 2 Docker CUDA Python CubeX OpenVR PHP C++14 3D立體 OpenNI Kinect OpenGL git Vulkan 資料視覺化 Valve Index HTC Vive Focus OpenMP MR C++17 Boost 開放資料 iFlyover Oculus Rift S HoloLens 2 Oculus VR 資訊地圖 VR

類別:技術相關 » 技術研究
文章發表|我要回應|RSS訂閱

OpenXR 架構簡單介紹

去年 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
    • OpenXR Mobile SDK
    • Prototype OpenXR Support for PC Development
  • 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 類的東西、也沒有提供官方的範例程式可供參考。

官方的文件,基本上就是:

  • The OpenXR Specification
  • OpenXR API Reference Pages
  • OpenXR Reference Guide (PDF)

雖然不是沒辦法透過這些東西來學習,但是個人覺得光憑 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 之後應該也會繼續在整理一些文章和範例吧。

張貼者:heresy於2020/07/09 10:15 上午有0則回應,瀏覽次數:428次

-- TOP --

我要回應
* 身份  訪客 (暱稱:)
 本篇文章作者 (帳號:密碼:)
* 內容      
很高興 悲傷 震驚 疑惑 大笑 發瘋 傷心
* 留言密碼 (請輸入下方圖片中去除前、後位數的數字,共五碼。)
說明 1. * 表示必填欄位。
2. 不支援HTML Tag。
   

-- TOP --

© Visualization and Interactive Media Laboratory of NCHC, 2007 - 2021, All Rights Reserved. Contact E-mail