■ Oculus Rift DK2 PC-SDK(V.0.8.0.0-beta) と DirectX11 を使ったアプリ開発


Visual Studio 2013 + DirectX11 + Oculus Rift DK2 PC-SDK(V.0.8.0.0-beta)での開発手順の解説です。
SDK のサンプル等を見れば別段説明の必要もないと思いますが、日本語のドキュメントが少ないので、一応自分の理解した部分について書き記しておきます。

一応、DirectX11 で一通りのレンダリング処理を自力でコーディングできる人が対象です。


まず VR 対応アプリを作るにあたって必要な技術は 「ヘッドトラッキング」と「立体視」の2つになります。
逆にこの2つ以外に特別な技術は必要ありません。

・ヘッドトラッキング
頭にかぶったゴーグル(HMD)の「位置」と「角度」を取得することをヘッドトラッキングといいます。
内部的には「加速度センサ」「角加速度センサ」「磁気センサ」「カメラを使った位置情報」等、複数の情報を掛け合わせていますが、SDK では確定した「位置」と「角度」を取得するだけなので、アプリ側が計算の過程を気にする必要はありません。


・立体視
両眼視差の立体視は、右目と左目それぞれから見た映像を、それぞれの液晶(有機EL)パネルにレンダリングすることで実現します。
アプリ側としては、右目用の画像と左目用の画像をレンダリングするので、レンダリングプロセスが2回になります。

立体視ではないアプリでは、通常、スクリーンの中心から一定距離手前に視点を設定しますが、立体視の場合は、左右の目の位置を視点とします。
このとき、視線の方向が正面ではなくなるため、プロジェクションマトリックスの設定が特殊になりますが、透視変換の計算自体を変更する必要はありません。
そして、ここで使用するプロジェクションマトリックスは SDK が作ってくれるので、アプリ側が細かいパラメータ等を気にする必要はありません。

実際にはヘッドトラッキングで取得した頭の「位置」と「角度」をもとに、左右の目の「位置」と「角度」を計算し、それを VR 空間で基準となる「位置」と「角度」(通常のカメラの「位置」と「角度」)に掛け合わせて、VR 空間での左右の「位置」と「角度」を決定します。


 開発手順(環境設定) 

Visual Studio 2013 のプロジェクトに Oculus Rift DK2 PC-SDK を設定します。

 開発環境の設定


 開発手順(初期化) 

Oculus Rift DK2 を利用するために必要な初期化です。

 初期化~定型処理

 レンダリングターゲットの作成

 ヘッドトラッキングの初期化

 プロジェクションの初期化

 ミラー映像の初期化


 開発手順(ゲームループ) 

初期化が完了したらゲームループに入ります。
一定期間毎に HMD のトラッキングをして、その結果に基づいて画像をレンダリングします。
DK2 の場合、通常 1/75 秒間隔ですが、より汎用的に実装する場合は、レンダリングターゲットの作成時に取得したリフレッシュレート(ovrDesc.DisplayRefreshRate)をもとに間隔を設定します。

 ヘッドトラッキング

 レンダリング

 ミラー映像のレンダリング


 開発手順(その他) 

 その他


back