MRが楽しい

MRやVRについて学習したことを書き残す

ARとVRデバイスを色々調べてまとめる(MOVERIO BT-300)

ARとVRデバイスを色々調べてまとめる AR枠その3 MOVERIO BT-300 です。

MOVERIO BT-300

f:id:bluebirdofoz:20170502040532j:plain
www.epson.jp

スペック

本体スペック

CPUIntel Atom5 1.44GHz Quad Core
メモリ16GB Flash/2GB RAM
OSAndroid 5.1搭載
スピーカーイヤフォン出力
無線LANWi-Fi 11a/b/g/n/ac (5GHz)
BluetoothBluetooth バージョン4.1
バッテリー約6時間駆動
リチウムポリマーバッテリー2950mAh
電源AC100-240V 50/60Hz
重量69g

透過型ディスプレイ

方式シリコンOLED(有機EL
アスペクト比16:9
解像度1280×720
画角約23度(対角)

搭載センサ

センサーGPS/地磁気センサー/加速度センサー/ジャイロセンサー/照度センサー
RGBカメラ500万画素×1個
参考:BT-300 仕様
   http://www.epson.jp/products/moverio/bt300/spec.htm
参考:第3世代スマートグラスMOVERIO『BT-300』を開発
   http://www.epson.jp/osirase/2016/160223.htm

価格

BT-3008万3280円税別
※ オープン価格
参考:エプソンダイレクトショップ

長所/短所

長所

Android内蔵型のスタンドアローン機のため、単体動作可能
・HUD型ARデバイスとしては手頃な価格設定 一般向けの販売
・軽量コンパクトな本体デザイン

短所

・スペックによる3Dアプリ開発の性能/機能制限
ジェスチャー用深度カメラや音声認識用マイクなどのセンサはなし

アプリ開発環境

Android Studio
Epson提供SDK
参考:MOVERIO BT-300 ドキュメント
   https://tech.moverio.epson.com/ja/bt-300/developers_guide/developing_apps.html

・Unityにも対応
参考:MOVERIO BT-300 技術FAQ
   https://tech.moverio.epson.com/ja/bt-300/faq.html
参考:Moverio BT-300 Unity Plugin
   https://www.assetstore.unity3d.com/jp/#!/content/83627

感想

エプソンから一般向けに販売されているHUD型ARデバイスです。
hololensやMeta 2と異なり、高度な空間マッピングやハンドジェスチャー操作を提供するものではありません。
イメージとしては以前流行したgoogle glassに近いです。

優れた点について

この機器の最大の特徴は一般向けに設定された手頃な価格設定です。
それでも透過型ディスプレイの性能は必要十分な性能を所有しており、GPSや一通りのセンサー群も保有しています。
Android内蔵型のスタンドアローン機であり、利用に周辺機器は不要です。
最近のスマートフォンをそのままメガネ型にしてみたイメージでしょうか。

開発者にとって

開発環境はAndroidOSのため、Android Studioが推奨開発環境となります。
公式QAによるとUnityにも対応しているそうです。
開発に関するドキュメントもインターネット上でそれなりに充実しており、比較的取っつき易そうな印象を受けます。
一方でアプリ配布にはEPSONが独自開発したストアを利用する必要があるなど、プラットフォームとしての流用性は低そうです。

スペックについて

気になる点としてはCPUとメモリのスペックが不十分に思えます。
開発環境としてUnityに対応しているとはいえ、3Dアプリを快適に動かすには制限が多そうです。
搭載カメラを使い、マーカーレスARによる疑似トラッキングやハンドジェスチャー認識ができれば面白そうなのですが…。
(特にハンドジェスチャー音声認識はほしい…折角のHUD型デバイスなのにコントローラ操作はナンセンス過ぎる)

評価について

3Dアプリ利用での性能上限ばかりは試してみないと分からないので、所持していない自分に正確な評価は下せません。
商品ページを見るに、やはりMRデバイスとしてよりも動画再生などの用途がメインに思えます。
動画視聴やARマーカーアプリ程度の利用用途に特化する場合は軽量コンパクトかつ安価な本機が最適でしょう。
デザインも良いです。将来完成されたARデバイスはこのくらいのコンパクトさが欲しいです。

ARとVRデバイスを色々調べてまとめる(Meta 2)

ARとVRデバイスを色々調べてまとめる AR枠その2 Meta 2 です。

スペック

本体スペック

OS外部PC接続
スピーカーニアイヤーオーディオスピーカーx4
接続ケーブルビデオ、データ、パワー用270cmケーブル(HDMIバージョン1.4b)
電源外部電源
重量420g(ケーブル,ヘッドストラップ除く)

外部PC要求スペック

CPUIntel Core i7 (desktop CPU)
GPUNVIDIA GTX 960 / AMD R9 280
メモリ8GB RAM
OSWindows 8or10 64bit

透過型ディスプレイ

アスペクト比16:9
解像度2560x1440
視野角左右90°

搭載センサ

慣性計測ユニット6軸慣性測定ユニット
センサーハンドセンサー
RGBカメラ720pフロントフェイスカメ
参考:Meta 2
   https://www.metavision.com/
参考:Meta 2|没入型AR体験ヘッドセット「メタ2」
   https://www.rakunew.com/items/73660
※ 予約受付段階のため、一部不確定。

価格

Meta 2 Augmented Reality Development Kit$949(約10万5000円)税別

長所/短所

長所

・透過型ディスプレイの広い視野角と高い解像度
・スペックに対して軽量な本体(電源はケーブルからのAC電源接続)

短所

・Meta 2とは別に外部PCが必要
・高額な価格設定(外部PCを新規購入した場合)

アプリ開発環境

・Unity 5.3x 以上
・Meta 2 SDK
参考:Meta 2
   https://www.metavision.com/
参考:アプリ開発者目線でHoloLensとMetaの違いを整理してみました
   http://magicbullet.hatenablog.jp/entry/ComparisonHoloLensAndMeta

感想

Meta社から開発者向けに購入予約が開始されたHUD型ARデバイスです。
出荷日は未定とのことで不確定な情報も多いですが、hololensの対抗機として注目されています。

優れた点について

この機器の最大の特徴と優れた点は透過型ディスプレイの性能の高さです。
hololensに比べて約2倍の視野角の広さ、解像度の高さが目を引きます。
GearVRに近い視野角なので高い没入感を得られるARデバイスとしての用途が期待できます。

スタンドアローン機でない利点と欠点

本機器はスタンドアローン機ではなく、ソフトウェアの動作に外部PCを必要とします。
外部PCの要求スペックもそれなりに高く、可搬性は低いと言えます。
外部PCを新規購入する場合、hololensと最終的な価格はあまり変わらないものと思われます。

しかし、外部PCを利用することにはメリットもあります。
ハイエンドな性能を要求するソフトウェアの動作が可能なこと、外部電源による連続稼働時間の制限が無くなることなどです。

外部PCが必要であることの個人的な懸念点はケーブルが利用者の移動を制限する点です。
Oculus Riftを利用しての感想ですが、HUD型デバイスにおけるケーブルの存在は想像以上にその利用を阻害してしまいます。

開発環境について

開発環境については不明な点が多いですが、開発者登録を行うとMeta 2 SDKが提供されるようです。
ソフト開発は本デバイスに特化した形となると考えられます。
Meta社のBlogで開発に関する情報が展開されているようですが、Meta 2向けの機能開発には情報収集に苦労しそうです。
一方で、Metaアプリケーションの開発環境はUnityとのことで、開発ツール自体の利用には苦労しないでしょう。

hololensの対抗機として

hololensの対抗機と目されていますが、全く住み分けの異なるデバイスと考えられます。
スタンドアローン機であるか否かという点で、そのメリットとデメリットが大きく異なるためです。
可搬性は犠牲にしても、没入感の高いアプリの連続稼働が必要な環境であればこちらのデバイスが優秀と考えられます。
AR系アトラクションの用途で活躍できそうです。

ARとVRデバイスを色々調べてまとめる(Hololens)

ARとVRデバイスを色々調べてまとめる AR枠その1 Hololens です。

スペック

本体スペック

CPUIntel 32 bit architecture
GPUCustom built Microsoft Holographic Processing Unit(HPU 1.0)
メモリ64GB Flash/2GB RAM
OSWindows 10
スピーカービルトイン・スピーカー
無線LANWi-Fi 802.11ac
BluetoothBluetooth 4.0 LE
バッテリー2~3時間連続稼働
最大待機時間2週間
充電しながらの動作も可能
放熱ファンなし
電源2.5A/5.2V
重量579g

透過型ディスプレイ

アスペクト比16:9
解像度1280×720
視野角左右40°程度
フレームレート60fps
(デバイスポータル*1でキャプチャ時は30fps)
ホログラフ配置可能距離0.5~5m
ホログラム配置最適距離1.25~5m/映画などは2mが最適距離

搭載センサ

慣性計測ユニット(IMU)1個(加速度、ジャイロ、方位を測定)
環境認識カメラ4個
depthセンサー1個(ジェスチャー用)
RGBカメラ2MP×1個
複合現実感キャプチャ1個
マイク4個(左右2個ずつ)
周辺光センサー1個
参考:MRとは? HoloLensのハードウェア/機能/アプリ動作/ユーザー操作
   http://www.buildinsider.net/small/hololens/001

価格

Development Edition33万3800 円税別
Commercial Suite55万5800 円税別
※ 日本向け販売価格

長所/短所

長所

・PC内蔵型のスタンドアローン機のため、単体動作可能
・開発環境が充実 Unity向けのライブラリやMicrosoftの開発チュートリアル
・充実した本体の搭載デバイス

短所

・高額な価格設定
・透過型ディスプレイの視野角の狭さ

アプリ開発環境

Visual Studio 2017 or Visual Studio 2015 Update 3
・HoloLens Emulator
・Unity 5.5 以上
参考:Install the tools
   https://developer.microsoft.com/en-us/windows/mixed-reality/install_the_tools

感想

本機はMicrosoft社から開発者または法人向けに販売されているHUD型ARデバイスです。
紹介するARデバイスでは筆者が唯一所有しているものとなります。

優れた点について

この機器の最大の特徴と優れた点はhololens単体での自己完結性の高さだと思います。
PC内蔵型のスタンドアローン機というだけでなく、様々なセンサや通信機器を内蔵しているため、ほとんどのやりたい事がhololensだけで完結します。
アプリ動作用の外部PCも、ジェスチャ認識や空間認識用のセンサも、音声認識用のマイクも、デバイス連携用のBluetoothのアダプタも追加は不要です。全てhololensに入っています。
身に着けるものであるからには、それ単体で持ち運び利用できなければ意味がないというMicrosoftの拘りを感じます。
値段は気にしないので、とにかく様々な用途で利用できる総合デバイスが欲しいという方はこれ一択です。
(むしろフル活用できるのであれば現状の33万でも十分に安い価格と思います)

開発者にとって

開発環境の充実も見逃せません。
チュートリアルプロジェクトまで公開されているので、Unityの知識があれば直ぐにアプリ開発が可能でしょう。
インターネットでの開発コミュニティが盛んで情報が簡単に得られます。日本語での情報が多いのはとても助かります。
アプリの流用性も非常に高いです。
hololens専用アプリではなく、Windows上でUWPアプリを動作する形なので後方互換や今後様々なデバイスへの展開も容易でしょう。

事実、サードパーティ社からARデバイスの販売が発表されており、アプリに互換があることが予想されています。
・HoloLensを初めとするMRデバイスが続々登場!発表済みのMRヘッドマウントディスプレイをまとめてご紹介
 http://vrinside.jp/news/mr-device-ofallnow/
ソフトの修正なしにハードを選択できることは開発者の負担を大きく減らしてくれると思います。

不満点について

個人的な不満点は透過型ディスプレイの視野角の狭さのみです。
映像に対する没入感がないため、仮想現実の世界を体験するようなアトラクション的な利用には向いていません。
その代わり解像度は高く、表示した文字などは問題なく読むことができます。現実世界をベースとしたAR的な用途に適しています。

最後に

ただ本機はやはり、全部乗せの試作機というイメージが強いです。
しばらく価格が下がることもないでしょうし、数年内にこの全部乗せのまま一般向けに販売されるとも思えません。
「5年後の未来、MRで何ができるのか」を今試しておきたいという開発者向けのデバイスです。

ARとVRデバイスを色々調べてまとめる

今回は技術調査枠です。

今更の話ながらhololensだけがMRデバイスの全てではありません。
また、MRデバイスだけでなく、VRデバイスもまた現在注目されるデバイスです。

本記事では注目される色々なMR/VRデバイスについて調べたことをまとめていこうと思います。
大きく分けて以下の3篇です。デバイス毎に順次記事を追加していきます。

ARとVRデバイスを色々調べてまとめる(AR編)

ARとVRデバイスを色々調べてまとめる(周辺機器)

VIVE トラッカー

bluebirdofoz.hatenablog.com

Mirage Camera

bluebirdofoz.hatenablog.com


周辺機器はHUDに拘らず、MR/VRで使えそうと感じたデバイスをまとめます。
記事ではMRデバイスをARデバイスとしてまとめて扱います。

hololensで画面UIで操作を行う

前回記事の続きとなります。追加した表示UIのボタンにイベントの設定を行います。
・hololensで画面UIを表示する
 http://bluebirdofoz.hatenablog.com/entry/2017/04/28/021154

やはりUIの表示だけでなく、ボタン操作のINPUTの仕組みも確認しておきたいということです。
まずUnityのButtonオブジェクトに関する勉強になります。以下の記事を参考にしました。
・【uGUI】Buttonの使い方
 http://qiita.com/2dgames_jp/items/b3d7d204895d67742d0c

丁寧な記事です。Buttonオブジェクトに関する様々な情報があります。
折角なので色変更などの設定も行ってみます。
Navigationの設定についてはhololensで使う場合「none」でいいでしょう。
f:id:bluebirdofoz:20170429030510j:plain

ついでにテキストも変更します。
f:id:bluebirdofoz:20170429030515j:plain

最後にイベントの設定です。
ユニティちゃんオブジェクトを指定して現在、ゲーム開始時に呼ばれているOnSelect関数を設定します。
f:id:bluebirdofoz:20170429030521j:plain

アプリをビルドして試してみます。
f:id:bluebirdofoz:20170429030526j:plain
ボタンに視点を合わせてエアタップ動作を行うと…。
f:id:bluebirdofoz:20170429030535j:plain
ボタンが赤に変わり、ゲームが開始しました。成功です。


随分とあっさりと成功してしまいました。
しかし、この裏にはUnityのEventSystemの自動設定とhololens Input Moduleの設定がありました。
仕組みが分からないままでは意味がないので少し調べてみます。
f:id:bluebirdofoz:20170429031538j:plain


そもそもCanvasオブジェクトを作成した際に自動生成されたEventSystemオブジェクトとは何なのでしょう。
・UnityのEventSystemを操る
 http://chungames.hateblo.jp/entry/2015/11/21/234241
・Unity 4.6 から利用できる UI での EventSystem をカスタムする方法について調べてみた
 http://tips.hecomi.com/entry/2014/09/25/233823
・イベントシステム
 https://docs.unity3d.com/jp/540/Manual/EventSystem.html

順に読めば何となく理解できるかも?
EventSystemオブジェクトは Unity 4.6 から導入されたシステムで uGUI を利用する際は必ず追加されるオブジェクトです。
EventSystemにデフォルトで導入されたscriptはそれぞれ下記の役割を持ちます。

  • Event System:どの Input Module が現在有効なのか、どのゲームオブジェクトが現在選択されているかを管理する。

 ・Event System マネージャー
  https://docs.unity3d.com/ja/540/Manual/script-EventSystem.html

  • Standalone Input Module:コントローラー/マウスの入力を管理する

 ・Standalone Input Module
  https://docs.unity3d.com/ja/540/Manual/script-StandaloneInputModule.html

これらのEventSystemとCanvasオブジェクトがどういった関係で結ばれているかというとRaycasterと呼ばれる仕組みです。
例えばCanvasオブジェクトを生成すると、必ずGraphic Raycasterコンポーネントが追加されています。
f:id:bluebirdofoz:20170429030734j:plain

EventSystemは検知した操作についてRaycastという通知を行います。
そしてCanvasオブジェクトはこのRaycasterを通じてそのRaycast通知を受け取ります。
これによって、GUIにコライダ(アタリ判定)を付けなくてもマウス操作などが可能になる訳です。なーる。

前回、EventSystemにHoloLens Input Moduleを追加したのは視線操作とエアタップ操作によるRaycast通知を追加した訳ですね。
表示UIとそれに対する操作はここで閉じている訳です。賢い。
MVP設計に落とし込む際にはGUI操作関連の処理は一纏めにViewと考えた方が良いのかな。

hololensで画面UIを表示する

今回は新機能実装です。
前回の設計で画面表示UIオブジェクトの枠を設けたので、画面UIの表示を試しておきたいのです。
以下を参考に画面UIを実装します。
・【HoloLens】Unityでスタートメニューみたいな追従するUIを作る
 http://kzonag.hatenablog.com/entry/2016/08/14/163736

記事を元に実装を行います。HoloToolkitの利用が前提となるようです。
環境の整った追いかけっこアプリに追加します。
(更にスパゲッティ化が進みますが、プロジェクトを何個も作ると容量が増えるのです。。)

ざっくりめの記事なので折角なので本ブログでも一つ一つ確認していきます。まずはカメラ設定です。
エミュレータでのUIの見え方をhololensと合わせるため、Field of Viewの値を変更します。
f:id:bluebirdofoz:20170428020744j:plain
ここで早速分からない点があります。Field of Viewの値って幾らに設定するのが妥当何でしょうか。
以下に情報がありました。hololensアプリ開発の場合、17.82が適正と結論付けています。
・Unity Camera FOV?
 https://forums.hololens.com/discussion/6839/unity-camera-fov
・PLAYING WITH THE HOLOLENS FIELD OF VIEW
 http://www.imaginativeuniversal.com/blog/2017/03/18/playing-with-the-hololens-field-of-view/

エディタやエミュレータの環境をhololensに近づけたい場合、この辺りの角度を設定すれば良さそうです。
記事元の方も算出方法は不明ですが、17.989とこれに近い数字を設定しています。

17.82を設定してみました。
f:id:bluebirdofoz:20170428020840j:plain
こう見るとやっぱりhololensの視野角は狭い。


次にキャンバス設定です。
GameObject->UI->Canvasを選択し、オブジェクトを作成します。
f:id:bluebirdofoz:20170428020850j:plain
キャンバスの設定は記事のままに設定します。スケールを小さくしておくのは後の微調整で非常に便利ですね。


次にEventSystem設定です。
EventSystemオブジェクトに HoloLens Input Moduleを追加するとAirTap等のジェスチャーで操作できるようになるとのことです。
f:id:bluebirdofoz:20170428021023j:plain
AddComponentを押下し、Event->HoloLens Input Moduleで追加できます。
(Event側にあると気付かず、探しまくった…どちらにせよ検索で名前を入力すれば出てくるはずです)

しかし、既にタップ操作によるUIまで提供されていましたか…。早速、昨日の設計では想定していなかった事態です。
提供されているなら使いたい…要はこのEventSystemオブジェクトをゲームUIに位置付ければ良いのかな。


そしてUIオブジェクト配置です。
Canvasオブジェクト上でGameObject->UI->Panelを選択し、パネルを作成します。
更に好みに合わせてGameObject->UI->Buttonを追加し、位置を合わせると以下のようにUIが表示できています。
f:id:bluebirdofoz:20170428021055j:plain
今回、表示確認がメインなので押下時のイベントは未設定です。


最後に追従設定です。
PanelオブジェクトのAddComponentからScript->HoloToolkit.Unity->TagalongでTagalongを追加します。
更にScript->HoloToolkit.Unity->Billboardを追加し、記事を参考にステータスを設定します。
f:id:bluebirdofoz:20170428021105j:plain
実装はこれで完了です。


ビルドを行い、動作確認をしてみました。
f:id:bluebirdofoz:20170428021122j:plain
指定した位置にUIが表示されています。視線を横に動かしてみると…。
f:id:bluebirdofoz:20170428021130j:plain
UIが追従しました。成功です。
写真で見るとかなり余裕を持って追従して見えますが、実際のhololensだと視野角がもっと狭いので視界から外れたタイミングで追従しています。

直ぐに本アプリでUIをどう使うという予定はありませんが、設計としては機能追加の可能性として考慮したいところです。

Unityに設計おけるクラス設計を考える その2(MVP設計)

前回の続きとなります。
・Unityに設計おけるクラス設計を考える その1(アプリの現状)
 http://bluebirdofoz.hatenablog.com/entry/2017/04/26/013327

昨日は気付いたらベッドで眠っていました。
でも折角続けている1日1記事ペースを止めたくないので今回はほぼ文字だけですが設計検討を行います。
(因みに夢は地球がUFOに侵略される夢でした…その中でも頑張って仕事に行ってました。偉い…のか?)

調査したMVP設計を考慮して、まずはオブジェクトの構成について検討してみました。
・Web出身のUnityエンジニアによる大規模ゲームの基盤設計
 https://developers.cyberagent.co.jp/blog/archives/4262/
・昨今のUnity開発におけるMVP設計思想についてと、それの適用可否の話
 http://yutakaseda3216.hatenablog.com/entry/2017/02/22/151204


以下、試そうと考えているオブジェクトの構成。

・GameLogic:ロジック統合オブジェクト
・GameInformation:ゲームデータ統合オブジェクト
 └Database:ゲーム情報
・Camera:カメラ統合オブジェクト
 └MainCamera:メインカメラ
・Light:ライト統合オブジェクト
 └Lights:通常ライト
・GameUI:ゲームUI統合オブジェクト
 ├Keyboard:キーボードUI
 ├Speech:音声認識UI
 └Gesture:ジェスチャ認識UI
・HeadUpDisplay:画面表示UI統合オブジェクト
 ├FixedUI:位置固定の表示UI(input,output)
 └FollowingUI:追従(ディスプレイ位置固定)の表示UI(output)
・MainCharactor:メインキャラクタ統合オブジェクト
 ├ControlLogic:コントロールロジック
 │├ManualLogic:マニュアル操作モードロジック
 │└CatchAndRunLogic:追いかけっこ操作モードロジック
 │ ├CatchMode:追いかけっこ(追)モードスクリプト
 │ ├RunMode:追いかけっこ(逃)モードスクリプト
 │ └ColliderItem:ロジック用アタリ判定オブジェクト
 ├EffectManager:効果マネージャ
 │└StartEffect:ゲーム開始時エフェクト
 │ └EffectItem:効果オブジェクト
 └ModelManager:モデルマネージャ
  ├unitychan_dynamic:キャラクタオブジェクト
  ├HeadLookSwitchCotroller:視線追従マネージャ
  │└ColliderItem:視線追従用アタリ判定オブジェクト
  ├FaseController:表情変更スクリプト
  ├ActionController:キャラクタアクション実行スクリプト
  └VoiceController:キャラクタ音声実行スクリプト
・Field:フィールド統合オブジェクト
 ├SpatialMapping:空間マッピング
 └TestField:テスト用フィールド
  ├TestStopCube
  ├TestJumpCube
  └TestPlane

MVP設計において各オブジェクトがそれぞれの役割を持つイメージです。
f:id:bluebirdofoz:20170427093156j:plain
Model:GameInformation(ゲームデータ統合オブジェクト)のオブジェクト
Presenter:GameLogic(ロジック統合オブジェクト)のオブジェクト
View:上記以外のオブジェクト全て

その他、実装時の各オブジェクトの関係については以下の決まりとします。

最上位層のオブジェクトが下位オブジェクトへのインタフェースを保持する。
PresenterはModelと各Viewの最上位オブジェクトのインタフェースのみ知っている。
ModelとViewはPresenterへの状態変更またはイベントの通知を投げる。
ただしModelとViewはPresenterの実体を知らない。

視点とハンドジェスチャーは別UIと考える。
ゲームUI統合オブジェクトで視点、ハンドジェスチャー音声認識を統合して一つのアクションを通知する。
(特定のオブジェクトを選択するなど)

視点操作などでUI外のオブジェクトが通知される場合、オブジェクトをそのままPresenterに通知する。
そのオブジェクトが何であるかはPresenterが解釈を行う。
(画面表示UIをGameUIに含めないのはこの為。画面表示UIは選択可能なゲームオブジェクトの一つとして考える)


以上です。まだ検討段階で、実際に試してはいないため、色々問題はあるかも。