Gear VRは、両目をディスプレイで覆うかたちの没入感の高いHMD(Head Mounted Diplay)なので、当然ながら装着していると周りは見えません。しかし、スマートフォンのカメラで撮影した画像をそのままHMDに表示すれば、周囲が見えるようになり、HMDを外さなくても、物をとったり、移動したりできるようになります。このようなアプリケーションをパススルーカメラと呼びます。

第9回では、Gear VRの背面カメラとARライブラリを利用して、ARアプリの基本を作ってみました。そこでは、画像認識の機能を使っていましたが、今回はそれを除外し、単純なパススルーカメラを作ってみましょう。

パススルーカメラの画面

Gear VRのパススルーカメラ実装の流れ

「VRCamera」という名前でUnityプロジェクトを作成し、「VRCamera」というシーンを作成し、第7回と同様に設定しておきます。

表示用ポリゴンの作成

まずは表示用ポリゴンを作成しましょう。

1. Create > 3D Object > Plane を選び、1枚の板ポリゴンを作成します。

2. Main Cameraの子に設定して、CameraPlaneにリネームします。

3. CameraPlaneを選んだ状態でInspectorパネルを開き、下記のように設定します。

  • Position  X : 0, Pos Y : 0, Pos Z : 1.2
  • Rotation  X : 90, Rot Y : 180, Rot Z : 0
  • Scale  X : 0.3555, Scale Y : 1, Scale Z : 0.2

マテリアルの設定

次にマテリアルの設定です。

1. CameraPlaneを選んでいる状態で、Mesh Rendererコンポーネントの設定を下記のように変更します。

  • Cast Shadows : Off
  • Receive Shadows : チェックを外す
  • Use Light Probes : チェックを外す
  • Reflection Probes : Off

2. また、新規マテリアルを作成し「CameraPlaneMat」と名づけ、Shaderを「Unlit / Texture」とします。

3. このマテリアルを、CameraPlaneにドロップして適用します。

カメラ画像表示スクリプト

続いて、カメラ画像を表示するためのスクリプトを追加します。

1. 新規スクリプトを「PassthroughCamera.cs」という名前で作成します。

2. 下記のように、Start() 関数の中身を記述します。

void Start ()
  WebCamTexture webcamTexture = new WebCamTexture(1280,720,25);
  gameObject.GetComponent().material.mainTexture = webcamTexture;
  webcamTexture.Play();
}

3. スクリプトを作成してアタッチします。

これで実行してみましょう。

起動後に、カメラ利用についての確認ダイアログが出ます。

この後、背面カメラからの映像を見ることができるようになります。

調整とARデバイスとしての考察

上記のように設定したものは、ひとまずはそれなりに動きますが、実際に見てみると問題点も多いことに気づきます。

まず、ポリゴンを視野角いっぱいにしたため相対的に画角が狭く、ズームしている状態になっていることです。

2つ目の問題は表示の遅延です。カメラそのもののフレームレートが遅いために発生する問題です。

3つ目もカメラに起因する問題で、フォーカスを合わせるのに時間がかかる問題です。

解決策

第9回でVuforiaのサンプルを動かしたときにカメラ画像が全体に対して小さめに表示されているのも、上記の問題への対応のためということが分かります。

ちなみに、CameraPlaneのTransform設定を下記のようにすると、ほぼVuforiaの表示と同じようになり、拡大されている感じが緩和されます。

  • Scale X : 0.2, Scale Y : 1, Scale Z : 0.11

AR用スマホ

今回のアプリを体験すると、今後、スマホ自体がGear VRでのAR用途を考慮して改良されるとしたら、下記のような変更が必要になると予想できます。

  • 広角レンズ
  • レンズ位置をデバイスの真ん中に配置
  • パンフォーカスレンズにして、デバイス側のフォーカス処理をしない

Gear VRの使いやすさを考えると、近い将来モバイルデバイスにAR用のカメラが付くことを期待したいです。

連載の終わりに - VR元年の後半戦

現在のVR HMDの流行は2012年のE3でプロトタイプが発表されたOculusに始まっています。その後も2014年Facebookが資本を投入し、開発機を販売し、順調に業界をリードしてきました。

しかし、本連載が始まった春頃から、後発組のHTC Viveが販売シェアでは追い抜いているというニュースが出ています。

Oculusが専用のVRコントローラであるOculus touchが発売できていないのがその一因とも言われています。

Oculus touch

Oculus touchの操作感は本当に素晴らしいものなので、この秋に予定通り発売されると、購入者も増えると思われます。

HTC Viveも付属のVRコントローラだけで満足しているわけではありません。トラッキング技術をオープンにして、トレーニングに参加する必要はあるものの、利用についてはロイヤリティフリーとすると発表しました。

VR元年の今年、これまでの前半戦では、360度を立体視できること、VR空間への没入体験がどういうものなのか、という認知がなされました。

この後、後半戦では、VR空間でのユーザーからの入力操作はどうあるべきか、を中心にコンテンツも含めて試行錯誤がなされていくと思われます。

特に工業系の用途などでは、独自の機械や情報端末とつないでいく必要もあります。ハードウェアからカスタマイズできるOSVRをベースにするほうが適切かもしれません。

HMDの外側を見えることを重要視するのであれば、MicrosoftのHoloLensのようなものがVR HMDを飲み込む可能性もあります。

まだまだどのデバイスが覇者になるのかわかりませんが、それぞれが強みを見出し、競争してVR/AR市場が盛り上がっていくことを期待しています。

本連載はこれで一区切りとなります。10回にわたり解説してきましがお役に立てたでしょうか? 皆さんのVRへの関心が少しでも高まったなら、VRアプリの開発者としてうれしいです。長い間お付き合いくださり、ありがとうございました。

事例紹介

バンダイナムコグループの株式会社メガハウスが発売を開始した「BotsNew VR (ボッツニューVR) 」が興味深いので紹介します。

BotsNew VRのプレスリリースから

スマホを使うタイプのVRで一番の問題は入力系の不足です。

Bluetooth系のコントローラでも良いのですが、あまり持っている人もいませんし、若干没入感に欠けます。

ボッツニューVRでは、シンプルなマーカー認識型のコントローラを採用し、ユーザーとしても開発者としても使いやすい割り切り方が素晴らしい商品です。

大抵のスマホであればカメラも付いていますし、体験してみたい製品です。

著者紹介


山田宏道 (YAMADA Hiromichi) - 株式会社トルクス 代表取締役

千葉大学工学部卒業。ゲームプログラマーを経て、2005年よりフリーランス。2012年 株式会社トルクスを設立し、コンシューマー向け、ビジネス向けを問わず、さまざまなアプリを受託開発している。

現在、VR関連技術に注力中。2016年4月より島根県奥出雲町に在住。山陰エリアでUnityやVRに興味ある方を募集しています