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

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Google CardboadでAR表示を行う

Unity AR VR

今回はvuforiaによるARでGoogle Cardboad等の分割画面HMD(ヘッドマウントディスプレイ)に対応する方法を紹介します。

 

f:id:tsubaki_t1:20140907005611p:plain

対応方法する為に必要なもの

軽く考えた限り、Google Cardboadに対応する為には以下の3点が必要です。

  1. 背景画像を非表示にする
  2. 独自の背景を設定する
  3. 画面を分割する

背景画像を非表示にする

背景画像を非表示にするには、起動時に以下のコードを呼びます。これで単純に背景が非表示となります。このコードは、例えば背景を全て3Dモデルでうめつくす場合等に有効です。

QCARRenderer.Instance.DrawVideoBackground  = false;

 

独自の背景を設定する

今回は背景画像自体は使用するため、背景画像をテクスチャとして取得し描画、それを描画するカメラを用意する必要があります。

 

まず背景テクスチャを取得するには、以下のコードを記述します。このコードではテクスチャをVuforiaへ登録し、更新してもらう感じの処理を行います。

backgroundMatへ登録するマテリアルは、シェーダーをTextureに設定しておくと良さそうです。

 

private Texture2D backgroundTexture; // 背景に使うテクスチャ

public Material backgroundMat; //背景に使うポリゴン用マテリアル

 

// テクスチャを作る

backgroundTexture = new Texture2D(0, 0, TextureFormat.RGB565, false);

backgroundTexture.filterMode = FilterMode.Point;

backgroundTexture.wrapMode = TextureWrapMode.Repeat;

//Vuforiaへ登録 QCARRenderer.Instance.SetVideoBackgroundTexture(backgroundTexture);

// マテリアルへ登録

backgroundMat.mainTexture = backgroundTexture;

 

最後に背景を写すカメラとポリゴンを用意します。

Vuforiaのパッケージをインポートしている場合、BackgroundCameraが何処かにあるので検索し*1、シーンに配置します。この中にカメラとポリゴンが見つかります。

後はBackgroundCameraの子のPlaneのマテリアルを先ほど作成したbackgroundMatに設定するマテリアルに登録すればOKです。

 

画面を分割する

画面を分割する方法自体はとても簡単です。

カメラを2つ用意し、以下の設定をすれば良いです。

  1. 左目用のViewportRectを(X:0, W:0.5)に設定
  2. 右目用のViewportRectを(X:0.5, W:0.5)に設定

 

ただし、今回のように同じ物を表示しているのに写す対象(Plane)が複数あるのは間抜けな話なので、以下のような構造にしておくとよいでしょう。

 f:id:tsubaki_t1:20140907010925p:plain

この処理を、ARCamera及びBackgroundカメラ向けに行います。

ARCameraは基本的に「マーカーを写す位置へ移動*2」なので、ARCameraのCameraコンポーネントをdisableに設定し、カメラの下に左目用と右目用のカメラを配置すればOKです。

f:id:tsubaki_t1:20140907011007p:plain

 

このままでは左目用と右目用の座標が同じなので、少しずらしておくと立体視が可能になります。Durovis Diveでは以下の設定を行っていました。

  1. 左目用(x:-0.03, y:0.2, z:0.2)
  2. 右目用(x:0.03, y:0.2, z:0.2)

実際に使ってみて

実際に使ってみましたが、立体視は綺麗に出るのですが背景が立体でないため、*3かなり気持ち悪い印象を受けました。これは単純に足を浮かせる事で多少の緩和が出来そうですが*4、表現の幅が減ってしまうので考えどころではあります。

 

また、適当に画角等を調整したため、カメラとモデルの座標が少しずつずれる現象が発生し、これも直す必要がありそうです。

 

今回のサンプルプロジェクトを公開しました。AssetStoreからunity-chan、及びvuforia公式ページからvuforiaをダウンロードし独自マーカーを登録する事で動作が確認出来ます。

tsubaki/GoogleCardboad_AR · GitHub

ちなみに歪み補正はありません。

*1:Projectの検索を使えば一発で見つかります

*2:マーカーが映る位置へ移動する設定もある

*3:特に足元の接地面が

*4:マーカーを足ではなく背にする等