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

アプリ開発者目線でHoloLensとMetaの違いを整理してみました

Meta HoloLens Unity UWP

最近MR/AR系の分野で注目を集めているのは、HoloLensとMeta2だと思います。

いずれもかぶることで、実世界に重ね合わせてCGや各種情報を見ることができます。

■HoloLensの使用イメージ

f:id:Takyu:20160624234512j:plain

■Meta2の使用イメージ

f:id:Takyu:20160625011303j:plain


イメージ画像だけを見るとできることはだいたい同じに見えます。

しかし、アプリ開発をする視点で見ると、細かいところが色々と異なっており、アプリ開発時はそれぞれの特徴を把握する必要があります。

そこで、いずれHoloLensやMeta2アプリを作る時の参考になればと思い、整理してみました。


(補足)

Metaについては、Meta2を試したことがないため、所持しているMeta1を基準に書いています。


============================
[目次]

1.操作

2.構成

3.開発環境

4.アプリのビルド手順

5.アプリの同時起動

6.アプリで使える認識エンジン

7.終わりに

============================

1.操作

どちらも備えている操作と、片方にしかない操作があります。

ただし、同じ操作でも操作方法は異なっています。

1-1.HoloLens、Metaで共通な操作

(表の中に出てくるAirTap、Pinch、Grabについては、下記の個別の操作紹介をご確認ください)

操作 HoloLens Meta
ヘッドトラッキングでカーソル移動 あり あり
オブジェクトの拡大/縮小 調整用アイコンをAirTapで選択し、Windowの端をドラッグ 両手の指で操作(Pinch Out/In)
オブジェクトの移動 調整用アイコンをAirTapで選択し、Windowsの中心に指を合わせて、つまむ様にして移動 片手でオブジェクトを握る操作をしてから手を動かす(Grab)
スクロール スクロールアイコンをAirTapで選択し、指をつまむ動作をして移動 Windowsのスクロールアイコン部分に指を合わせてから移動

1-2.HoloLens独自の操作

Bloom

手を広げることでStart Menuを出す


AirTap

ヘッドトラッキングによってポインタを移動させ、ポインタが変化したら指をつまむ。これで決定となる。

1-3.Meta独自の操作
Grab

手でオブジェクトを握ることで、オブジェクトを移動させる


Pinch Out/In

両手の指でオブジェクトを拡大、縮小させる


Tap

オブジェクトに触ることで、操作する



HoloLensの場合、ほとんどの操作がAirTapでできるので、覚えることが少なく使いやすいと思います。
一方、Metaはスマートフォンベースの操作方法が多く、直感的に使えるという印象を持ちました。

たとえば、Metaでスクロールを実行するには、下記のようにスクロールバーを指で動かすだけです。

しかし、HoloLensでスクロールを実行する場合は、"Scroll Tool"をAirTapしてから手で動かすことになるので、操作が一つ多いことになります。

f:id:Takyu:20160626215413j:plain

アプリ開発をするときは、異なる設計思想の操作であることを認識しておくと、使いやすいアプリになると思います。

(どちらがよいのかは、アプリの内容や使い方によるので、判断しづらいところと思います)

2.構成

搭載しているOS PCは必要?/不要?
HoloLens Windows10 不要
Meta MetaOS(起動画面の雰囲気からAndroidのカスタマイズ版) 必要

Meta1は自身にOSを搭載していますが、実際はHMD(Head Mount Display)のセンサ情報を渡すためだけで、メインの処理は全てPCです。

Meta社のHPにあるFAQによると、Meta2でもPC必須は変わらず、ある程度スペックの高いPCが必要になります。

f:id:Takyu:20160626220908j:plain


Meta1の場合、さらに別途外部電源も必要だったので、ケーブルだらけになってしまいました。

ということで、現状はHoloLensの方が使いやすい構成であると言えます。

3.開発環境

対応する開発環境 バージョン 対応するOS
Meta Unity 4.7.1 or 5.3.4 Windows8.1 or 10
HoloLens Unity 5.4 for HoloLens Windows10
Visual Studio Update2 Windows10

[Metaの補足]
・Depthセンサを細かく制御するにはC++を使う必要があるようです(未確認)。

[HoloLensの補足]
チュートリアルはUnityベースで書かれており、実際はUnityで作るのがよさそうです。


このように、どちらも開発環境をUnityで統一できます。

しかし、Prefabやdllはデバイス固有のため、同一プロジェクトで開発内容を共存するのは現実的ではありません。

そのため、もしHoloLensとMeta向けに同じアプリを作りたい場合、Unityを選択し、表示部分やバックエンドの処理だけ共通化というのがよいと思います。

4.アプリのビルド手順

ビルド手順
HoloLens Unityで開発→Visual Studio向けにビルド→Visual Studioで、全天周のUWPまたは単一UWPとしてビルド
Meta Unityで開発→Windowsアプリケーションとしてビルド


Meta2でどうなるのか、HoloLensの開発方法がどう変わるかがわからないですが、現時点では圧倒的にMetaが便利です。

ちなみに、HoloLensについてはEmulatorベースですが、アプリ開発環境の構築手順を書いているので、ご参照ください。

magicbullet.hatenablog.jp


5.アプリの同時起動

Meta1ではUnityアプリをフルスクリーンで実行し、それをミラーリングします。つまり、複数のアプリは起動できないし、Unityでできる範囲のことしかできません。

一方、HoloLensはWindows10ベースで動き、こんな風に複数のウインドウを空間に固定できます。

f:id:Takyu:20160626172954j:plain

Meta2でどう変わるかわかりませんが、現状はHoloLensの方が使い勝手がよいと思います。


6.アプリで使える認識エンジン

6-1.標準搭載されているか

音声認識 画像認識 空間認識
HoloLens あり(Cortana) なしと思われる(チュートリアルには紹介なかった) あり(Spatial Mapping)
Meta なし 特定マーカの認識のみ あり(SLAM。ただしα版)

(補足)
SLAM とは、Simultaneous Localization and Mapping です。RGBカメラ、Depthカメラを用いて現在位置を推定しながらその場所のマッピングを行う手法です。

蛇足ですが、下記の記事に紹介されているように、ロボット掃除機「ルンバ」にはSLAMが使われています。

www.itmedia.co.jp


6-2.他社製の認識エンジンを使えるか

音声認識 画像認識 空間認識
HoloLens 難しい OpenCVを使えばできるかも 不明
Meta Windowsデスクトップ系の一般的機能を利用可 Windowsデスクトップ系の一般的機能を利用可 不明


HoloLensで他社製認識エンジンが使えないのは、他社製機能がUWPに非対応であるためです。

非常にざっくりした説明をすると、OSがWindows10で動くアプリケーションは、従来のWin32系と呼ばれるランタイムを使って動くタイプ(exe形式のもの)と、Universal Windows Platform(UWP)というタイプの2種類があります。

詳しくは調べ切れてませんが、私の知る限り他社製の認識エンジンはWin32系のWindowsiOSAndroidのどれか(またはどれも)に対応していることが一般的で、UWPに対応している認識エンジンはまだ見たことがありません。


例えば、画像認識系で有名なVuforiaは、2016年3月にHoloLensへの対応を予定していることを発表しました。つまり、これまでUWPには非対応でした。

www.ptc.com

VuforiaのHPには、希望者はEarly Access Programに応募してほしいとあったので、一般公開まではまだ時間がかかりそうです。



7.終わりに

現時点では一長一短という印象です。

そのため、どちらが優れている、を無理に決めるよりは、両者の違いを理解しながら、それぞれに適したアプリを作っていこうと思います。


ちなみに、今回直接比較ができなかったMeta2ですが、MoguraVRさんで紹介されている通り、Meta社と協力してアプリ開発をしてくれる開発者にMeta2が優先的に出荷されることが発表されました。

www.moguravr.com

また、記事にはこんな記述があります。


(Meta社の)グリベツ氏はMetaと協同して早期に開発を始めたい開発者はMetaに直接コンタクトをとってほしいと強調していました。

そこで、メールで連絡を取ってみたところ、幸いにもβ候補に選んでいただくことができました。


ということで、もしMeta2が早期に届いたら、Meta1と何が違っているのか、どうやってアプリを作るのかなども調べてブログに公開しようと思います。

Windows10 MobileのアプリをWiFi経由でデバッグする方法

UWP windows

HoloAcademyという、HoloLens用のアプリ開発チュートリアルページで見つけた方法です。

Windows 10 Mobileでもできたので、参考のため書いておきます。

手順

前提

Visual Studioで何らかのプロジェクトを開き、ビルドできる準備ができていること

確認した環境

Windows 10 Pro
Visual Studio Update2

(1) Visual Studioのアプリ実行ボタンを「Local Machine」から「Remote Machine(リモートコンピュータ))」に変更する

f:id:Takyu:20160621214445p:plain

(2) 「Remote Machine」をクリックし、Authentication Modeを「 Universal (Unencrypted Protocol) (ユニバーサル (暗号化されていないプロトコル))」に変更する。

f:id:Takyu:20160621214532p:plain

(3) 上記でWindows 10 MobileのIPアドレスを入力する

(4) Pairキーの入力画面を確認したら、Windows 10 MobileでPairキーを表示する。

Windows 10 Mobileで設定画面を開きます。下記は英語表記されてますが、もちろん日本語でも同様です。

[1]
f:id:Takyu:20160621215130j:plain

[2]
f:id:Takyu:20160621215141p:plain

[3]
f:id:Takyu:20160621215215j:plain

スライダをOnにすると、リモートでPCとペアリングする機能が有効になります。

有効にすると、「Pair」というボタンが出てくるのでタップします。

[4]
f:id:Takyu:20160621215304j:plain

このようなランダムの文字列が表示されます。これをVisual Studioに入力します。

これでDeployされるので、あとはリモートデバッグができます。



ちなみに、HoloLensもそうですが、Windows 10 MobileにはDevice Portalという機能があります。

これは、

Windows 10 Mobileの端末の状態

CPU使用率

・稼働しているプロセス一覧

・インストールされているアプリの一覧

などを、同一ネットワーク内のWebブラウザから見ることができる機能です。色々見られて便利です。

f:id:Takyu:20160621221119p:plain


使い方は簡単で、先ほどPairingの設定をした画面にあるDevice Portalのオプションを有効にするだけです。

有効にすると、ユーザ名とパスワードの入力を求められます。これはMicrosoft Accountとは別もので、任意の言葉にします。

あとは、同一ネットワークの中で、PCのWebブラウザからhttp://と入力し、先ほど作ったユーザ名とパスワードを入力すると、Windows 10 MobileのDevice Portalを開くことができます。

【未解決】CortonaとUnityの連携方法

UWP Unity
      • -

2016/6/21 追記

(1-1)を更新しました。ただし、未解決は変わらず、です。

      • -

Cortonaを使うと、音声認識やキャラクターとの会話(電脳コイルっぽいこと)ができるのではと思い、Unityで使う方法を調べています。

しかし、色々と止まってしまい未だにサンプルの動作確認ができていません。

未解決ではありますが、現時点で調べた内容を整理してみました。

そもそもUWPとUnityを連携させる方法はあるのか?

あります。

下記のforumでUnity Technologiesの方から紹介されているように、XAMLUnityConnectionというサンプルを使うと、Unityで書いた処理をもとにUWPを作り込むことが可能になります。

forum.unity3d.com

XAMLUnityConnectionの置き場所は、下記のbitbucketです。

bitbucket.org

f:id:Takyu:20160618151741j:plain

www.gamasutra.com


ところで、XAML(ザムル)とは、Windows系の画面デザイン用の言語です。
(実際は他にも用途があるようですが、Windows 10 Mobileでは画面デザインはすべてXAMLで行っていました)

私が知る限り、XAMLは一つの画面を定義するときに使われ、その画面に紐付いたc#コードが対になっています。

XAML Unity Connectionは、実際にはXAMLと対になっているC#でUnity側の処理を受けていると思われます。

CortanaをUnityで使う方法は?

今の所、2種類の情報を見つけました。特に、前半はMicrosoftの方が書かれた記事で、説明が丁寧かつ情報も豊富です。

いずれも動作確認できていないため、内容は記事から推測しています。

(1) Unity側で定義した文章を元に、決まった形の対話を実現するサンプル

f:id:Takyu:20160618152804p:plain

Voice Activating your Windows 10 games using Speech Synthesis, Voice Recognition and Cortanadigitalerr0r.wordpress.com

記事の中にサンプルプロジェクトをダウンロードできるリンクがあります。

(2) UnityのMecanimとCortanaを連携させ、ユーザの声でアバターが踊るサンプル

f:id:Takyu:20160618152814p:plain

www.gamasutra.com

どうやら、Unite2015でMicrosoftの方が紹介したもののようです。
記事の中にダウンロードリンクがありますが、リンク切れでした。しかし、下記に同一と思われるものがありましたのでリンクを貼っておきます。

github.com


2016/6/18時点の状況

(1)

(1-1) そのまま実行した場合

サンプルプロジェクトを開き、Visual Studioからそのまま実行すると、exeのアプリケーションが立ち上がる。しかし、マイクで話しかけても何も応答しない。

サンプルプロジェクトの設定が、en-US(使用言語:英語、地域:米国)となのに、使用環境がja-JP(使用言語:日本語、地域:日本)のためと思われる。

しかし、使用環境をen-USに変更すると、Cortanaが使用できなくなった。そのため、サンプルプロジェクトそのままでは動作確認できず。

f:id:Takyu:20160618153620p:plain

    • -

2016/6/21 追記

Windows10 Mobileで、言語を英語、地域をUnited Statesに変更してから再起動すると、CortanaのUWPサンプルが使えました。

下記のUWPサンプルコードの中にある、Cortana VoiceCommandというソリューションを使いました。

github.com


(1)のUnityプロジェクトをWindows 10 Mobileにビルドして試したところ、3D空間の中でCortanaを起動させる場所まで移動する必要がありました。

しかし、キー入力による移動ができず、動作確認ができませんでした。

有線キーボード、キーパッド:Windows10 Mobileは、2016/6時点で有線の入力に対応していない

BluetoothゲームパッドBluetoothのペアリングはできたが、ゲームパッドの操作はできなかった

    • -
(1-2) Unityでビルドし、Visual Studio 2015 update2から編集した場合

サンプルプロジェクトはUnity5.2。

Unity5.2で開き、ビルドを実行すると、ビルドは終了するが、エラーメッセージが出て、UnityEngine.dllなど、dll系の生成に失敗する。

f:id:Takyu:20160618154338p:plain

そのため、Visual Studioで開いても、MainPage.xaml.csのusing UnityEngine.Windows;、およびこれに関係するメソッドの読み込みでエラーになる。


一方、Unity5.3.5で開き、ビルドを実行すると、ビルドエラーは起きないが、UnityEngine.dllなど、dll系の生成に失敗する。

(1)に関してその他はまったこと
Unity5.3.5を使っていた時、不定期にUnity5.3.5のWebPlayer以外のビルドができなくなる

普通、Build SettinsgでPlatformを選ぶ時、インストール時に選択しておいたプラットフォームを選択できます。

しかし、(1)を試している時、少なくとも2回、Windows Store、Android、WegGLなど、事前にインストールしたプラットフォームがすべてNo module foundになってしまいました。

PC再起動やプロジェクトフォルダの削除で直るかも、という情報をいただきましたが、試す前に再インストールしてしまったので、対処方法になるかは確認できていません。


(2)

これは初期からつまづいていて、Unityのサンプルプロジェクトを開いたら、Microsoft.UnityPluginsがないというエラーが多数出ている状況です。

f:id:Takyu:20160618155220j:plain

では、Microsoft.UnityPluginを入れればと思ったのですが、このように多数あり、どれを入れるべきかがわかりませんでした。

そもそも、Unityで読み込ませる方法が不明という問題もありますが、、

f:id:Takyu:20160618155415p:plain


終わりに

下記で@kaorun55さんもおっしゃっているように、HoloLensで対話的なAIアプリを作るには、HoloLensのサンプルにあるVoiceではなく、CortanaをUWPで活用することが必要と思います。

CGの表現はUnityが楽なので、連携方法を調べていたら(1)と(2)に丁寧なサンプルと解説があったので、まずは動作確認からと思っていたのですが、ちょっと見込みが甘かったようです。


とはいえ、今うまくいってないのは、私のWindows10側のアプリ開発知識が足りてない可能性も十分にあるので、並行して調べていた、UWP単体でCortanaを使う方法の理解を先に試してみようと思います。

この記事については、進捗あれば更新するか、別記事を作ってリンクを貼る形にする予定です。

Structure Sensorの新しい空間認識技術「Bridge Engine」について

StructureSensor

前回は、Structure SensorのアプリをUnityで作る方法を紹介しました。

magicbullet.hatenablog.jp

今回は、Structure Sensorの新機能「Bridge Engine」について調べた内容をまとめました。

Bridge Engineとは?

Structure Sensorの新しい空間認識技術の名称です。

Structure SensorのDeveloper サイトには、「Bridge Engine betaへの申し込みフォーム」があります。

f:id:Takyu:20160611101252j:plain

そもそも「Bridge Engine」て何だろうと思って調べたところ、より精度と追随性の高い空間認識技術であることがわかりました。

以下は2016年の1月に公開された動画です。


動画だけだと断定はできませんが、空間にあるオブジェクトを広範囲で認識しています。

Bridge Engineの特徴

6-DoF Tracking With Depth & Color

空間を三次元的に、かつ色情報ありで識別するようです。

Extension of Structure Sensor SDK

SDKXcodeのSceneKit、およびOpenGL ESベースです。(Unityについては言及ありませんでした)

βプログラムの開始と参加者

2016年3月頃から、限られた数社、または開発者にβプログラムを提供しており、彼らによっていくつかコンテンツが作られてるようです。

個人的には全部CGにも見えてしまうので、実際に作って試してみたいところです。


βプログラムに参加するには?

以下の条件を満たした上で冒頭の開発者フォーラムで連絡すると、参加できそうです。ただし、Access is limitedとあるので、関連技術があるとか自己アピールをしたほうがよさそうです。

・Structure Sensorを持っていること
・Bridge Engineを使ったアプリの案、または完成予定日を事前に提案できること
・Bridge Engineを使って作ったアプリをYou Tubeなどで公開できること
・A8チップ以上を搭載したiOSバイスを持っていること(iPad Air 2、Mini4、iPhone6sを含む)
・Bridge Engineの試用前に、NDAに署名できること

感想

冒頭の動画を見る限り、HoloLensのような空間認識が精度高く実現できそうなので、とても気になります。

ただ、HoloLensやMeta2で試したいことが増えてしまったので、Unityが使えない環境で開発をする時間が取りづらく、少し後になるかもしれません。

また情報が得られたら更新したいと思います。

3Dスキャナ「Structure Sensor」のアプリをUnityで開発する方法をまとめました

StructureSensor Unity

HoloLensやTangoなど、最近のデバイスは空間認識機能に関するものが増えています。

そこで、空間認識機能について学ぶため、iOSバイスで使える赤外線センサの「Structure Sensor」を試してみました。

概要はこちらにまとめられてますのでご確認ください。

■Structure Sensorの概要

www.naturalsoftware.jp

■Structure Sensorのアプリを試した感想

ポータブル3DスキャナのStructure Sensorが届きました | Develog.VR


■ Structure Sensorで3Dサイズが計測できるアプリの紹介(ビジネス向け)

www.pointcloud.jp


だいたいの内容はすでに皆さんが書かれているので、今回はUnityでアプリを作る方法を紹介したいと思います。

=================================
目次

1.準備

2.UnitySDKについて

2-1. Unity SDKの概要

2-2. StructureUnityAR の概要

2-3. StructureUnityUBTの概要

3. HoloLensの空間スキャンのような描画を作ってみる

4. Tips

4-1. ビルドエラーの対処方法

4-2. ビルド設定

4-3. 床をスキャンしてくれないときの対処方法

5. 感想

=================================

1.準備

公式サイトにアクセスし、「JOIN Developer Program」をクリックします。

f:id:Takyu:20160611052105j:plain

個人利用か企業での利用かを選択します。

f:id:Takyu:20160611052205j:plain

名前とメールアドレスの入力を求められます。入力するとURLがメールで届きます。

ちなみに、「JOIN Developer Program」のページには「 Retrieve your login information.」とあります。

しかし、ここをクリックしてもログイン画面にいくわけではなく、再度メールアドレスを入力することになります。

f:id:Takyu:20160611052429j:plain

一度入れたらブックマークしておくのがおすすめです。

(注)メールに送られたURLは個人で異なる("https://developer.structure.io/portal?key=AAAAA"のようになっている)ので、JOIN Developer Programをクリックした本人のみが使うことを前提としているようです。


Developer のページにあるダウンロードの部分をクリックすると、SDK一式をダウンロードできます。

2.UnitySDKについて

2-1. Unity SDKの概要

この中には、Xcodeのプロジェクトと、Unityのunity packageが入っています。
ここではUnity側について解説します。

UnityのSDKは2種類あります。

StructureUnityAR

Structure Sensorを使って、対象物のメッシュデータを取得し、UnityのCollisionを使ってGameobjectとの衝突判定をさせる機能です。

StructureUnityUBT

Structure Sensorのカメラでキャプチャした画像のフレーム単位の変化から、実空間の移動をUnity空間にマッチングさせる機能です。


なお、アプリ開発には以下の環境を準備する必要があります。()は、私の動作環境です。

・Unity5.1.3f1以上 (Unity5.3.4f1)

Xcode 6.4 (7.3.1)

Mac OX 10.10.5 (10.11.5)

iOS 8.4 (iPhone SE 9.3.1)


また、前提として、2つのunity packageは排他的なので、別々のUnityプロジェクトで開発する必要があります。

たとえば、StructureUnityAR.unitypackageをインポートした後、StructureUnityUBT.unitypackageを同じUnityプロジェクトにインポートすると、このようなエラーがでます。

f:id:Takyu:20160611060811p:plain

2-2. StructureUnityAR の概要

f:id:Takyu:20160611060943j:plain

まずはダウンロードしたSDKから、StructureUnityAR.unitypackageをインポートします。

インポートすると、3種類のサンプルシーンがあります。これをベースに開発するのがよいです。

f:id:Takyu:20160611062727p:plain

BallPhysics

空間のメッシュを取得して、"DropBall"ボタンをタップすると、たくさんボールが落ちてきます。

メッシュにはColliderがついているので、ボールはメッシュに当たるとバウンドします。

メッシュは普段見えないようになっていて、ボールがぶつかると、この画像のようにぶつかった付近だけが見えます。

f:id:Takyu:20160611092110j:plain

Fetch

空間のメッシュを取得して、"Toggle Hoop"ボタンをタップすると、キャラクターが出てきます。

キャラクターをタップして、星形のオブジェクトまで連れて行けばよいようです。

f:id:Takyu:20160611102030j:plain

Simple

空間のメッシュを取得してカメラプレビューに重ねて表示します。これが基本のサンプルです。

f:id:Takyu:20160529132430j:plain

文字がたくさんあるのは、ソフトの挙動をテキスト表示するようになっているためです。


ちなみに、空間スキャンをするためには、Assets/StructureUnityAR/Sample/Simple/Scripts/SimpleObject.csの処理を使います。

"Simple"の場合、ここで定義したCubeの大きさの範囲内にある物体をスキャンします。

2-3. StructureUnityUBTの概要

ダウンロードしたSDKから、StructureUnityUBT.unitypackageをインポートします。

インポートすると、5種類のサンプルシーンがあります。

f:id:Takyu:20160611081023p:plain

ただ、Example、Barehouse、Stackerの違いはよくわかりませんでした。

ここでは、Example、MotionLoggingEnabled、SanFranciscoApartmentの3つを解説します。

Example

Structure Sensorを装着したiOSバイスを持って歩き回ると、画面上のUnity空間が歩行量に合わせて移動します。

f:id:Takyu:20160611081423j:plain

MotionLoggingEnabled

歩いた軌跡をUnity空間に保存する機能です。

f:id:Takyu:20160611081911j:plain

Structure Sensorを装着したiOSバイスを持ってから、Record Pathボタンをタップします。


f:id:Takyu:20160529123513j:plain


Stop Recordingをタップするまでの歩いた軌跡がUnity空間で保存されます。

Play Last Pathをタップすると、保存した軌跡に合わせて、カメラオブジェクトが動きます。

SanFranciscoApartment

これはStructure Sensorを使わずに、Unity EditorだけでExampleの雰囲気を体感するものです。

f:id:Takyu:20160611085159j:plain

WASDキーでシーン内を移動できます。おそらく、Unityに慣れてない人向けです。



UBT機能を使うために、いくつかのPrefabが準備されています。

f:id:Takyu:20160611085909j:plain

STPlayer

ラッキングさせるための機能が入ったPrefabです。原則、これをHierarchy Viewにドラッグしておきます。

StructureStatusUI

UI関係の機能が入っています。
Hierarchy Viewにドラッグしておくと、debugログや、uGUIのテキスト表示、バッテリー状態の表示ができます。

また、MotionLoggingEnabledで使った、モーションパスを保存することもできるようです。

f:id:Takyu:20160611090456j:plain
(マニュアルから抜粋しました)

MiniMapCanvas

STPlayerの動いた量を地図で表示します。

BarebonesPlayer

すいません、これはちょっとわかりませんでした。

3. HoloLensの空間スキャンのような描画を作ってみる

HoloLensには、一定時間で空間をスキャンするとき、アニメーション付きでメッシュが生成されます。

f:id:Takyu:20160508154938g:plain


自動的にメッシュ生成のアニメーションをつけるとHoloLensのようになって面白いかも、ということで、アニメーション付きメッシュの自動生成方法を調べました。


まずは、StructureUnityARのunitypackgeをインポートします。

Assets/StructureUnityAR/Samples/Simple/Scenesから、Simpleシーンを開きます。このまま、File→ Save Scene as で別名で保存します。

以下のようなスクリプトを準備します。


Clicking button emulation at 4 sec interval

また、AutoScanController.csをCubeにアタッチし、さらに、ActionButtonオブジェクトをAutoScanControllerコンポーネントにドラッグします。

f:id:Takyu:20160611095409j:plain

デバッグログは残りますが、これで実機を見ると、4秒おきにスキャンするアニメーションを見ることができます。

補足

やっていることは非常に単純で、単にSimpleアプリに実装されていたuGUIのボタンを4秒おきに押しているだけです。

Simpleアプリは、以下の処理でボタンがタップされるたびに内部の状態を1ずつインクリメントしています。


Part of Buttons.cs provided by Occipital Team


なので、そこを利用して、ボタンタップのエミュレーション処理を入れました。

ちなみに、ボタンタップのエミュレーションは下記のようなコードとuGUIのボタンがあれば再現できます。
この場合、キーボードのEをクリックすると、ボタンタップに合わせた動きをします。



Emulation for clicking button of uGUI


4. Tips

4-1. ビルドエラーの対処方法

f:id:Takyu:20160611080907p:plain

このようなエラーがでるときは、Build SettingsのSwitch PlatformをiOSに変更します。

4-2. ビルド設定

UnityでXcodeのプロジェクトを生成するとき、Build Settingsの設定が不十分だと、

・実機転送に失敗する

・実機転送は成功するが、アプリが起動しない

・アプリは起動するが何も動かない

のどれかになります。わかるまで少し時間がかかりました。




では、設定方法です。

Resolution and Presentation

f:id:Takyu:20160611103241j:plain


Default OrientationをLandscape Leftにします。

Other Settings

f:id:Takyu:20160530113226p:plain


Automatic Graphics APIのチェックを外します。

すると、OpenGLES2とMetalというAPIが表示されるので、Metalにカーソルを合わせて”ー”ボタンでdeleteします。

Bundle Identifier は com.<文字列>.<文字列>のようにします。


また、Optimization / API Compatibility Level は.NET2.0にします。

それ以外はスクショの通りです。


以後、ビルドしてUnityで動かすまでの手順については、下記をご覧ください。

magicbullet.hatenablog.jp

4-3. 床をスキャンしてくれないときの対処方法

Structure Sensor で色々試しているとき、壁は認識するのですが、床が認識されませんでした。

下記のようにQuality Settingsのレベルを下げたところ、認識するようになりました。
(初期設定ではFantasiticになっていました)

f:id:Takyu:20160611122629j:plain

5.感想

センサー関係はこれまでKinectくらいしか試したことがなかったので、色々と勉強になりました。

(Kinectを使う例)
magicbullet.hatenablog.jp

もう一つの使い方である、3Dスキャナとしてはあまり使いこなせてません。

たとえば、LPIC公式キャラクタをスキャンしてみます。

f:id:Takyu:20160611124627j:plain

これをスキャンするとこうなります。

f:id:Takyu:20160611124609j:plain

このように、周囲の物体(床含む)が入り込んでしまいます。私のモデリング技術が低いので、この辺を取り除く方法がわかってません。

あと、今のところ、色情報はスキャンしないようです。

=======
2016/6/12 追記

@kaorun55 さんより、iPad であれば色情報も取得できそうという情報をいただきました。(私が試したのはiPhoneSEです)

@kaorun55さん、ありがとうございます。

ただ、私のiPadは古くてLightningケーブルが挿さらないため、確認ができない状態です。

しばらくiPadを買い換える予定がないので、確認は先になりそうですが、モデリングの勉強をするときになったら試してみたいと思います。
=======


空間認識としても色々可能性がありそうですが、3Dスキャナとしてもう少し使いやすいとさらによいなと思いました。

書籍執筆用の仕組み「Re:VIEW」の環境構築とRe:VIEW記法の紹介

Re:VIEW

来月秋葉原で開催される「技術書典」というイベントで、Androidの会Unity部にて「UNIBOOK5」を出展します。

techbookfest.org

www.unity-bu.com

私も共著の形で一部執筆させていただきました。


主催している「達人出版会」では、「Re:VIEW」という仕組みを使って書籍化するのが基本のようで、今回の執筆にはRe:VIEWを使いました。

実は以前共著した時にもRe:VIEWを使ったのですが、使い方をすっかり忘れていたので、次回使うときの備忘録も兼ねて一通りまとめてみました。

========================

目次

1. そもそもRe:VIEWとは何か?

2. 環境構築

2-1. Re:VIEWをインストール

2-2. 執筆用エディタ「Atom」をインストール

3. 執筆用のプロジェクト生成

4. Re:VIEW記法

5. 終わりに

========================

1. そもそもRe:VIEWとは何か?

下記の公式ページの引用によると、


Re:VIEW は、EWB や RD あるいは Wiki に似た簡易フォーマットで記述したテキストファイルを、目的に応じて各種の形式に変換するツールセットです。

ということです。

github.com

Re:VIEWは、Rubyベースであり、日本人のRuby技術者、「青木峰郎」さんによって開発されました。


下記をブログを見ると2008年に初めて公開したとあるので、ここが最初のようです。

青木日記 2008-06-23


2. 環境構築

2-1. Re:VIEWをインストール

Linux/Unix環境で下記を実行するだけです。

$ sudo gem install review

私のMac環境(ElCapitan)では、このコマンドだけでいけました。Linux環境の方は、事前にRubyのインストールが必要です。

cygwinを使えばWindowsでも動くはずです。

動作未確認ですが、この記事にはインストーラが紹介されているので、Windowsでも動くのかもしれません。

2-2. 執筆用エディタ「Atom」をインストール

atom.io

ここからダウンロードしてインストールします。

インストール後、Preferenceを選択し、install packageにて、language-reviewを入力し、Re:VIEW用のパッケージをインストールします。

f:id:Takyu:20160605141116j:plain

インストールすると、Re:VIEW記法の文法を識別して色分けしてくれます。

また、書きながらPreviewを表示させることもできます。以下のように、Packages / Re:VIEW /Toggle Preview を選択するだけです。

f:id:Takyu:20160605141104j:plain


すると、このように、テキストで書きながら直接見た目を確認できます。

f:id:Takyu:20160605141444j:plain

(epubやpdfにした時と、若干見た目が変わりますが、Re:VIEW記法の文法チェックには便利です)


ちなみに、Atomエディタでは、書籍での一般的な書き方(だと思います)について、自動でチェックが入ります。以下は例です。

f:id:Takyu:20160605143130p:plain

「の方が」と書いた箇所に関する警告です。

f:id:Takyu:20160605143134p:plain

「次の」と書いた箇所に関する警告です。



3. 執筆用のプロジェクト生成

プロジェクトを作りたいディレクトリに移動し、

$ review-init <プロジェクト名>

を実行します。

例えば、

$ cd /User/testuser/Document

$ mkdir Testbook

$ cd Testbook
$ review-init testbookname 

これで、/User/testuser/Document/Testbook/testbookname という中にプロジェクト一式が生成されます。

この中に、style.cssというファイルがありますが、これを

$ mv style.css stylesheet.css

を実行し、stylesheet.cssに変更します。epub生成時、stylesheet.cssがあるものとして処理を進めるので、style.cssのままだとエラーになるためです。


あとは、拡張子".re"のファイルを作って、この中に本の内容を書いていきます。

".re"のファイルは、一つが章に相当します。章の並びを決めるのは、catalog.ymlです。

catalog.ymlはこのような書式です。

PREDEF:

CHAPS:
  - chap1.re
  - chap2.re
  - chap3.re

APPENDIX:

POSTDEF:

例えば、この場合、chap1.re、chap2,re、chap3.reの順番に並べることで、1,2,3章となります。

4. Re:VIEW記法

4-1. 主な記法

実際にRe:VIEW記法で書いてepubにしました。個別の記法は下記をご確認ください。
(epubファイルのダウンロードリンクを貼るのは少し面倒なので、epub化したもののスクショを置きました)

= Re:VIEWを使った執筆方法

== Re:VIEWのインストール方法

Re:VIEWはRubyで作られているので、gemを使ってインストールします。

//emlist{
$ sudo gem install review
//}

== Re:VIEW記法の使い方

"@<>{}"を使って、いろいろな表現をつけます。

(注) 以下、epubファイルでRe:VIEW記法を表記するため、"<"をわざと全角にしています。実際は半角を使用します。

f:id:Takyu:20160605142022j:plain

=== 太字

//emlist{
@<b>{太字にしたい文字}
//}

@<b>{この部分が}太字になります。

=== 斜体

//emlist{
@<i>{斜体にしたい文字}
//}

@<i>{この部分が}斜体になります。

=== ハイパーリンク

//emlist{
@<href>{URL,ハイパーリンクにしたい文字}
//}

第一引数だけを使うと、このようにリンクを貼ります。

@<href>{http://magicbullet.hatenablog.jp}

第二引数まで使うと、文字に対してリンクを貼ることができます。

@<href>{http://magicbullet.hatenablog.jp,CrossRoad}


=== 画像の埋め込み

//emlist{
"//image[imagesフォルダの中の画像ファイル名][キャプション]"
//}

//image[image1][ブログのトップページ]

第一引数に、プロジェクトのimagesファイルの中に入れた画像のファイル名を書きます。拡張子は書きません。

第二引数には、キャプションを書きます。

ちなみに、image1.jpgとimage1.pngを置いたところ、pngが優先されました。

また、先頭に"//"をつける必要があります。

=== 表の生成

f:id:Takyu:20160605142051j:plain

ちょっと複雑ですが、このように書きます。

//emlist{
"//table[別の場所で引用するときのキーワード][表の名前]{"
項目の名前 項目の名前2
--------------------------------------
項目11  項目12
項目21  項目22
"//}"

//}

"-"を12個以上追加すると、"-"の上にある文字はヘッダになります。また、要素間はTabキーで区切ります。


//table[envvat2][試しに書いてみた表]{
項目の名前	項目の名前2
----------------------------------
項目11	項目12
項目21	項目22
//}

(注)原因不明ですが、私の環境ではタブで区切ったところが、保存することで強制的に半角スペースに変換されてしまい、表がうまく生成されませんでした。(AtomエディタとVisual Stduio Codeで発生)

最終的に、「メモアプリ」など、別のアプリでタブ入力した後その部分をコピーし、Atomエディタで開いているテキストの該当箇所に貼り付けたら、タブのまま保存してくれました。

=== ソースコードの強調表示

//emlist{
  "//emlist{この中にソースコードを描きます}"
//}

//emlist{
  void Start(){

  }

  void Update(){

  }
}
//}

== epubの生成

プロジェクトの中で、以下のコマンドを実行します。

//emlist{
  $ review-epubmaker catalog.yml
//}

configuration file has no review_version property.

というwarningが出ますが、epubファイルが生成されます。

f:id:Takyu:20160605145045j:plain

4-2. Tips

(1) epubとpdfファイルについて

epubファイルであれば、Macの場合、標準で入っているiBooksというアプリで開くことができます。

ちなみに、review-pdfmakerというコマンドでpdfファイルも生成できます。

ただ、pdfの生成には色々とパッケージが必要で、試したのですがうまくいきませんでした。
(他の方のブログを見ても、うまくいかない場合も多そうな印象です)

一応epubでも雰囲気は確認できるのと、pdf化だけに時間を取れなかったので、今回は見送りました。機会があれば試してみようと思います。

(2) 画像貼り付け時の大きさ変更

4-1と同様に、Re:VIEW記法とepubの結果を置きました。

= 画像の埋め込み(サイズ変更)

"[scale=<数値:0~1>]"を追加すると、画像の大きさを変更できます。

@<b>{"//image[ファイル名][ブログのトップページ]"} の場合

//image[image1][ブログのトップページ]

@<b>{"//image[ファイル名][ブログのトップページ][scale=0.5]"} の場合

//image[image2][ブログのトップページ][scale=0.5]


ただ、違うかもしれませんが、このscaleは元の解像度と関係なく大きさを変えているようにも見えます。

執筆時は、epubやpdfにしながらいい感じの大きさを調整するのが良さそうです。

f:id:Takyu:20160606034318j:plain



5. 終わりに

Re:VIEWの特徴は、epub以外にも色々なフォーマットに変換できることです。

私は出版業界で何が使われているかは全然知らないのですが、Re:VIEWは汎用性が高そうなので広く使われていそうですね。

なので知っておくと、UNIBOOK以外に執筆することがあっても役に立ちそうです。

Windows10 Mobile、UWPに関する基本情報と、Unityアプリの実機転送方法

Unity UWP

前回に引き続き、今度はWindows 10 Mobileの場合を調べました。

前回はこちらです。

magicbullet.hatenablog.jp

======================

目次

1. Windows 10 Mobile とUWPについて

1-1. Windows 10

1-2. Windows 10 Mobile

1-3. UWP

2. Unityで作ったアプリをWindows 10 Mobileに実機転送する方法

2-1. Unityを5.2以上にする

2-2. Visual Studio をインストール

2-3. Unityでビルドして、Visual Studioのプロジェクトを生成する

2-4. Windows 10 Mobileを開発者モードに変更する

2-5. Visual Studioを開いてビルドする

3. Tips

3-1. Windows 10 Mobileでの動作結果

3-2. スクリーンロック時は実機転送が失敗する

3-3. 今回作ったUWPはWindows10 PCでも動かせる?

4. Windows 10 Mobile (KATARA 01)で動かしてみた感想

======================

1. Windows 10 Mobile とUWPについて

1-1. Windows 10

Windows 10 Mobileとは、2015年にMicrosoftより発表された、Windows Phoneの新しいOSです。

これまでの Windows PhoneからRuntime を刷新し、PCやその他Windows機器と同一のOSで動作します。

f:id:Takyu:20160601091842p:plain

関連:
Developing for the Windows 10 Device Platform | Windows Experience Blog


Microsoftでは、Windows10で動くデバイス一覧をWindows 10 Family と呼んでいます。

f:id:Takyu:20160601133212j:plain

関連:The next generation of Windows: Windows 10 | Windows Experience Blog

この図のように、PCだけでなく、スマートフォン、ゲーム機器、HoloLensなどの幅広い範囲のデバイスが全て同一のOSで動作します。

1-2. Windows 10 Mobile

Windows 10 Mobileは、Windows 10 OSを備えたモバイル端末です。2015年の11月頃にFREETELをはじめとした各社が対応端末を発売しました。

iOSAndroid搭載端末のような機能が付いているスマートフォンですが、それらにはない機能として、Continuum(コンティニュアム:読み方は人によって異なります)という機能があります。

Continuumとは、PC用ディスプレイを介することで、下記のように、スマートフォンをPCのように使える仕組みです。

f:id:Takyu:20150429110108j:plain

参考
www.gadgethelpline.com


ただし、Continuumが可能な端末は限られており、Snapdragonと呼ばれるSoc(CPUや各種機能をまとめたチップ)のうち、型番が600以上のSoCであれば対応しているようです。

www.qualcomm.co.jp

www.itmedia.co.jp



ちなみに、私の場合、Windows 10 Mobileのエントリーモデルである「KATANA01」を発売日当日に買って、ざっと調べたことがあります。

www.freetel.jp


f:id:Takyu:20160601140930j:plain

f:id:Takyu:20160601140940j:plain

KATANA01については、12,800円という低価格で、よくこれだけの端末が発売できた、と思っています。

しかし、残念ながら搭載しているSoCがSnapdragon210シリーズと、ローエンドモデルのため、どうしても動作が遅いことがありました。

Qualcomm Snapdragon 210 MSM8909 Specs and Reviews


個人的にはWindows 10 Mobileのタイルっぽい雰囲気とか操作の方法が好きだったので、性能良い機種が出た時にまた試したいと思っています。
(4インチ台が出たらいいなと思います)


1-3. UWP

UWPとは、Universal Windows Platform の略です。Windows 10 Family上で共通で動く仕組み、と考えるのが良いと思います。

そして、UWPの概念に沿ったアプリケーションをUWPアプリと呼びます。

UWPアプリであれば、下記の概念図のように同一アプリが異なるデバイスで動作します。

f:id:Takyu:20160601134335j:plain

[注意]

・デバイス別の画面解像度設定は必要です。

・「電話をかける」機能がMobile端末にしかないなど、特定のWindows 10 OS端末にしかない機能は、マニフェストファイルで制限をかける必要があります。


2. Unityで作ったアプリをWindows 10 Mobileに実機転送する方法


では、Unityで作ったアプリをWindows 10 Mobileで動かす方法を説明します。

2-1. Unityを5.2以上にする

公式ブログで言及されています。

blogs.unity3d.com

今回はUnity5.3.5f1で試しました。

Unity5.3以降では、ビルド対象のプラットフォーム別にインストールできます。

Windows 10 Mobile用にビルドするには、Windows Storeというプラットフォームでビルドしますが、必要なモジュールが入ってないと、「No Windows Store module loaded 」というメッセージがでます。

f:id:Takyu:20160601224552j:plain


Open download pageというボタンがあるのですが、ここをクリックしても、

f:id:Takyu:20160601224821j:plain

というhtmlページが開くだけで入手することはできません。

実際は、現在使っているUnityを同じバージョンのインストーラを再度入手し、インストール時にWindows Store用のモジュールを選択することで、追加インストールができます。

■Unityのインストーラの入手場所

[https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2:title=f:id:Takyu:20160601225210j:plain]

Windows Store用のモジュール選択画面

f:id:Takyu:20160601225600p:plain

この二つだけで10GB近くあるので、インストールには時間がかかります。


なお、バージョンが異なるモジュールをインストールすると、インストールは完了しても後でビルドに失敗するのでご注意ください。

2-2. Visual Studio をインストール

個人であれば、Visual Studio Community 2015が使えますので、ここからダウンロードしてインストールします。

なお、インストール時は、「カスタム」を選び、「Tool and Windwos 10 SDK」と「Windows 10 SDK」にチェックを入れておきます。

また、「プログラムと機能」から、インストール後に追加もできます

f:id:Takyu:20160601221937p:plain

ちなみに、インストールサイズは10GBを超えるので、時間がかかります。

2-3. Unityでビルドして、Visual Studioのプロジェクトを生成する

ここはそのままです。Unityで好きなものを作ります。

今回は、uGUIの標準部品を一通り並べたものを準備しました。

f:id:Takyu:20160601222206j:plain

次にこれをビルドします。Build Settingsを開き、PlatformをWindows Storeに変更し、SDKを「Windows 10」にします。

f:id:Takyu:20160601222438p:plain

それ以外は特に変えなくてもビルドできます。

適当なフォルダを作り、「Build」をクリックすると、指定したフォルダにVisual Studioのプロジェクトが生成されます。

f:id:Takyu:20160601224100j:plain

2-4. Windows 10 Moibleを開発者モードに変更する

Windows 10 Mobileの画面で説明します。

f:id:Takyu:20160601223448j:plain
ホーム画面から、ギアアイコンをタップします。


f:id:Takyu:20160601223512j:plain
設定画面が開くので、「更新とセキュリティ」をタップします。


f:id:Takyu:20160601223538j:plain
「開発者向け」をタップします。


f:id:Takyu:20160601223557j:plain
Windows ストアアプリ」から「開発者モード」に変更します。これで、Visual Studioでビルドしたアプリを実機に転送できるようになります。

2-5. Visual Studioを開いてビルドする

下記の Deploy Solutionを選択すると、ビルドして実機に転送してくれます。

f:id:Takyu:20160601230104p:plain


転送が完了すると、このように実機でアプリが実行されます。

f:id:Takyu:20160601230401j:plain

3. Tips

3-1. Windows 10 Mobileでの動作結果

こんな感じです。まだ課題がありそうですね。

・uGUIの標準部品は全て動作した


・Unityのビルド設定でauto rotationモードにすると縦長で固定され、画面の一部が欠ける

f:id:Takyu:20160601230822j:plain

・Unityのビルド設定でlandscape leftにすると、通常の横画面になる

f:id:Takyu:20160601230945j:plain

・Development Buildにチェックをつけると右下に表示が出るが、チェックを付けてなくても表示される(上記スクショ参照)

3-2. スクリーンロック時は実機転送が失敗する

Visual Studioのビルドから、Windows 10 Mobileへの実機転送までは少なくとも数分かかります。

その間にUSBケーブルで接続したWindows 10 Mobileにスクリーンロックがかかると、下記のような画面になり、実機転送が失敗します。

f:id:Takyu:20160601231237j:plain


また、ここのメッセージでは"Continue?"と書いてあるのですが、私の環境ではここで"Yes"を選択しても転送ができませんでした。

そこで、Windows 10 Mobileのロックがかからないようにしてから(不定期にタッチパネルに触れるか、スクリーンロック設定をOFFにする)、Deploy Solutionからやり直しました。

3-3. 今回作ったUWPはWindows10 PCでも動かせる?

ふと気になったので調べてみました。

UWPはappxという拡張子のパッケージですが、Deploy Solution後にVisual Studioのプロジェクトを探してもappxは見つけられませんでした。(探し方が悪い可能性もあります)

ただ、下記のような記事もあるので、少し手間がかかるのかもしれません。ここは時間があればまた調べてみたいと思います。

Windows 10 のユニバーサル Windows アプリをパッケージ化する

4. Windows 10 Mobile (KATARA 01)で動かしてみた感想


1-2で書いたように、Windows 10 Mobileについては発売初期から注目しており、自分なりにUWPアプリ開発を試したこともあります。

これまではUWP関連についてはブログに書いてませんですが、先週のde:code2016に参加して色々と意欲が高まり、今回書いてみました。

残念ながら、私の周辺では、de:codeに参加されていた方を除き、UWPについて知っている人がいない状況です。

とはいえ、これから広まっていく(はずの)HoloLensはUWP標準対応ですし、6/1には、Holographicの技術を3rd Partyに開放するという内容がMicrosoftから発表されました。

blogs.windows.com

これはVRとMRを融合させることにもなりうるので、UWPを見続けることはありかなと思っています。