OGRE + OculusRift

ちょい前ですがOculus Rift DK2が届きました.

863602784

練習がてらSDKに付いていたサンプルを参考に,Oculus RiftをOGREで使うデモを作ってみました.

screenshot

HMDが無いと動きません.”Extend Desktop to the HDM”モードにのみ対応しています. 操作方法は普通のWASDキー+マウス操作です.Qキーで終了.
オプショナルな機能としてVキーを押すとレンズ歪みなしの表示ができます.表示は基本的にHMDに送られますが, Ctrlキーを押したまま起動するとOGREのコンフィグダイアログの解像度/フルスクリーン設定で動かせます.

* * *

Oculus RiftのSDKは,いまのところDirectXやOpenGLなどの(ある種の低レベルAPI)にのみ対応したつくりになっています. Unityとかにも対応しているみたいですけど(もちろん,LibOVRを書き換えれば対応は可能です).

SDKによるレンダリングを使おうとすると,OGREのレンダーシステムがせっかく隠してくれている バックエンドAPIのリソースを掘り起こすことになるので,あまりきれいには実装できません.

ただまぁ正攻法ではないのですが,

  1. レンズ歪みに合わせた画像を表示して,
  2. HMDの姿勢を取得,

の二つができればよいわけで,表示部分に関してはOculus Rift SDKに頼る必要はあんまりありません. SDKのサンプルソース内の説明によれば非推奨とされてはいますが.

Oculus Riftでの表示方法(とそれをOGREで実現する方法)については,後日詳しくまとめたいと思いますが基本的には

  1. レンダーターゲットテクスチャに一つのシーンを二つのカメラで描く(オフスクリーンで描く).
  2. LibOVRが提供するディストーション用のメッシュに↑のテクスチャを貼り付けて表示する.
  3. この表示には専用のシェーダを使う(SDKのソースに埋め込まれてる).
  4. HMDから両眼の位置と向きを取得してビュー変換に反映させる.

ということのようです.
掲載したデモでは,これらのことをOGREのAPIのみを使って実現しています.

Leave a Reply