読者です 読者をやめる 読者になる 読者になる

[OculusGameJam](1)oculusRiftでPSeye越しに現実風景を見る(AR)

Unity Oculus Rift

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

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


ということで、大きく4つに分けて説明します。

(1)oculusRiftでPSeye越しに現実風景を見る(AR)

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

PS Eye × 2個 を Unity 上で Oculus SDK と共に使ってみた
http://d.hatena.ne.jp/hecomi/20130731/1375279561

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

PSEyeの接続手順

まずこれにはWindows7が必要です(8は試してないのでわかりません)。

MacではMacamというドライバを使うことでPSEyeが利用可能になるようでした。

しかし、私の使っているMountain Lionではうまく認識しませんでした。

(単にやり方が不十分だっただけかもしれないので、うまくいった方がいらっしゃれば教えてください)


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

Unity上での開発手順

1. OVRPlayerControllerとCubeをGameViewに配置

2. Cubeを調整

 CubeはPSEyeImageとでもリネームします。


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

  f:id:Takyu:20131123222150p:plain

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

  またRotationとScaleは
  Rotation (X,Y,Z) = (0,0,180)
  Scale (X,Y,Z) = (5,5,0)
 としておきます。

  f:id:Takyu:20131123222137p:plain

 Rotationのzを180にしないと、Oculusで見た現実映像が180度ひっくり返り、とても気持ち悪いことになります。

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;
  }
}
 


5. スクリプトをアタッチ
OVRPlayerController/OVRCameraContrllor/RightCameraにアタッチします。
 さらに、PSEyeCamraImageオブジェクトもスクリプト内にアタッチします。

これで終了です。

あとはPSEyeをPCに接続し、ゲームを起動させれば、OculusRiftの視界がPSEyeのカメラ映像になります。

立体視はできませんが、解像度の下がった現実風景を見るのもちょっと面白いです。

次はAR->VR移行のトリガとなるマーカ認識について、NRARToolKitを使った方法を紹介します。