Oculus APIについて
Oculus APIとデバイスバージョンの関係
OculusのダウンロードページよりDL出来るAPI(Application Platform Interface)のこと。
私が、試験的に使用していたのはOculus DK2(以後、DK2とする)です。
正式版との違いは、トラッキングデバイスに相違がある点です。
あとは、ドライバーも違っているようで、最新のドライバではDK2をコントロールする事は出来ませんでした。
開発言語は、C++, Unity(C#, Java Script), Unreal Engine(C++)に対応しています。
■Oculus DK2の開発環境
OS | ドライバ バージョン | SDKバージョン | Unity Package Version |
---|---|---|---|
Windows | Oculus Runtime for Windows v0.4.3-beta | Oculus SDK for Windows v0.4.3-beta *1 | Unity v4.5.5 |
Mac | Oculus Runtime for OS X v0.4.3-beta | Oculus SDK for OS X v0.4.3-beta | Unity v4.5.5 |
Oculus の相関図
OVR系クラスの主要なクラスの相関図を以下の画像にまとめました。
クラスのメンバ変数・メンバ関数 説明
上記、相関図のクラスのうちの主用なクラスのメンバ変数及びメンバ関数を示します。
調査環境は、Unity v5.x, Oculus Utilities for Unity 5 v1.8.0です。
■OVRManagerクラス
OVR系APIの中心的なクラスです。
このクラスを中心に周囲のクラスを管理しています。
●インスタンス
R: Read
W: Write
+メンバ名称 | 型名 | 属性 | 役割 |
---|---|---|---|
+instance | OVRManager | R | OVRManagerのインスタンス |
+display | OVRDisplay | R | 有効なディスプレイへの参照 |
+tracker | OVRTracker | R | 有効なセンサーへの参照 |
+boundary | OVRBoundary | R | 有効な検出領域設定への参照*3 |
+profile | OVRProfile | R | ユーザの設定情報や身体情報など |
●イベントをトリガーにしたコールバック系
+メンバ名称 | 型名 | 属性 | 役割 |
---|---|---|---|
+HMDAcquired | event Action | - | HMDが割り当てられた |
+HMDLost | event Action | - | HMDが認識されなくなった |
+HMDMounted | event Action | - | HMDがユーザーの頭に嵌った |
+HMDUnmounted | event Action | - | HMDがユーザーの頭から離れた |
+VrFocusAcquired | event Action | - | VR焦点を得られた |
+VrFocusLost | event Action | - | VR焦点を失った |
+AudioOutChanged | event Action | - | 音出力デバイスの変更とリスタートが必要 |
+AudioInChanged | event Action | - | 音入力デバイスの変更とリスタートが必要 |
+TrackingAcquired | event Action | - | センサーがトラッキング対象を得た |
+TrackingLost | event Action | - | センサーがトラッキング対象を失った |
+HSWDismissed | event Action | - | 『Health & Safety Warning』というウィンドウが消えた |
※『Health & Safety Warning』とは・・・
以下の画像のように表示される注意書きのウィンドウの事で、何かキーを押すことで消えます。
●状態チェック・設定系
R: Read
W: Write
メンバ名称 | 型名 | 属性 | 初期値 | 役割 |
---|---|---|---|---|
+isHmdPresent | bool | R / W | - | trueなら、接続されていて存在している |
+audioOutId | string | R | - | 音声出力デバイス識別子*4 |
+audioInId | string | R | - | 音声入力デバイス識別子*5 |
+hasVrFocus | bool | R | - | trueなら、アプリケーションはVR Forcusを持っている |
bool | R | false | 常にfalse(必ず表示する) | |
bool | - | - | 使用されていない | |
chromatic | bool | R / W | - | trueなら、テクスチャーの帯域幅をコストにして色彩を改善する。 |
monoscopic | bool | R / W | - | trueなら、両眼は同じ絵を見る。(両眼の中心で描画する、パフォーマンスを節約し快適にする) |
queueAhead | bool | R / W | true | trueなら、描画処理の映像のゆがみをCPU-GPUをパラレルで動かすことで1/4フレーム高速化する |
useRecommendedMSAALevel | bool | R / W | false | trueなら、Unityがハードウェアのパフォーマンス・クォリティーに合った最適なアンチエイリアシングレベルを設定する |
enableAdaptiveResolution | bool | R / W | false | trueなら、動的アクセラレーションを許容する |
maxRenderScale | float | R / W | 1.0f | アプリケーションが適応可能な解像度モードの最大倍率を設定[設定可能範囲: 0.5~2.0f]*6 |
minRenderScale | float | R / W | 0.7f | アプリケーションが適応可能な解像度モードの最小倍率を設定[設定可能範囲: 0.5~2.0f]*7 |
vsyncCount | int | R / W | - | FPS(Frame per seconds)の値 |
+batteryLevel | float | R | - | バッテリ残量を取得 |
+batteryTemperature | float | R | - | バッテリの温度を取得 |
+batteryStatus | int | R | - | バッテリの状態を取得 |
+volumeLevel | int | R | - | 音量レベルを取得 |
+cpuLevel | int | R | - | CPU性能のレベルを取得 |
+cpuLevel | int | R / W | - | CPU性能のレベルを取得 |
+gpuLevel | int | R / W | - | GPU性能のレベルを取得 |
+isPowerSavingActive | bool | R / W | - | trueなら、CPU/GPUの使用電源を抑える |
+trackingOriginType | OVRManager.TrackingOrigin | R / W | - | トラッキング対象の種別(EYE LEVEL, FLOOR LEVEL) |
usePositionTracking | bool | R / W | true | trueなら、位置トラッキング機能をOVRCameraRigのカメラと同期する |
useIPDInPositionTracking | bool | R / W | true | trueなら、ユーザーの目と目の距離をOVRCameraRigのカメラと同期する |
resetTrackerOnLoad | bool | R / W | false | trueなら、各シーンをロードする度に頭の位置をリセットします。(原点とベクトルを再設定する) |
isSupportedPlatform | bool | R | - | trueなら、VRがPlatformに対応している |
isUserPresent | bool | R | - | trueなら、ユーザーがHMDを着用している |
●外部から参照できる関数
メンバ関数名称 | 戻り値 | 引数 | 役割 |
---|---|---|---|
ReturnToLauncher | - | - | 関数をコールするとアプリやゲームから離れて、ランチャーメニュー/ダッシュボードに戻る |
+PlatformUIConfirmQuit | - | - | 関数をコールすると終了選択画面が表示される |
+PlatformUIGlobalMenu | - | - | 関数をコールするとグローバルメニュー画面が表示される |
まとめ
Deviceまわりの設定は、OVRManagerである程度機能する事が見えてきたと思います。
各メンバ変数のアクセス方法は、以下の通りとなります。
void test() { // staticなメンバの場合は、以下の書き方でアクセス可能です。 if( OVRManager.isHmdPresent ) { // HMDが有効で使える状態でする処理を書く } // 通常のpublicメンバの場合は、以下の書き方でアクセス可能です。 OVRManager.instance.usePositionTracking = false; }
*1:DK2向けのSDKは、C++によるライブラリやAPIサンプルコードが入ってました。
*2:2016/10/20現在 最新バージョン。
*3:センサーが検知する空間の境界, VIVEとかが参考に成るかもしれない
*4:Windows audio endpointが使用するためのIMMDevice(Multi Media Device Interface)のUUID(Unique User ID)を得る
*5:Windows audio endpointが使用するためのIMMDevice(Multi Media Device Interface)のUUID(Unique User ID)を得る
*6:enableAdaptiveResolutionが有効になっていることが前提
*7:enableAdaptiveResolutionが有効になっていることが前提