MRが楽しい

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

hololensのタップ操作

昨日は一足先に音声認識を行いましたが、hololensではタップ操作も可能です。
という訳で、下記ブログで紹介されているチュートリアルの続きです。
・HOLOLENS ホログラムを動かす GESTURES
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-tutorial3/

修正を行い、アプリを実行すると、下記のようなタップ操作が可能となります。
f:id:bluebirdofoz:20170411235054j:plain
ボールに注視して空中でタップ操作を行うと…
f:id:bluebirdofoz:20170411235102j:plain
ボールが落ちました。

さて、今回のプロジェクトで重要なのは以下のコード。

・UnityEngine.VRで提供されるジェスチャーの監視クラス

GestureRecognizer recognizer;

・タップイベントが発生したとき、注目中のオブジェクトのOnSelect関数を実行するよう設定します。

recognizer.TappedEvent += (source, tapCount, ray) =>
{
    // Send an OnSelect message to the focused object and its ancestors.
    if (FocusedObject != null)
    {
        FocusedObject.SendMessageUpwards("OnSelect");
    }
};

チュートリアル#2で用いたポインタ方法を用いて、今度は注目中のオブジェクトを取得しています。

var headPosition = Camera.main.transform.position;
var gazeDirection = Camera.main.transform.forward;

RaycastHit hitInfo;
if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
{
    // If the raycast hit a hologram, use that as the focused object.
    FocusedObject = hitInfo.collider.gameObject;
}

・ボールに重力属性を与え、床に落ちる動作が起こるようにします

rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;


今回はGestureRecognizerを利用しています。
UnityEngine.VRというネームスペースからも分かる通り、これはVR向けに提供されるインタフェースですね。
だんだんとMRらしくなってきました。

HoloLensの音声認識(もといUnityの音声認識)

続けてもう一つ、別の事をしてみました。
あまり飛ばし過ぎると後が続くか不安ですが、モチベーションのあるうちに進めちゃいます。

 

次はお遊び枠でこっちを実施しました。
・【HoloLens開発】ユニティちゃんとHoloLensで戯れる - 音声認識編 -
 http://bril-tech.blogspot.jp/2016/10/hololens-speechrecognizer.html

 

試して気付きましたが、以下のチュートリアル#4の技術を含みます。当然か。
・HOLOLENS 音声認識での操作 VOICE
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-tutorial4/


HoloToolkit-Unityはここだけだと利点が薄そうなので保留しました。
他の技術で必要が出てきたらまた使ってみます。
・HoloToolkit-Unity を使う
 http://www.naturalsoftware.jp/entry/2016/06/22/170925

 


さてさて、サンプルコードはあるので特に問題なく音声認識できました。

f:id:bluebirdofoz:20170411004245j:plain

「Next」と拙い英語ながら話してみると…。

f:id:bluebirdofoz:20170411004319j:plain

ポーズが変わりました。

 

今回のアプリではHOLOGRAPHIC REMOTINGを使うと音声認識ができませんでした。
HOLOGRAPHIC REMOTINGではカメラのトラッキングはフィードバックされるけど、音声はフィードバックされない?
この件についてはより複雑なアプリに挑むときに解決方法がないか調べることにします。

 

さて、今回のプロジェクトで重要なのは以下のコード。

・KeywordRecognizer keywordRecognizer = null;
 - UnityEngine.Windowsで提供される音声認識クラス
・Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();
 - キーワード登録用辞書クラス

・keywords.Add("Next", () => { this.BroadcastMessage("OnNext"); });
 - 辞書にキーワードとキーワードに対応する処理を登録
  ("Next"のキーワードで"OnNext"関数を呼び出し)
・keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
 - 辞書をKeywordRecognizerに登録

 

音声認識に必要な設定は以上。
後はKeywordRecognizerをスタートさせれば音声から辞書のキーワードを解析し、キーワードに合った処理を実行してくれる。


Unityって音声認識まで提供してくれているんですね。(厳密にはWindowsのライブラリへのアクセス?)
音声認識となるとhololens依存の実装が必要かなぁと構えていましたが、これまた不要でした。
確かに今時のゲームは音声認識のものもあるから既に提供されていても不思議はないのか。

 

今から10年ほど前、HSPという言語でゲームを作って以来…ここまでゲーム作成ツールが進化していたとは知りませんでした。
浦島太郎にでもなった気分です。
というか、もうゲーム作成ツールなんて括りじゃない。普通に優れた3Dアプリの開発環境です。

 

以下のページを見るに、日本語も認識可能な模様。うへぇ。
・VRアプリで使える音声コマンドを簡単に実装してみる
 http://qiita.com/decchi/items/c9ae04b049ace49f91bc

 

hololens以上にUnityの凄さを感じた一件でした。

HoloLensの視線の可視化

今日は引き続き、下記ブログで紹介されているチュートリアルの続きを行いました。
・HOLOLENS 視線の可視化 GAZE
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-tutorial2/

 

説明の通り進めると以下のように視点の位置に赤いリングオブジェクトが表示されるようになりました。

f:id:bluebirdofoz:20170410212040j:plain


今回のプロジェクトで重要そうなのは以下のコード?

・var headPosition = Camera.main.transform.position;
 現在のカメラポジションを取得(=ヘッドポジション)

・var gazeDirection = Camera.main.transform.forward;
 現在のカメラの方向を取得(=視線の向き)

・Physics.Raycast(headPosition, gazeDirection, out hitInfo)
 ヘッドポジションと視線の向きからオブジェクトとの衝突判定を取得

 

hololensとして特別なことをやっている訳ではなく、単にカメラの位置と方向を調べているだけ。
Unityで作られたゲームであればメインカメラのオブジェクトを自身として、ゲームの世界にそのまま没入できるということです。


逆に言えば、まだまだVRのゲームの背景を透過してMRっぽく動かしているだけの段階。

MRの活用に向けて少しずつ勉強です。


すぐ終わったので、ついでに以下を試してみました。
・HOLOLENS UNITY上でビルドを行える便利ツール HOLOGRAPHIC REMOTING
 https://azure-recipe.kc-cloud.jp/2016/12/holographic_remoting/

 

こちらも特に難しい点はなく、実行に成功。

f:id:bluebirdofoz:20170410212227j:plain

少し分かりづらいですが、先ほどのアプリが背景のUnityから直接実行できています。

 

これはとても便利。

開発環境の構築やビルドの作業など、開発者にとって省きたい手間を徹底的に省くことができます。
最新の技術でありながら、ここまで開発者に優しい環境が整っているとは。


正直、プログラミング以前の段階でかなり苦戦するのではと不安がありましたが、hololensでは全くの杞憂だったようです。

我が家にユニティちゃんがやってきた?

以下のチュートリアルプロジェクトを少し修正して遊んでみました。
・HOLOLENS 初めての開発 “HOLO”WORLD
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-tutorial1/

 

折り紙なんて表示させても面白くないよねってことで3Dキャラの表示に挑戦。
・【HoloLens開発】ユニティちゃんとHololensで戯れる - 表示編 -
 http://bril-tech.blogspot.jp/2016/09/hololenshololens.html


といっても“HOLO”WORLDのプロジェクトを作成済みなら3Dモデルを差し替えるだけ。

f:id:bluebirdofoz:20170409235358j:plain

折り紙のモデルを…ユニティちゃんに差し替え。

f:id:bluebirdofoz:20170409235508j:plain


アプリを玄関で実行するとこの通り。うーん、こういうお試しの方がモチベーションあがるかも。

f:id:bluebirdofoz:20170409235521j:plain

HoloLensの開発環境構築

引き続き、以下のページを参考にhololensアプリの開発環境構築を実施してました。

・HOLOLENS開発に必要なシステム要件と確認方法
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-development/
・HOLOLENS UNITYとVISUAL STUDIOのインストール
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-install/
・HOLOLENS EMULATORとVUFORIAのインストール
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-install2/

 

こちらの記事通り進めただけなので私から説明できることは何もないのですが、一点引っかかった。

・必要スペック
 [1] Windows 10 Pro

 

Hyper-Vという機能を利用するんですが、homeエディションでは提供されていなかった。
(厳密に言うとエミュレータを利用しないなら不要だけど)
急遽、以下を参考にOSをアップグレード。
Windows 10 Home から Windows 10 Pro にアップグレードする方法
 https://sway.com/-QIP_I34Z1xM9QKg

 

開発環境を準備するのに追加で1万かかることに。
hololens本体のお値段含め、個人で試してみようとするには中々お高い買い物です。
趣味の一つと考えれば安い方かもしれませんが。


そのまま続けて以下のチュートリアルプロジェクトを実行してみました。
・HOLOLENS 初めての開発 “HOLO”WORLD
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-tutorial1/

 

Unityのバージョンがあがっていたりしますが、説明の通り実施すれば簡単にビルド実行できました。

f:id:bluebirdofoz:20170409232335j:plain

開発環境の構築がここまでスムーズに行くことに驚きです。
hololens専用アプリではなく、UWPアプリという共通プラットフォームで開発できる利点と言えます。
・UWPアプリとは? ― 全(=ユニバーサル)Windowsプラットフォーム向けアプリの開発
 http://www.buildinsider.net/enterprise/uwpapp/01

 

何故[Clear Flags]の設定を変更するのかなどの説明はこちら。
・Hololensでの開発で知っておくと便利なこと
 http://qiita.com/miyaura/items/0f4cedb30101ab6a952b

 

要はプロジェクトはhololensに全く依存していない。なるほどなるほど。

HoloLensのペアリング

今回、実施したのはhololensとPCのペアリングです。
参考にしたのは以下のページです。

・HOLOLENSデバイスをPCとペアリングする方法
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-pairing/

 

説明にある通り、PCからwebブラウザを通して、動画静止画の撮影、シャットダウン、再起動、HoloLensの撮影した3Dビューの確認などの操作が行えます。

中でも個人的に便利と思ったのは、下記のLive preview機能です。

f:id:bluebirdofoz:20170406211950j:plain

今、自分が見ている映像がリアルタイムで表示できます。

これの何が良いってデモンストレーションの際、現在、自分が体験していることを簡単に誰かに見せられるってことです。

 

他にはSpatial mappingのSave機能。hololensで記録した空間マッピングデータがobjファイルで取得可能です。

f:id:bluebirdofoz:20170406212031j:plain


システム開発では折角のマッピングデータを色々利用したいと思うことは多いはず。
開発者視点でのこういう機能があったらいいなを既にここまで提供してくれている。

素晴らしい複合デバイスです。
hololensの機能をフル活用できるのであれば、現在のお値段でもこれは非常に安い買い物な気がしてきました。

 

上で紹介したこちらのページ、ざっと通して見てみました。

・ナレコムAzureレシピ
 https://azure-recipe.kc-cloud.jp/category/hololens/
hololensのセットアップから開発の方法まで順序よくまとまっていてとても便利です。
ひとまずはこのページに書かれたことを全て実施し、感覚をつかむことに終始しようと思います。

hololensの到着

我が家にhololensが到着しました。

f:id:bluebirdofoz:20170406184222j:plain


箱を受け取ったファーストインプレッションは「小さい」「軽い」でした。
hololensの重量は579g。
PCや多くのセンサが一体化したデバイスとは思えぬ軽さでした。

 

f:id:bluebirdofoz:20170409005509j:plain

hololensを起動すると、ジェスチャーや音声入力のガイダンスが始まりました。
センサの感度もよく、スムーズに各入力が行えました。

 

ただ実際使ってみて気になった点が2点。
・ディスプレイの視野が狭い
  映像が表示される範囲が限られており、顔を左右に振ると映像がすぐ見えなくなります。
  調べてみても同じ感想を抱いている人は多いようです。
・キーボード入力が面倒
  初期のままだと視界に表示されるキーボードを視線で追い、クリックする入力方法となります。
  PCのキーボード操作や携帯のフリック操作と比較すると非常に使い辛いです。
  とりあえずBluetoothのキーボードを利用しようかと思います。

 

さて、ここから色々お試し開始です。