Ovrvision+OculusRiftDK2のマーカレストラッキングもどきを実現する(仮)

概要

OvrvisionSDK2.1が公開され、OculusRift DK2が高視野角ビデオシースルーHMDとして使えるようになりました。

OvrvisionSDKにはAR機能があり、Arucoのマーカを用いたマーカARが実装されています。
しかし、マーカ無しでARを使えたら、ちょっと楽しいかもと思い、大急ぎで試しに作ってみました。
まだやりたい事が実現できていないので、また進捗があったら別の記事を書こうと思います。

作り方

OvrvisionSDK+OVRSDKを組み合わせます。以下のような処理を行います。

  • OvrvisionSDKのAR関係を無効化する
  • 現実の絵をOvrvisionSDKで持ってくる
  • OVRSDKのOVRCameraRigのポジトラを有効にして、CG座標系上のある絶対座標にCGを置く

つまり、普通のOculusRift DK2のコンテンツの作り方にして、背景だけをOvrvisionカメラの現実に差し替えます。

すると、まるでマーカ無しでSLAM等を使ってトラッキングをしているかのように、うまい感じにCGが現実に重なるはず、という企みです。ポジトラ用カメラがあるって素晴らしいです!

Gyazo - f0a7d9ed2db8c73ea3207a49cb9c95b7.gif

結果

マーカーとか無しで自分の部屋にキャラクターを呼べます

YouTube

本当はこうしたかった

OVRManager.tracker.GetPose()というAPIがあり、これを使うとDK2のカメラ座標に対する位置姿勢の絶対値座標と姿勢が取得できます。

DK2のポジトラカメラの高さを測って、この値に合わせてOvrCameraRigを動かしてやれば、 体験会やデモなどで綺麗にモデルを床に立たせる事が出来るはずです。

しかし、OVRSDK0.4.3.1時点では、このAPIがバグで動いていないので、

DK2座標については「rキーでリセット」

床の高さについては「uキーで上昇」「dキーで下降」

と言う原始的なユーザが見た目で合わせこむ形式になっています。 つらい…

原理的にこんなことも出来るはず

  • 好きなMMDモデル+モーションに差し替えて、自分の嫁を自分の部屋に呼べる
  • 自分の部屋のベッドで好きなMMDモデルと添い寝
  • 自分の部屋で好きなMMDモデルに壁ドン(これは簡易な手検出を行うと良いかも)

などなど、応用範囲は広そうです。

とりあえず試してみたい方へ

実はこの冒頭のクエリちゃんのデモ、コードは10行くらいしか書いていません。 一応冒頭のクエリちゃんデモのプロジェクト一式をソースコード込みで以下に置きます。

Unity4.5.5Pro+OculusRuntime0.4.3+OvrvisionSDK2.1+OVRSDK0.4.3.1の組み合わせです。 また、モデルにはクリエイティブコモンズライセンスで公開されているクエリちゃんを使用しています。 近くに寄っても破綻しない高解像度なテクスチャを含み、表情も豊かでアニメーションも比較的多く含む(mecanimセットアップ済みのモデルもある)ので、お勧めです。

http://www.query-chan.com/product.html

クエリちゃん【デジタル・インタラクティブ・アイドル】OFFICIAL WEBSITE

f:id:izm_11:20141202013629p:plain

プロジェクト一式+実行ファイル

https://copy.com/Mj2YR2OJRhIZ2YCG

解凍したbinフォルダのtest_Direct.exeをダブルクリックすると冒頭のデモが試せます。

床の位置合わせ等は手動で行う事になるので、少々味気ないですが、クエリちゃんの代わりにお好みのモデルに差し替えて、自室に好きなモデルを召喚して遊ぶなどしていただけたら嬉しいです。 シーンファイルのAlwaysInWorld内以下にモデルを配置してビルドするだけで使えます。

大体1mくらいカメラから離れてrキーを押してリセットした後、uキーやdキーで部屋の床とキャラクタの立っている高さを合わせます。