CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

OculusRiftでPSeye越しに現実風景を見る方法

少し時間が経ってしまいましたが、11/9、11/10のOculusGameJamで作ったゲームについて、主な特徴の作り方を解説したいと思います。

ゲームの流れはこんな感じです。
(1)oculusRiftでPSeye越しに現実風景を見る(AR)
(2)マーカを認識して現実風景をふわっと削除
(3)フォロワーアイコンを頭上に掲げたクマさん登場(VR)
(4)逃げてくクマさんを追いかけてフォロワーを再び!

説明が長くなるので、ブログではいくつかに分けて解説します。今回は(1)についてです。

0. はじめに

まず、hecomiさんのサイトが大変参考になりました。@hecomiさん、ありがとうございます。

d.hatena.ne.jp

@hecomiさんは、PS Eyeを二つ使われて立体視まで実現されてましたが、当日は2つ設定して検証する時間がなかったので、一つで実現しました。

1. PSEyeの接続手順

これにはWindows7が必要です(Windows8は未確認です)。MacではMacamというドライバを使うことでPSEyeが利用可能になるようですが、私の使っているMountain Lionではうまく認識しませんでした。

そこで、Windows7にCL Eye Platform Driverというドライバを入れて、PSEyeをUSBカメラとして認識させます。これも@hecomiさんブログ情報です。

2. Unity上での開発手順

2-1. OVRPlayerControllerとCubeをGameViewに配置

2-2. Cubeを調整

CubeはPSEyeImageなどにリネームします。

2-3. 配置調整

OVRPlayerControllerの目の前に来るように、PSEyeImageを配置します。

PSEyeImageの配置

その後、OVRCameraControllerの子になるようにHierarchy Viewで調整します。

またRotationとScaleは

Rotation (X,Y,Z) = (0,0,180)

Scale (X,Y,Z) = (5,5,0)

としておきます。Rotationのzを180にしないと、Oculusで見た現実映像が180度ひっくり返ってしまいます。

2-4. スクリプト作成

PSEyeの映像を取りむためのスクリプトです。 (2)のAR認識で使う「NRARToolKit」のARCameraBehaviour.csを少し変更しています。
 
主な変更箇所とWebCamTextureの読み込み部分を示します。
  

//ARCameraBehaviour.cs
public GameObject PseyeCameraImage;
void Awake(){
  WebCamDevice[] devices= WebCamTexture.devices;
  WebCamTexture w;
  if (devices.Length > 0){
     w=new WebCamTexture(devices[1].name,640, 480, 60);
     this._bg_panel=PseyeCameraImage;
     this._bg_panel.renderer.material.mainTexture=w;
  }
}
 

2-5. 対応するスクリプトをアタッチする


OVRPlayerController/OVRCameraContrllor/RightCameraにアタッチします。さらに、PSEyeCamraImageオブジェクトもスクリプト内にアタッチします。これで完了です。

あとはPSEyeをPCに接続し、ゲームを起動させれば、OculusRiftの視界がPSEyeのカメラ映像になります。立体視はできませんが、解像度の下がった現実風景を見るのもちょっと面白いです。