じゅころぐAR/VR

AR/VRメインのブログ。時々ドローン。

Daydreamの開発について調べる

Zenfone ARを購入したときから試そうとは思っていたのですが、Daydream Viewが入手できていないこともあって後回しにしていました。
AR(というかマルチプレイ実装)が若干行き詰まりつつあるので、気分転換に試してみます。

Daydreamとは

Googleが提供しているVRの開発プラットフォームで、特定のデバイスを指す用語ではありません。
現状はスマートフォンを利用したVRになるので、体験の質で専用機にはやや劣ると思いますが、利用しやすさと開発しやすさから、より手軽にVRを楽しめるものと捉えています。

vr.google.com

Smartphone VR

スマートフォンをDaydream Viewにセットして利用する形。必要スペックを満たしたDaydream Readyのスマートフォンが必要です。
当初はPixelのみが対応でしたが、現在(2017年8月時点)では海外の主要メーカーが対応機種をラインアップしています。国内シェア的には、Xperiaにも対応してほしいのですが。

  • Pixel, Pixel XL(Google)※製造はHTC
  • GaraxyS8, S8+(Sumsung)
  • ZenFone AR(ASUS
  • Moto Z(Motorola
  • Mate 9 Pro(Huawei
  • Axon 7(ZTE)

vr.google.com

Daydream Viewは未だに国内販売がされておらず、情報も全く入ってきません。
入手方法として、並行輸入品がAmazonで出品されています。

https://www.amazon.co.jp/Google-Daydream-View-Headset-米国並行輸入品/dp/B01N634P7O/ref=pd_rhf_dp_p_img_1?_encoding=UTF8&psc=1&refRID=YSJ243N1Z35CAP4Z2VM7www.amazon.co.jp

海外で購入すると、$70.35。為替レートが$1 = 109円くらいなので、送料+手数料が1,300円くらいですね。
そこまで割高でもないので、1つ購入しました。詳細は届いたら書きます。

www.amazon.com

Standalone VR

スマートフォンやPCを接続しないスタンドアロン型のDaydream対応VRヘッドセットがGoogle I/O 2017で発表されました。

vr.google.com

メーカーはHTCとLenovoで、HTCはVIVEブランドで発売するようです。
発売は年内の予定。価格はOculusやVIVEと同程度との情報があり、10万円前後と見ています。(たぶん買う)

Daydreamの開発をするには

開発環境

Androidアプリ

Daydreamの開発を行うためのGoogle VR SDKは、Android、Unity、Unreal Engineに対応しています。
Google VRにはiOS SDKもありますが、Cardboard向けでDaydream関連の機能はないようです。

Developer Overview  |  Google VR  |  Google Developers

ざっと見た感じ、Unityが一番開発しやすいように見えたので、とりあえずUnityで環境を構築することにしました。(TangoもUnityなので)

WebVR(A-Frame)

WebVRフレームワークA-Frameにも、Daydreamのコントローラを扱うコンポーネントがあります。
A-FrameならHTMLベースで簡単にVRコンテンツが作れるので、いずれ試してみたいと思います。

daydream-controls – A-Frame

Google VR SDK for Unityのセットアップ

Googleのドキュメントの通りに進めていけばOKです。

Get Started with Google VR in Unity  |  Google VR  |  Google Developers

英語が苦手な方やセットアップで躓いた方には、以下の記事がオススメです。
図が入っていて説明が丁寧なので、わかりやすい。

developer.wonderpla.net

Zenfone ARで実行してみると、画面が分割表示され、デバイスの回転に合わせてカメラも回転します。

Controller Emulatorを使う

Daydream Viewにはコントローラが付いています。
Viewがなければ当然コントローラもありませんが、コントローラがなくても開発ができるようにController Emulatorなるアプリが提供されていました。

アプリのインストール

以下のサイトからAPKファイルをダウンロードして端末にインストールします。
このアプリはDaydream ReadyでないAndroid端末(Phab2 Proを使用)でも動作しました。

The Controller Emulator  |  Google VR  |  Google Developers

Controller Emulatorアプリの画面はこんな感じ。
それっぽいけど、平面なので操作感とかはよくわからないですね。 f:id:jyuko49:20170819122455j:plain

Unityエディタで動かしてみる

Controller Emulatorをインストールした端末を開発PCにUSBで接続して、Unityエディタでデモシーンを実行します。
コントローラ(になっている端末)を動かすと、レーザポインタみたいな白い光を操作することができ、Cubeに当っていると青、当たっていないときは赤になりました。光が当っている状態でクリックすると、Cubeの位置が変わります。

f:id:jyuko49:20170819124701p:plain

f:id:jyuko49:20170819124707p:plain

WiFi接続に変更する

コントローラ(になっている端末)は同一のLAN上にいれば、WiFiでも接続できます。
USB接続だとケーブルで動きが制限されるので、WiFiの方が快適です。

設定するには、"GvrControllerMain.Prefab"の"Gvr Controller(Script)“で"Emmulator Connection"を"USB"から"WIFI"に変更します。

f:id:jyuko49:20170819130652p:plain

次に、コントローラのIPが記述されているスクリプトを修正します。

  • GoogleVR/Scripts/Controller/Internal/Emulator/EmulatorConfig.cs
// IP address of the phone, when connected to the PC via WiFi.
//public static readonly string WIFI_SERVER_IP = "192.168.43.1";  ←元々の設定はコメントアウト
public static readonly string WIFI_SERVER_IP = "192.168.0.2"; ←コントローラ(になっている端末)のIP

コントローラ(になっている端末)のIPを調べる方法は簡単で、Controller Emulatorアプリを起動すると画面の上の方にIPアドレスが書かれています。

この状態でUnityエディタを起動すると、WIFI経由で操作ができるようになります。

続く

デモシーンを参考にシーンの構成についてもざっくりと調べたのですが、長くなってきたので続きは別の記事にします。

Unity2017.2.0b2のTangoサポートについて(実機でSpatial Mapperが動くところまで)

前回の記事でUnity2017.2.0b2のTangoサポートについて調査しましたが、ビルドエラーが発生してしまい、実機確認ができていませんでした。

jyuko49.hatenablog.com

その後、発生していたビルドエラーの原因が特定できたのでリトライしたところ、Tangoのメッシュ構成(3DR)が使えるところまではできました。

ビルドエラーへの対処法

何度かビルドエラーが出たので、それぞれ行なった対処をまとめておきます。

JDKのバージョン確認

JDKバージョンが1.8以上でないとビルドが通らないようです。
前に変更したような気もするのですが、Unityをアップデートしたことで変わってしまったのかも?

発生するエラーメッセージ、対処法ともに以下の記事がドンピシャで、非常に助かりました。

blog.naichilab.com

Tango SDKとの共存エラー?

Unity5.6でTango SDK for Unityを使って開発したプロジェクトをコンバートした際に起きました。

f:id:jyuko49:20170710211023p:plain

エラーメッセージからすると、Tango SDKとUnityでTangoのライブラリが競合しているように見える。
ということで、

Tango SDK、Tango Prefabを削除 → ビルドエラー
Tempフォルダを消してリトライ → ビルドエラー
もうわからん!!

諦めて、テスト用のプロジェクトを新規に作成し、Tango SDKはインストールせずにUnityエディタのTangoサポートを有効にするとエラーは発生しませんでした。
解決はしたものの、Tango SDKで開発を進めたプロジェクトを移行したい場合には追加調査が必要です。

Target API Level

ZenFone AR (Android 7.0)で実機テストを行う際に発生しました。
正確には、ビルドエラーではなく、ビルドは通った上でアプリが起動しないという症状です。

f:id:jyuko49:20170710212704j:plain

この件については、Target API Levelを明示的に"Android 6.0 ‘Marshmallow’ (API level 23)“にすると直りました。

f:id:jyuko49:20170710211813p:plain

原因となっている事象については、あまり理解できていませんが、Unity5.6.2+Tango SDK for Unity(Ikariotikos)の環境では"Automatic (highest installed)“にしていても問題なかったので、何か差異があるんでしょうか?
いずれにしても、Unityのアップデートで直ってくれないと困るので、一時的な対処と考えてください。

そういえば、Unityに統合されているTangoのコアライブラリはSDKバージョンどれなんですかね?
Tangoだけアップデートしたいときはどうするんだろう?

メッシュ構成を試す

ビルドが通るようになったので、前回の記事で試しそこねたSpatial Mapperの調査をしました。

Tango Spatial Mapperのセットアップ

まず、Sceneに"Create Empty"で空のGame Objectを追加します。名前も"Spatial Mapper"にしておきました。
次に、"Add Component"で"Tango Spatial Mapper"を追加します。

f:id:jyuko49:20170710214515p:plain

Inspectorを確認してみると、ほぼデフォルトの設定で使えそうですが、Renderingの"Render Material"がセットされていませんでした。
今回はテストなので"Default-Material"を使いました。

f:id:jyuko49:20170710214737p:plain

Tangoの3DRで生成されるメッシュは、Color、Normal、UVが利用でき、AR表示のオクルージョンにも使えるので、用途に応じてMaterialを設定してあげる必要があります。

ここまでの設定でビルドしたら動くかなと期待したのですが、Skyboxが表示されるのみで何もメッシュは表示されませんでした。

Tangoに接続するスクリプトの作成

動かない原因については、Tango Serviceに接続する処理がないためです。

qiita.com

Tango SDKの場合、"Tango Manager"がPrefab化されており、Sceneに置いてInspectorを設定するだけで、Tangoの各サービスに接続できるのですが、Unity2017.2b2にはそれらしきComponentが見当たりません。
要するに、スクリプトを書けってことですね。

“Create Empty"で空のGame Objectをもう一つ追加。名前は"Tango Service"にしました。
"Add Component” > “New Script"でC#スクリプト(ここでは"TangoService.cs")を作成して、以下のコードを書いてあげます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Tango = UnityEngine.XR.Tango;

public class TangoService : MonoBehaviour {

    // Use this for initialization
    void Start () {
        Tango.TangoConfig config = new Tango.TangoConfig ();
        config.enableDepth = true;
        config.enableColorCamera = true;
        Tango.TangoDevice.Connect (config); 
    }
    
    // Update is called once per frame
    void Update () {
        
    }
}

前回調べたとおり、Tangoの機能にアクセスするクラスのNameSpaceは、“UnityEngine.XR.Tango”になっています。
リファレンスがないので、Tango SDKで実装してきた経験と勘を頼りにコーディングしています。

まず、Tango.TangoDevice.Connect()がそれっぽい。
このメソッドには、Tango.TangoConfigを渡さなければいけないようなので、newします。
Tango.TangoConfigのプロパティを見てみると、enableDepthenableColorCameraがあります。

f:id:jyuko49:20170710222649p:plain

これらを有効にして、接続してあげればメッシュ構成に必要なデータが取得できそうです。
といったところでビルドを試したところ、冒頭の通りメッシュが表示されるようになりました。

まとめ

2017.2.0b2のTangoサポートについて現段階でわかったのは、

  • Tango SDK for Unityとの共存は難しそう
  • ある程度スクリプトを書かないと使えなさそう

ということ。リファレンスがないと、ここから先の実装は難しそうです。

前の記事にも書いたとおり、Tango SDK for Unityの方がドキュメントもサンプルも充実していて使いやすく、そこからの移行が難しいとなると、当面はTango SDKのままでいいかなという感じです。
今後、リファレンスが出てきたり、機能が拡充されれば意見を変えるかもしれませんが、Tango SDKのバージョン追従もどうなるかわからないし、プラットフォームの併存は余計な混乱を招きそうで、既存の開発者からすると、あまりメリットが見えてこないですね・・・。

Unity2017.2.0b2のTangoサポートについて(わかったところまで)

TangoがUnityサポートされると話題になっていたUnity2017.2が既にベータリリースされているらしく、インストールして試してみました。

unity3d.com

前置き

環境構築でハマってビルドエラーが出たので、まだ実機での動作を試せていません。
他にやりたいこともあり、一旦環境を戻そうかな・・・ということで、戻す前に書き留めておこうという趣旨の記事です。

発生したビルドエラー

f:id:jyuko49:20170708105903p:plain

Tangoを有効にするとAndroid 6.0以上を求められるので、Android SDKを上げたせいかな・・・と思いつつ、調べたらIssueも上がってて、Unity2017.1以降で起きるっぽい?

issuetracker.unity3d.com

Unity5.6に戻したら起きないのかな?ということで、この記事を書いたら戻してみる。 → 戻してもダメでした… → JDKのバージョン上げたら直った

終わらないChecking license

Unity起動時のライセンス確認の挙動がおかしくて、Checking licenseが点滅したまま、ずっと終わらない問題が起きています。Personalだから煽られているんだろうか・・・。

f:id:jyuko49:20170708110934p:plain

仕方ないので1回サインアウトして、"sign in"しようとするも、ボタンが反応しないのでUnity再起動してサインイン・・・を毎回やる羽目になっています。

Tangoサポートの概要

ここからが本題です。

Tangoを有効にする

“Switch Platform"でビルドターゲットを"Android"にします。
"Player Settings"に"XR Settings"に"Tango Supported"の項目があるので、チェックを入れます。

f:id:jyuko49:20170708114312p:plain

Tango SDK for Unityは、"Minimum API Level"がAndroid 4.2 (API 17)以上でビルドできますが、UnityのTangoサポートではAndroid 6.0 (API 23)以上に設定が必要で、その警告が出ています。

“Other Settings"で"Minimum API Level"をAndroid 6.0に変更すると警告が消えます。 f:id:jyuko49:20170708111826p:plain

メッシュ構成(3DR)のコンポーネントが追加されている

“Component” > “AR"にTango用のコンポーネントが2つありました。
一番上の"World Anchor"は、HoloLensで空間座標を固定するComponentだったはず。Tangoでも共通で使えたらいいなと思っていたりはします。

f:id:jyuko49:20170708111250p:plain

Tango Mesh Reconstruction Server

ネーミングからしてメッシュ再構成を行うためのコンポーネント
正直なところ、後述の"Tango Spatial Mapper"との使い分けがわからないです。

f:id:jyuko49:20170708114852p:plain

Tango Spatial Mapper

メッシュ構成した結果を空間マッピングするためのコンポーネント
Create Emptyして、このコンポーネントをアタッチすれば、Tango SDKの"Dynamic Mesh"みたいな動きをするんじゃないかと思っている。が、ビルドが通っていないのであくまで妄想です。

f:id:jyuko49:20170708114947p:plain

パラメータについては、Tango SDK向けにまとめた記事で大体わかるかと。
どちらもTango_Configをラップしているはずで、大きな違いはなさそうです。

qiita.com

qiita.com

スクリプトからTangoの機能を使う

コンポーネントを見た感じ、Tango関連は上記の2つしか見当たりませんでした。
他の機能は使えないのかなと探したところ、自作スクリプトからの利用はできそうでした。

UnityEngine.XR.TangoというNameSpaceでスクリプトコンパイルが通るところまでは確認しています。

f:id:jyuko49:20170708112106p:plain

PointCloud、AreaLearning、PoseData、ImageDataが使えそうなことは確認できました。
ただ、クラス構成はTango SDKと微妙に違う気がするので、Tango SDKのサンプルをコピーして動くかは疑問です。移行しようとなると、ちょっと面倒なことになりそう。

所感

メッシュ構成がComponentで提供されている点は良いと思います。
PointCloudの更新やメッシュ構成の速さは、Tangoの強みの一つだと思うので、Unityでサポートされることでパフォーマンスがさらに上がるならメリットは大きい。

その他の機能もスクリプトを書けば動きそうですが、ゼロからスクリプトを書いて動かすというのは、経験者からしても相当に敷居が高いです。
Unity公式のマニュアルは個人的にイマイチかなと思っていて、Tangoに関してもあまり期待していません。誰かががんばって調べてブログに上げたり、書籍化してくれるといいんですけど。

という訳で、パフォーマンスにこだわりがなければ、Googleから提供されているTango SDK for Unityを使った方がExamples、Prefabsを参考にできて開発効率は良いんじゃないですかね。
ドキュメントやコメントの充実度からしても、Tango SDKを使った方が学習しやすいと思う。

Download the Tango SDK  |  Tango  |  Google Developers

Tango SDK for UnityをIkariotikosにしたらAR Screenが映らなくなったので直した

Tango SDKをIkariotikosにアップデートしたら楽しいことになりました。
ほとんど備忘録ですが、同じところでハマる人もいそうなのでまとめておきます。

Ikariotikosって?という方へ

Tango SDKは約1ヶ月おきにアップデートされています。
バージョン番号には、Tangoにちなんで踊りの名前が付いていて、イニシャルがアルファベット順にA,B,C…と上がっていきます。 2017年6月にリリースされたバージョンが、Ikariotikosです。その前は、Hopak。

ちなみに、踊りの方のIkariotikosはこんな感じだそうです。

youtu.be

アップデートしてみた

リリースノートを見ると、1行しか書かれていません。

Tango SDK for Unity Release Notes  |  Tango  |  Google Developers

まあ、大した変更はなさそうだな。
ということで、アップデート!

・・・した結果。

f:id:jyuko49:20170701211412j:plain

あかん!Σ(・∀・;)

直す

症状からして、前フレームでレンダリングした結果をクリアできてないんだろうなー!と推測。
AR ScreenTango Cameraが怪しいと当たりを付けます。

容疑者のTango Cameraをクリックして、Inspectorをチェック。

f:id:jyuko49:20170701213108p:plain

Tango AR Screenは、Point Cloud Occlusion(点群による遮蔽処理)の設定しかありません。スクリプトの中身にまで手を入れたくないので、一旦スルーします。

続いて、Cameraの方を見てみると、Clear Flagsとかいう超怪しいプロパティを発見!
元々はDepth onlyになっていたところ、Solid Colorに変更したら直りました。

f:id:jyuko49:20170701215902j:plain

ちなみに、Clear FlagsSkyboxにするとこうなります。

f:id:jyuko49:20170701215014j:plain

デフォルトの背景がSkyboxで、Dynamic MeshができたところにだけAR Screenが映る感じですね。
ExperimentalMeshBuilderWithColorみたいな感じですが、MeshにColorが付いている訳ではなく、カメラ映像が映ります。
これはこれでどこにMeshができているかわかりやすいから、使い途あるかな?

別のバグ?

色々調べている途中で、AR Camera Post Processを有効にすると、AR Screenが映らなくなりました。

ちゃんと調べてないですが、一回アプリ中断して、再度接続すると映ったりするので謎です。
とりあえずは、無効のままでいいかな。

おわりに

今思えば、Hopakまでは毎月の上旬にはリリースされていたのに、Ikariotikosは月末ギリギリでリリースされたので、今までとサイクルが違ってたんですよね。結果として、過去のアップデートよりも影響が大きかったので、正直、大丈夫かGoogleと思いました。

あと、気付いてる人は気付いてると思いますが、サイト上にThe latest version of the Unity SDK is Ikariotikos (Version 1.54, June 2017).と書かれていて、実際ダウンロードするとファイル名がTangoSDK_Hopak_Unity5.unitypackageという状態が1週間くらい続いていました。

マジで大丈夫なのか!?Google

リリースノートもUnity SDKではなく、C SDKの方を見ると、APIがかなり増えています。

Tango SDK Release Notes  |  Tango  |  Google Developers

Bounding boxes APIとか面白そうだし、File IO for images and point cloudsには、以前自前でやったPLYファイルへのエクスポートがAPIとして用意されています。

qiita.com

まあ、Unity SDKから使えるかどうか、わかんないんだけどね。

その辺、Googleはもっとサポートすべきだと思うけど、開発のスピードに対してドキュメントやExamplesが追い付いていない気がする。現状、開発者コミュニティ頼みになっている感は否めないかな。

Tango製ARガイドアプリ「NAT」と宝探しアプリ「SEEKAR」を体験してきた

東京ビッグサイトで開催されている先端コンテンツテクノロジー展で、Tangoを使ったARガイドアプリ「NAT」宝探しゲームアプリ「SEEKAR」を体験してきました。

getar.jp

展示を行なっていたのは、ビービーメディア株式会社さん。過去にもTangoを使ったデモを公開されていて、ARどこでもドアや平面マップ表示は印象に残っています。
平面マップの機能は、NATにも実装されていましたね。

getar.jp

www.youtube.com

開発を担当されている@primevisionさんとは、Tangoに関して以前からSNS等で情報交換をさせてもらっていて、今回はじめて直接お会いしてご挨拶する機会ができました。
かなり早い段階からTangoを使ったアプリの開発をされていて、複数台での情報共有平面マップでの位置表示オリジナルのケース製作など、個人開発ではなかなか難しいようなところも試されているので、色々参考にさせて頂いています。

NATを体験しての感想

体験する前に紹介記事と動画を見た時点では、Tangoのコンセプトに沿った正統派のアプリだなという印象を受けました。
以前にブログにも書きましたが、GoogleにとってのTangoは単なるARではなく、屋内への広告・ナビゲーションのためのプラットフォームでもあり、実際に海外では博物館やショッピングセンターと連携したサービスを行なっていたりします。
そういう意味で、NATのようなARガイドアプリはTangoらしさを生かしたアプリだと思います。

で、実際に体験してみると、思っていた以上に楽しいし、よく作り込まれている!
かざすとAR表示で情報が見えるのは当たり前として、展示物に近付くと中が透けて見えたり、画面越しにタッチすると音が鳴ったりと、実際には手を触れることができない展示物にスマホ越しで触れて体験する感覚は面白いです。

平面マップの機能は、位置合わせをしたあとはモーショントラッキングで位置を取得して表示させているだけとのこと。
ちなみに、特別に裏側もちょこっとだけ見せてもらいましたが、展示する側のARコンテンツ制作者向けにも色々カスタマイズしやすいような仕組みを考えているようです。

SEEKARを体験しての感想

続いて、SEEKARです。
こちらは事前情報がなくて、現地ではじめて見たのですが、これがまたシンプルに面白い!

arguide-nat.com

最初にスマホをかざしてプレイエリアを決めると、ARで小さな町のようなコンテンツが表示されます。
その中にコインがたくさん隠れていて、スマホを近づけるとコインを取ることができます。
文章で書いたところで、面白さの半分も伝わってないと思います。

そこを何とかがんばって書いてみますが、まずスマホを近付けないとコインが取れないので、必然的に身体の動きが生まれるところが楽しさにつながっていると思います。オブジェクトに隠れて見えないコインもあるので、回り込んで探したりもしないといけません。ゲーム感覚なのでスマホをかざすことに対するストレスは全然ないです。
その上、コインの隠し場所も様々で、家の中に隠れていて壁の中まで入らないと取れないとか、動く乗り物があったりとか、創意工夫が散りばめられている感じです。

全体を通して

ブースを訪れた際、既にたくさんの方が体験されていて順番待ちという状態でした。Phab2が見える範囲だけで5台以上、説明員の方も5人以上いらっしゃって回転率はよかったと思いますが、常時埋まっていましたね。

どちらのアプリもその場ですぐに体験できて、スマホを持って歩き回っているだけで十分楽しいです。
ARの面白さを再認識できるアプリなので、機会があれば是非とも体験してみてください。

あとは、子供でも楽しめるシンプルさと遊び心がARには必要だよね!と改めて思いました。
VRは年齢制限について色々と議論になっていて明確な指針が求められていますが、モバイルARについては現状でも特に年齢を気にする必要がありません。実は、Tangoのコンセプトムービーも子供たちがARを楽しむシーンで構成されていて、子供でも楽しめるというのは、Tangoのもう一つのコンセプトなのかなと考えています。

youtu.be

そういえば…

「NAT」の名前の由来とキャラクターの名前を聞こうと思って忘れてました。
またの機会に聞いてみよ。

オマケ

本イベントは、他のブースでも色々なAR/VRを体験できるのでオススメです。
meleapさんの「HADO」、ハシラスさんの「CLOCK WALK」あたりは、体験していなくても端から見てるだけで面白い。体験者の反応が絵的に面白いというのは、興味を引く上で重要ですよね。

youtu.be

youtu.be

AIの方のブースでは、シーエスレポーターズさんも見かけましたね。Re:ゼロVR、キンプリVRで有名なGugenkaの会社です。

gugenka.jp

あと、たまたま通りかかったブースに仮面女子リーダーがいました。 仮面で顔は見えなかったけど、目元が似てるし仮面にリーダーって書いてあったから、たぶん本人?

ZenFone ARを購入しました

タイトルの通り、ZenFone ARを購入したので、Tango開発の視点で軽くレビューします。

購入のきっかけ

Lenovo Phab2 ProでTangoの開発はできていたので、購入するかどうかは迷いましたが、次のステップとしてTango2台での空間共有がやりたかったので、Phab2 Proの2台目を買うよりはZenFone ARの方が面白いかな、ということで購入を決定。

スペック上のPhab2 Proとの差異として、

  • Phab2 Proよりもメモリ/CPUが高性能
  • VRプラットフォームのDaydreamにも対応
  • Android7が標準インストー

といった点があります。その分、価格は倍くらいしますけどね。
AR/VRで色々やるにはメモリが必要になりそうなので、8GBモデルにしました。

www.amazon.co.jp

見た目

Phab2 Proと並べてみました。

Phab2 Proのデカさが際立ちます。ZenFone ARも5.7インチあるので小さい感じはしませんが、この辺は個人差もあると思います。

背面カメラ、センサーの配置も違っています。ZenFone ARの方がコンパクトにまとまっていますね。

Tangoを動かしてみる

Unityアプリ

Phab2 Proで開発、デバッグしていたクエリちゃんズ(仮)をインストールしてみました。

結果として、アプリは問題なく動作しましたが、ゲーム開始するまでに20秒くらい待たされる問題が発生してしまい、原因を調査中です。
Tangoを起動してからOnTangoPoseAvailableになるまでの処理で時間がかかっているようで、同じアプリをPhab2 Proに入れても発生しません。OSバージョンが違うからですかね?

3DRでメッシュ構成する速さや全体的なFPSは、やはりZenFone ARの方が出ている気がします。

WebARアプリ

次に、WebARを試してみました。
WebARについては、こちらを参照ください。 qiita.com

Phab2 Proではメモリ不足と思われるアプリ落ちが頻発し、ライブラリやMMDモデルのサイズによっては起動すらできませんでしたが、ZenFone ARはLoadが安定していて、Phab2 Proで表示できなかったモデルも表示できました。 ただ、アニメーションや移動を実装しようとすると、ZenFone ARでもアプリ落ちすることがあります。
この辺りは無理をせずに、ブラウザのアップデートを待ちたいと思います。

WebARでお借りしたMMDモデルはこちらです。

seiga.nicovideo.jp

3d.nicovideo.jp 3d.nicovideo.jp

アプリを動かしてみて

ちょっと、スマホ熱すぎない?

あまりの熱さに、即アプリ入れちゃいました。 play.google.com

Daydreamはゴーグルに入れるからまだいいとして、TangoのARはスマホを手で持つことが多いので、ケースを付けるなどの対策が必要かもしれません。

Daydreamは?

まだ試していません。

ホーム画面に"Daydream"のアイコンがあったので試してみようとは思ったのですが、

f:id:jyuko49:20170625101226j:plain

お持ちでないです(まだ日本では売ってません)

ちなみに、持っていることにして先に進むと、

f:id:jyuko49:20170625101335j:plain

何故、VRを試すのにお支払情報が必須なのか・・・。

という感じなので、Daydream Viewを入手してから試します。

ARレベルを勝手に定義して、R問題を解決する

なんとかR増えすぎ問題への個人的な対策。  

AppleがAR/VRに参入してきたついでに、XRが公式な表現になってしまい、R界隈は混迷を極めています。

blogs.unity3d.com

いよいよ宗教戦争になりそう…

私の場合、Tangoをメインで開発しているので、MRっぽいARでもGoogleに倣って単にARと言うことが多いです。ただ、そうなるとTangoじゃないARと区別ができないんですよね。
じゃあ、MRと言えばいいかというと、MRは包括的な概念だから現実とMixされていれば全部MRとか言い出す訳ね。ああ、めんどくさい。
Windows Mixed Reality

そういえば、割と最近、同じように定義が曖昧になってしまった技術用語を知っています。

その名は、自動運転

自動化の対象をどう捉えるかによって、ブレーキアシストから無人走行まで全部自動運転になっちゃったんですね。
で、どうなったかというと、自動運転レベルが定義されました。

自動運転車 - Wikipedia

完全自動運転じゃない部分的な自動化も自動運転として定義した上で、機能や技術要素が違うでしょって話。

AR/MRの話に戻すと、現実感がちょっとでも拡張されていればARで、現実と仮想がほんのちょっとでもMixされてればMRだとする。
わかった、そう主張するなら否定はしまい。ただ、どれくらい現実感が拡張されて、現実と混ざり合っているかは違うんだから、レベル分けしましょうよ

以下、私が勝手に定義したARレベルの暫定版。

レベル0

現実と全く混ざっていない。
ARじゃない普通のアプリケーション。

レベル1

現実の映像にコンテンツが重なって表示される。ただし、コンテンツが現実に固定されておらず、一方が動くとズレが生じる。

レベル2

コンテンツが現実と同じ空間に固定されている。例えば、コンテンツが平面に接地し、カメラが動いてもその場に留まって見える。
技術要素:平面推定、モーショントラッキング、空間アンカー
代表例:ARKit

レベル3

コンテンツが現実に存在する物体とリアルタイムに相互作用を起こす。例えば、コンテンツが物体の陰に隠れたり、壁にぶつかり跳ね返る。
技術要素:オクルージョン、メッシュ再構成
代表例:Tango

レベル4

視覚、聴覚、触覚が一部拡張され、仮想コンテンツとユーザ自身が同じ空間に存在しているように感じる。レベル3との違いは自分が空間の中にいる感覚。例えば、首を動かすだけで見え方が変わる、音が立体的に聞こえる。
技術要素:ホログラム表示、空間音響、ジェスチャー、ハンドトラッキング
代表例: HoloLens

レベル5

完全に拡張された拡張現実。コンテンツの現実感とユーザインターフェースが拡張された結果、現実空間に存在する仮想コンテンツの区別が付かない。

※ 代表例は2017年6月時点の機能を元にしています
 

ユーザ体験のレベルが違うことがわかっていれば、ARでもMRでも好きに呼べばいいと思います。人によってレベル3の相互作用をMRと呼んだり、レベル4の同じ空間にいる感覚をMRと呼んでいることが問題の根底。AR技術にしても、すべてを一緒くたにしてARは云々と語ると、誤解や反論を招きやすい。
VRはARとは若干アプローチが異なりますが、レベル4,5で空間そのものを仮想に置き換えた場合には、VRとオーバーラップしますね。

と、てきとうに考えた割には、結構見通しがよくなった気がする。