気ままにI/O

プログラムとかものづくりのインプット・アウトプットのためのブログ。

Hacker Tackle 2016でVR/AR/MRの話をしてきました

Hacker Tackle 2016 で登壇してきました。

VR元年、ポケモンGOのAR、MRデバイスのHoloLensなど、今年はVR/AR/MRという言葉を多く耳にします。

違いをしっかり理解できてないところもあったので、自分なりにそれぞれのポイントだと思ったところを

VR → 「まるで現実」

AR → 「現実を理解する」

MR → 「AR⇔AV、VRの現実感」

というキーワードでまとめて共有させてもらいました。

MRの中で紹介したAugmented Virtualityという概念はあまり聞くことがないですが、ARとAVを含むのがMRと考えるのが今のところ理解しやすい気がしています。

また、現実→AR→AV→バーチャルと徐々に世界が変化していくようなデモをUnityとVuforiaで作ってみたので、後半はその実装について話しました。

 

 

 

www.youtube.com

 

www.youtube.com

 

稀に見る緊張っぷりでしたが、なんとか無事に終わってよかったです。

他の登壇者の方々のお話も面白く、特にGoogle機械学習の話はVR/AR/MRコンテンツを作る中で活かせそうだったので、さっそく大八耐(9/24~25、テーマなしの自由なハッカソン)で使ってみたいと考えてます。

 

貴重な機会を頂いた運営の皆様、聴きに来てくださった参加者の皆様、ありがとうございました!

【HoloLens】Unityでスタートメニューみたいな追従するUIを作る

HoloLensの機能を確認するためのUnityプロジェクトを作り始めました。

github.com

 

いろいろな機能を確認できるように、

  • Launcherシーンを用意して確認できる項目をリスト表示
  • リストから項目を選択して各機能のシーンに遷移

という構成にしました。

 

こんなかんじです。

youtu.be

 

エミュレーターなので分かりにくいですが、HoloLensのスタートメニューのような自分に追従するUI表示にしています。

UnityのUIシステムとHoloToolkitの機能を利用してこの追従UIを作ったので、その実装方法を書きます。

通常のHoloLens開発で必要な項目については書いてないところもあるので、そのあたりはHoloLensのドキュメントなどご覧いただければと思います。

まだいろいろ試行錯誤している段階なので最適な方法ではないかもしれませんが、とりあえず今のところこんなかんじという内容です。

 

カメラ設定

エディタ上のシーンビュー・ゲームビューでレイアウトを調整すると、ビルドして実行した際にUIのサイズが全然違うように表示されることがあります。

これは、実行時にUnityが自動でCameraのField of Viewの値を更新しているのが原因のようです。

エディタ上とビルド後との見た目を合わせるために、Field of VIewの値をビルド後と同様の値に設定します。

ここでは17.9898にしていますが、もしかしたらエミュレーターや実機の設定によって値は異なるかもしれません。実際の値をテスト表示してみるのが確実だと思います。

 

f:id:k_nagamine:20160814160248p:plain

 

キャンバス設定

UIをワールド空間上に配置するため、CanvasのRender ModeをWorld Spaceに設定し、Event CameraにMain Cameraを設定します。

 

Rect TransformのScaleを0.001にしているのは、後述するUIオブジェクトのレイアウトを組みやすくするためです。

Unityの座標の単位はメートルなので、キャンバスのスケールを1000分の1にしておくことで、UIオブジェクトをミリメートル単位で設定するようにしています。

 

Canvas Scalerはピクセルの密度を設定します。

テキストがボケて表示される場合はDynamic Pixels Per Unitの値を調整することで改善するようです。ここでは10に設定しています。

 

f:id:k_nagamine:20160814160431p:plain

 

 

EventSystem設定

EventSystemオブジェクトに HoloLens Input Moduleを追加します。

これでAirTap等のジェスチャーでUIオブジェクトを操作できるようになります。

 

f:id:k_nagamine:20160814160748p:plain

 

 

UIオブジェクト配置

キャンバスの子としてUIオブジェクトを配置していきます。

キャンバスのスケールを0.001に設定したので、UIオブジェクトのRecTransform設定の単位はミリメートルになります。

ここでは追従するウィンドウとしてLauncherWindowオブジェクトを作成しています。

Pos Z=1000, Width=200, Height=250となっているので、1m先に幅20cm高さ25cmの板が浮いているようなイメージです。

あとは通常のUIのようにテキストやボタンなどで好きなレイアウトを組んでいきます。

 

f:id:k_nagamine:20160814160935p:plain

 

 

Tagalongコンポーネント

ウィンドウとなるオブジェクトにTagalongを追加します。

Tagalongを追加すると自動でBox ColliderとInterpolatorも追加されます。

TagalongはHoloToolkitに含まれるコンポーネントで、画面内にBoxColliderが収まっているかどうかを監視して、画面内に留まるよう位置を更新します。

 

いろいろ設定項目がありますが、ここでは画像のように設定しています。

Mimimum Horizontal/Vertical Overlapは、追従動作開始のための画面とコライダーとが重なり割合の閾値です。0.5に設定されている場合、コライダーが半分以上画面外に出たときに追従動作が始まります。

Target Horizon/Vertical Overlapは、追従動作の目標となる画面とコライダーとの重なり割合の値です。1に設定されている場合、コライダー全体が画面内に収まるように追従動作が発生します。

 

 

f:id:k_nagamine:20160814161104p:plain

 

 

Billboardコンポーネント

ウィンドウとなるオブジェクトにBillboardを追加します。

これもHoloToolkitに含まれるコンポーネントです。

Pivot Axisで指定した軸について、常にカメラの方向を向くようにRotationが更新されます。

今回はX軸もY軸も常にこちらに向いてほしいので、Freeに設定しています。

 

f:id:k_nagamine:20160814161145p:plain

 

 

できあがり

ビルドして実行してみて、うまく追従されていればOKです。

追従動作が気に入らない場合は、Tagalongの設定をいろいろいじってみると気持ち良くなるかもしれません。

なんとなくレイアウトが初期のFFみたいになって、なかなか気に入っています。

これでようやく機能確認の準備ができたので、次からは機能の実装について書いていこうと思います。

 

f:id:k_nagamine:20160814164450p:plain

 

HoloLens開発でHoloToolkit-Unityを導入&更新しやすくする構成

HoloLensに興味があります。

もう少ししたらきっとほとんどの人がHoloLens的なデバイスを身につけて生活することになると思っています。今のスマホのように。

開発者向けとして北米ではリリースされていて、エミュレータもあるので開発環境を試してみることができます。

今のうちから勉強しようと思って、HoloLensの機能を確認するためのUnityのプロジェクトを作りました。いろいろ試してみて追加していくつもりです。

github.com

 

HoloToolkit-UnityはMicrosoftが公開しているHoloLensをUnityで扱いやすくするためのライブラリ的なものです。

導入する際は、クローンするかダウンロードして必要なファイルを自分のプロジェクトに持ってくる必要があるんですが、今後の更新や修正がやりづらそうだなーという印象だったので、簡単に導入&更新できるよう、以下のような構成にしてみました。 

  1. HoloToolkitはサブモジュールとしてRoot直下に配置する
  2. HoloToolkitをUnityPackageとしてエクスポートするバッチを作成(Tools/exportHoloToolkit.bat)
  3. Unity上から2.のバッチを実行&インポートするためのエディタスクリプトを実装(Assets/Scripts/Editor/HoloToolkitImporter.cs)

これで、Unityエディタ上のメニューからHoloToolkitをインポートできるようになりました。

 

https://raw.githubusercontent.com/wiki/KzoNag/HoloLens-Unity-Sampler/image/screenshot/ss_importholotoolkit.png

 

HoloToolkitに更新があったときは、サブモジュールを最新にしてから再度インポートをすれば変更が反映されるはずです。(未確認ですが。。。)

あと、HoloToolkitは自分でも機能追加や修正するかもしれないのでフォークしたリポジトリを追加しています。

 

インポートのところはUnityPackageにせずに普通にコピーでも大丈夫かもしれませんが、Unityでは直接ファイル操作するとmetaファイル関連で問題が起こりがちです。

なので、HoloToolkitプロジェクトからいったんパッケージをエクスポート、それをメインプロジェクトからインポート、という段階を踏むようにしています。 

Unityはコマンドで制御できたり、エディタを拡張するスクリプトを書くこともできるので、工夫するといろいろ自動化できて楽しいですね。

 

今回はHoloLensには直接関係ない準備の話でした。

いろんな機能をさわってみてまた記録に残せたらなと思います。

VRハッカソン@福岡を開催&参加しました

だいぶ時間が経ってしまったけど6/18~19でVRハッカソンというイベントを開催&参加しました。

僕は"運営"兼"参加者"だったので、運営面と開発面で思ったことを簡単に書き残しておきます。

他にも記事を書いてくれている方がいるので詳細はそちらをご覧ください。

 

cube096.com

inter-arteq.com

 

運営面

今回のハッカソンは、日本全国で同日に行われた All Japan VR Hackathon の福岡会場として開催しました。

東京では200人くらいが参加するとても大きなイベントだったのですが、福岡会場はなんと、運営メンバーの自宅を会場としてお借りしました。

前述した2つ目の記事が家主レポートです。「参加してきました」って言ってますけど自分の家ですね。

はじめから家でやるつもりではなかったのですが、気づいてみたら家でやることになってました。(土日夜通し開放できる会場探すのはハードル高いですね)

 

文字どおりアットホームなハッカソンになったわけですが、個人的には、これはこれですごく楽しめました。

  • 人数が多くならない(できない)ので運営しながら開発できた
  • 夜にピザとってみんなで食べたりして交流しやすい
  • 寝やすい

このあたりが理由です。

運営が大変で開発に参加できないのは悲しいので、運営するならこれくらいの規模がいいなーと思いました。

ただ、参加者にとっては知らない人の家が会場っていうのはなかなかハードルが高いと思うので、今回15人弱も参加してもらえてよかったです。

特に今回はじめましてでご参加いただいた皆さん、本当にありがとうございました。

理解ある参加者ばかりで運営としては何も困ることがなかったです。

 

開発面

自分が参加したチームはViveを使ったゲームを作りました。

タイトルは

「高めの鼻」

ざっくり言うと、天狗になって鼻を伸ばして飛ばして敵を倒すゲームです。

 

たしか、アイデア出しのときにメンバーが、

「(実世界で)視野の端っこに自分の鼻がちょっと見えてて邪魔に思うことがある」

って言い出したところから、

→鼻を伸ばそう

→テーマが「日本らしさ」なので天狗にしよう

→メンバーにミサイルのアセットの作者さんがいたのでそれで鼻を飛ばして戦おう

途中で結構悩んだとこもあったんですが大体こんなかんじだったかと。

 

わりとノリでワイワイ考えたアイデアではあるんですが、鼻を伸ばすという着眼点は面白いと思っています。

というのも、VR酔いには鼻が重要だという話があるようで、

VR酔いをなくすための冴えた方法は「鼻を描き込むこと」|WIRED.jp

この鼻が動的に伸び縮みした場合に、

  • 鼻の高さが酔いにくさに関わるのか
  • しっくりくる鼻の高さはあるのか
  • 高い鼻を自分の鼻だと認識する(できる?)のか
  • 鼻が根元から切れて飛んでいったらどう感じるのか

など、考えられることがたくさんあるなーと。

 

と、いろいろ書きましたが、残念ながら思い描いていたところまで作れませんでした。

  • はじめにシーン分けなどワークフローをもっと固めておくべきだった
  • VRのUIが難しかった

このへんが原因かなーと思っています。

特にUIは、CanvasのRenderModeを"Screen Space - Camera"で作っていたのですが、UnityエディタのGameビューで見た画面と、エディタでの再生時にViveで見た画面と、ビルドしてViveで見た画面でレイアウトが異なっていて、ビルドしてみたらUIが見えない!というかんじで調整にすごく時間がかかりました。

設定によって解消できるのかもしれませんが、情報を見つけきれませんでした。。

素直にWrold Spaceでやるべきものなんでしょうか。。

 

VR開発に対する知見がほぼない状態から開発スタートだったので準備不足でした。

次回はもっと準備してから臨もうと思います。

 

というわけで、開発的には悔しい部分もありましたが、参加者の皆さんが(きっと)楽しんでくれて、無事に終わったので良かったです!

 

機材提供していただいた主催者の皆さん、参加していただいた皆さん、差し入れを持ってきてくれた皆さん、どうもありがとうございました!

今後もまた何かしらやるときはよろしくお願いします!

 

全体のJapan VR Hackathonのコンテストの結果が今日で全部発表になるようなので、そちらも見てみるとおもしろいものがたくさんあると思います。

twitter.com

 

おまけ

ハッカソンではいろんな人が差し入れを持ってきてくれたりするんですが、今回は参加者の方が「ソースコ」という調味料を持ってきてくれました。

 

ピザにかけるとそれはもう当たり前のように美味しいんですが、みんなハマって打ち上げのときもいろいろかけてました。個人的には焼き鳥がすごく美味しかったです。

(コーラに入れてる人がいましたが、さすがにむせてました。)