MRが楽しい

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

HoloLensの開発環境構築手順 Bandicam編

動画サイトで人気のカテゴリに「ゲーム実況」というのがあります。
果たして VR ゲームでも可能なのか調べてみることにしました。まずは録画ツールです。
Bandicam のインストール手順を記録しておきます。

Bandicam のダウンロードページは以下です。
www.bandicam.jp

因みに以下のサイトを参考に Bandicam を選択しました。
www18.atwiki.jp
aviutl.info
Bandicam の特徴としては非常に多機能ですが、無償版の場合、録画時間が最長10分という制限があります。


さてダウンロードページの「ダウンロード(無料)」をクリックしてダウンロードページを開きます。
f:id:bluebirdofoz:20170929034717j:plain

ダウンロードページの「Bandicamダウンロード」を選択すると、インストーラを取得できます。
f:id:bluebirdofoz:20170929034730j:plain

ダウンロードしたbdcamsetup.exeを実行します。
初めに利用言語を選択します。
f:id:bluebirdofoz:20170929034746j:plain

インストーラが起動するので「次へ」をクリックします。
f:id:bluebirdofoz:20170929034759j:plain

ライセンス規約が表示されるので「同意する」をクリックします。
f:id:bluebirdofoz:20170929034807j:plain

必要なコンポーネントを選択し「次へ」を選択します。そのままでも問題ありません。
f:id:bluebirdofoz:20170929034814j:plain

インストール先を設定し「インストール」をクリックすると、インストールを開始します。
f:id:bluebirdofoz:20170929034821j:plain

以上でインストールは完了です。
f:id:bluebirdofoz:20170929034830j:plain

VR ゲームを起動して Bandicam を起動すると、以下のようにゲーム画面を認識するので録画できます。
f:id:bluebirdofoz:20170929034837j:plain

ただし VR 機器の映像を直接取得している訳ではなく、デスクトップ上に表示されている画面をキャプチャしているだけです。
以前紹介した GoogleEarth や Bigscreen のようなデスクトップに映像が表示されないアプリはキャプチャできません。
ほとんどのゲーム系アプリはデスクトップ上にも映像が表示されるので、あまり困ることはないでしょう。

hololens用DevicePortalの機能についてまとめる(Logging[ログ])

DevicePortal調査枠です。
bluebirdofoz.hatenablog.com

hololens用DevicePortalの「Logging(ログ)」ページについてまとめます。
f:id:bluebirdofoz:20170928021323j:plain

HoloLens上でリアルタイムイベントトレース (ETW)を管理します。
表示されている情報は以下の通りです。

1.[Hide Providers] (プロバイダの非表示)
  以下の4つのセクションを非表示にします。
  ・[Registered providers]
  ・[Custom providers]
  ・[Enabled providers]
  ・[Providers history]

[Registered providers] (登録プロバイダ) セクション
2.[Providers] (プロバイダ)
  登録されたETWプロバイダを選択します。
3.[Trace Level] (トレースレベル)
  トレースレベルを選択します。
4.[Enable] (有効化)
  トレースを開始します。
  選択したプロバイダが[Enabled Providers]のドロップダウンに追加されます。

[Custom providers] (カスタムプロバイダ) セクション
5.[GUI]
  プロバイダをGUIDで指定します。
6.[Trace Level] (トレースレベル)
  トレースレベルを選択します。
7.[Enable] (有効化)
  トレースを開始します。
  選択したプロバイダが[Enabled Providers]のドロップダウンに追加されます。

[Enabled providers] (有効なプロバイダ) セクション
8.[Providers List] (有効なプロバイダ一覧)
  有効なプロバイダを一覧表示します。
9.[Disable] (無効化)
  ドロップダウンから選択したプロバイダのトレースを停止します。
10.[Stop All] (全て停止)
  すべてのトレースを停止します。

[Providers history] (プロバイダの履歴) セクション
11.[Providers] (プロバイダ)
  現在のセッションで有効になったETWプロバイダを表示します。
12.[Trace Level] (トレースレベル)
  トレースレベルを選択します。
13.[Enable] (有効化)
  ドロップダウンから選択したプロバイダのトレースを開始します。
14.[Clear] (クリア)
  プロバイダの一覧をクリアします。


イベントトレースの情報は以下の通りです。
f:id:bluebirdofoz:20170928021351j:plain

[Filters] (ファイルタ) セクション
1.[ID]
  フィルタのIDを指定します。
2.[テキスト]
  フィルタのテキストを指定します。
3.[Add] (追加)
  フィルタを追加します。

[Events] (イベント) セクション
4.[Clear] (クリア)
  表示中のETWイベントをクリアします。
5.[Save to file] (ファイルに保存)
  現在表示中のETWイベントをPCにCSVファイルでダウンロードできます。
6.[TIMESTAMP (LOCAL TIME)] (タイムスタンプ)
  イベントが発生した時刻を表示します。
7.[PROVIDER] (プロバイダ)
  イベントのプロバイダ種別を表示します。
8.[ID]
  イベントのIDを表示します。
9.[TASK] (タスク)
  イベントのタスクのカテゴリを表示します。
10.[KEYWORD] (キーワード)
  イベントのキーワードを表示します。
  キーワードはプロバイダによって設定されています。
11.[LEVEL] (レベル)
  イベントのレベル (重要度)を表示します。
12.[PAYLOAD] (ペイロード)
  イベントのペイロード (データ本体)を表示します。


参考ページ
・Using the Windows Device Portal
 https://developer.microsoft.com/en-us/windows/mixed-reality/using_the_windows_device_portal

hololens用DevicePortalの機能についてまとめる(File Explorer[ファイルエクスプローラ])

DevicePortal調査枠です。
bluebirdofoz.hatenablog.com

hololens用DevicePortalの「File Explorer(ファイルエクスプローラ)」ページについてまとめます。

f:id:bluebirdofoz:20170927003621j:plain
ファイルを参照、アップロード、およびダウンロードできます。
表示されている情報は以下の通りです。

[Directory path] (ディレクトリパス) セクション
1.[Userfiles] (ディレクトリ階層)
  現在、表示中のディレクトリ階層が表示されます。
  クリックして階層を移動することが可能です。

[User folders] (フォルダ表示) セクション
2.[TYPE] (タイプ)
  ディレクトリまたはファイルの種別をアイコンで表示します。
3.[NAME] (名前)
  ディレクトリまたはファイルの名称を表示します。
  ディレクトリの場合、クリックすることでその階層に移動可能です。
4.[DATE CREATED] (データ作成日)
  ファイルの場合、ファイル作成日を表示します。
5.[FILE SIZE] (ファイルサイズ)
  ファイルの場合、ファイルサイズを表示します。
6.[SAVE] (保存)
  ファイルの場合、PCにファイルをダウンロードできます。
7.[DELETE] (削除)
  ファイルの場合、hololens上からファイルを削除できます。
8.[RENAME] (名前の変更)
  ディレクトリまたはファイルの名称を変更できます。

編集可能なディレクトリの場合、以下の表示となります。
f:id:bluebirdofoz:20170927003602j:plain

[Upload a file to this derectory] (アップロード) セクション
9.[ファイルを選択]
  hololensにアップロードするファイルをPCから選択できます。
10.[Upload] (アップロード)
  選択したファイルを現在表示中のディレクトリにアップロードできます。


参考ページ
・Using the Windows Device Portal
 https://developer.microsoft.com/en-us/windows/mixed-reality/using_the_windows_device_portal

hololens用DevicePortalの機能についてまとめる(App Crash Dumps[アプリのクラッシュダンプ])

DevicePortal調査枠です。
bluebirdofoz.hatenablog.com

hololens用DevicePortalの「App Crash Dumps (アプリのクラッシュダンプ)」ページについてまとめます。
f:id:bluebirdofoz:20170926011424j:plain

アプリケーションのクラッシュダンプを収集できます。
表示されている情報は以下の通りです。

[Crash data] (クラッシュデータ) セクション
1.[Remove] (リフレッシュ)
  アプリケーションの一覧を更新します。
2.[NAME] (アプリ名)
  アプリの名称を表示します。
3.[PACKAGE FULL NAME] (パッケージ名)
  アプリのパッケージ名を表示します。
4.[CRASH DUMPS] (クラッシュダンプ)
  アプリのクラッシュダンプを有効にします。


[Crash dump] (クラッシュダンプ) セクション
5.[DELETE] (削除)
  対象のクラッシュダンプデータをhololensから削除します。
6.[FILE NAME] (ファイル名)
  出力したクラッシュダンプファイルの名称を表示します。
  クリックするとPCにファイルをダウンロードできます。
7.[FILE SIZE(KB)] (ファイルサイズ)
  クラッシュダンプファイルのファイルサイズを表示します。
8.[TIMESTAMP] (タイムスタンプ)
  クラッシュダンプファイルの出力時刻を表示します。

出力したダンプファイルはVisualStudioで確認可能です。
f:id:bluebirdofoz:20170926011439j:plain
・ダンプ ファイルを使用したアプリのクラッシュとハングのデバッグ
 https://msdn.microsoft.com/ja-jp/library/d5zhxt22.aspx


参考ページ
・HoloLens 用 Device Portal
 https://docs.microsoft.com/ja-jp/windows/uwp/debug-test-perf/device-portal-hololens
・Using the Windows Device Portal
 https://developer.microsoft.com/en-us/windows/mixed-reality/using_the_windows_device_portal

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

ARとVRデバイスを色々調べてまとめる AR枠その4 iOS ARkit です。
bluebirdofoz.hatenablog.com

iOS ARkit

f:id:bluebirdofoz:20170925001839j:plain
・ARKit - Apple Developer
 https://developer.apple.com/arkit/

スペック

サポート環境

利用センサカラーカメラ、モーションセンサ
サポートOSiOS 11 or iOS 11 beta
サポートCPUApple A9以降のプロセッサ
・要注意!iOS 11でAR機能が使える対応機種は一部限定
 http://www.moguravr.com/ios-11-ar/

提供機能

・ポジショントラッキング
・平面検出
・ポイントクラウド(3次元の点座標情報)
・周囲の明るさ推定
・現実空間へのアタリ判定
・現実空間のスケール判定(メートル単位)
・カメラの画像取得

・ARKitができる事、できない事
 http://qiita.com/arumani/items/6efad65a17e2eafde5a1
・ARKitのまとめ(概要)
 https://mike-neko.github.io/blog/arkit1/
・Unity Ar Kit Plugin Samples
 http://unitylist.com/r/c2f/unity-ar-kit-plugin-samples
・実験版 ARKit を使ってみよう
 https://www.unrealengine.com/ja/blog/getting-started-with-ue4-and-arkit

アプリ開発環境

・Unity 5.6 以上 or Unreal Engine 4.17 以上
Xcode 9

Xcode
 https://itunes.apple.com/jp/app/xcode/id497799835?mt=12&ign-mpt=uo%3D4
・Unityで「ARKit」を使ってみよう
 https://creator.game.cyberagent.co.jp/?p=4158
Unreal Engineで「ARKit」を使ってみよう
 https://creator.game.cyberagent.co.jp/?p=4159

説明

Apple社がiOS 11向けに提供する純正のARフレームワークです。
筆者はiOS系の端末を持っていないため、未体験です。

iOSのアップデートのみで高精度ARを利用可能

iOSのARkitが優れている点はApple A9以降のプロセッサを持つ端末であれば、iOSのアップデートのみで利用可能という点です。
多くの人がARkitの利用のために、特別なハードウェアを購入する必要がありません。
iOSの公式ページでは「iOSは、今や世界最大の拡張現実のプラットフォームです」と謳っています。これは事実でしょう。
AR環境の導入が最も手軽なARフレームワークと言えます。
iOS 11 - Apple
 https://www.apple.com/jp/ios/ios-11/

ポイントクラウドやアタリ判定の検出

カラーカメラの画像解析による検出でありながらポイントクラウド(3次元の点座標情報)が取得可能です。
また延長上の技術としてか現実空間のアタリ判定の検出も機能として提供しています。
OSレベルでここまで高機能な画像処理を提供しているのは現状iOSのみではないでしょうか。
ただしジオメトリ(立体モデル)の作成までは提供していないようです。

深度センサがないための制約

ARkitは既存のカラーカメラとモーションセンサによって機能を提供しています。
これらのセンサには深度センサが含まれていません。
このため、Project Tango のような深度センサを前提とするフレームワークと比べ、空間の奥行き検出の性能で劣ります。
ポイントクラウドの検出にしてもカメラの角度を変えるなどの一手間が必要です。
動きの激しい物体または背景の検出は苦手とするところでしょう。

Unity ARKit Plugin

Unity Technology社が公式に提供しているオープンソースのARKitのUnity用プラグインが存在します。
開発者にとっては開発環境の充実も有難い点です。
・Unity-ARKit-Plugin
 https://bitbucket.org/Unity-Technologies/unity-arkit-plugin

EventTriggerを用いてマウスのクリックとhololensのタップを検出する

本日は hololens の技術調査枠です。
EventTrigger コンポーネントと HoloToolKit を用いてマウスのクリックと hololens のタップを検出します。
これを用いると簡易に、Unity上のデバッグでタップ時の動作を確認しつつ、開発を行うことができます。

手順について一からまとめたものを記録します。
新規プロジェクトを作成し、HoloToolKitをインポートします。
f:id:bluebirdofoz:20170924030426j:plain

インポートできました。いつもの hololens アプリの設定反映を行います。
今回の処理では Capability の追加設定は不要です。
f:id:bluebirdofoz:20170924030531j:plain

Hierarchy 上で右クリック UI -> EventSystem で EventSystem オブジェクトを作成します。
f:id:bluebirdofoz:20170924030543j:plain

EventSystem オブジェクトに以下のコンポーネントを追加でアタッチします。
・Holo Lens Input
・Holo Lens Input Module
f:id:bluebirdofoz:20170924030551j:plain

MainCamera に PhysicsRaycaster コンポーネントを追加します。
f:id:bluebirdofoz:20170924031816j:plain

環境の準備は完了です。
後はイベントをキャッチして動作するオブジェクトとスクリプトを何でも良いので作成します。
今回はタップ操作を行うと、サイズが大きくなる Sphere を作成します。

タップ対象となるオブジェクトとして Sphere オブジェクトを適当な位置に追加します。
f:id:bluebirdofoz:20170924030603j:plain

Sphere オブジェクトに EventTrigger コンポーネントをアタッチします。
f:id:bluebirdofoz:20170924030612j:plain

AddNewEventType をクリックして、PointerClick を選択します。
f:id:bluebirdofoz:20170924030623j:plain

PointerClick セクションが追加されるので、「+」ボタンをクリックします。
f:id:bluebirdofoz:20170924030633j:plain

以下のように PointerClick のイベントが追加されました。
f:id:bluebirdofoz:20170924030648j:plain

呼び出すイベント関数を設定する必要がありますので、TapEvent.cs スクリプトを作成します。
f:id:bluebirdofoz:20170924030715j:plain

TapEvent.cs スクリプトには以下のように、タップ時に呼び出されるイベント関数を定義します。
・TapEvent.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TapEvent : MonoBehaviour {
  public void OnClickTapEvent()
  {
    // アタッチされているオブジェクトのサイズを 0.1f 拡大する
    this.transform.localScale = this.transform.localScale + new Vector3(0.1f, 0.1f, 0.1f);
    // クリックログ
    Debug.Log("OnClick");
  } 
}

作成した TapEvent スクリプトを Sphere オブジェクトにアタッチします。
f:id:bluebirdofoz:20170924030728j:plain

登録したイベント関数を EventTrigger に設定します。
まずオブジェクト欄横の「◎」ボタンをクリックして SelectObject ウィンドウを表示します。
プロジェクト内のオブジェクト一覧が表示されるので、TapEvent スクリプトをアタッチした Sphere オブジェクトを設定します。
f:id:bluebirdofoz:20170924030738j:plain

するとファンクション欄の選択肢に、Sqhere オブジェクトにアタッチしたコンポーネント一覧が表示されます。
TapEvent スクリプトを選ぶと、作成した OnClickTapEvent 関数が表示されますので、これを選択します。
f:id:bluebirdofoz:20170924030747j:plain

以上でオブジェクトとイベントの設定も完了です。
Unity での再生ボタンをクリックしてプロジェクトを実行してみます。
f:id:bluebirdofoz:20170924031511j:plain

ゲームビュー内で Sphere オブジェクトをクリックすると……。
f:id:bluebirdofoz:20170924030821j:plain
TapEvent.OnClickTapEvent 関数が呼び出され、Sphere オブジェクトが拡大されてログ出力が行われました。

さて、次は hololens 上での確認です。
そのまま File -> BuildSettings から BuildSettings ウィンドウを開いてビルドします。
f:id:bluebirdofoz:20170924030831j:plain

hololens にインストールして実行すると、Sphere オブジェクトが表示されます。
f:id:bluebirdofoz:20170924030843j:plain

Sphere オブジェクトを視界中央に捉えた状態で、タップ動作を行うと……。
f:id:bluebirdofoz:20170924030853j:plain
イベント関数が呼び出され、Sphere オブジェクトが拡大されました。成功です。

この手法を用いると、hololens 上でのタップ操作時のデバッグが Unity 上で簡易に行えます。
どんなアプリでも利用する操作なのでまとめておきます。

因みに、このプロジェクトのままだと hololens アプリ利用時には何処にカーソルしているかが分かり辛いです。
カーソル表示などと組み合わせると、より実用性が増すと思います。
bluebirdofoz.hatenablog.com
(今回の場合、衝突判定先の Sphere オブジェクトのレイヤは UI ではないので注意)

hololens用DevicePortalの機能についてまとめる(Apps[アプリ])

DevicePortal調査枠です。
bluebirdofoz.hatenablog.com

hololens用DevicePortalの「Apps (アプリ)」ページについてまとめます。
f:id:bluebirdofoz:20170923000315j:plain

HoloLensにインストールされているアプリを管理します。
表示されている情報は以下の通りです。

[Installed apps] (インストールされているアプリ) セクション
1.[Remove] (削除)
  選択したアプリケーションを削除します。
2.[Start] (開始)
  選択したアプリケーションを開始します。

[Running apps] (実行中のアプリ) セクション
3.[PID] (プロセスID)
  アプリのプロセスIDを表示します。
4.[NAME] (アプリ名)
  アプリの名称を表示します。
5.[VIERSION] (バージョン番号)
  アプリのバージョン番号を表示します。
6.[PACKAGE FULL NAME](パッケージ名)
  アプリのパッケージ名を表示します。
7.[USER NAME](ユーザ名)
  アプリを実行しているアカウント名を表示します。

[Install apps] (アプリのインストール) セクション
8.[App package] (アプリパッケージ)
  hololensにインストールするアプリパッケージをPCから選択できます。
9.[Dependency](依存関係)
  インストールするアプリケーションの依存関係ファイルをPCから選択できます
10.[Go](実行)
  選択したアプリケーションパッケージと依存関係ファイルをhololensに展開します。
11.[Reset](リセット)
  選択したフィールドをクリアします。

本ページでのアプリインストール方法について以下にまとめています。
bluebirdofoz.hatenablog.com


参考ページ
・Using the Windows Device Portal
 https://developer.microsoft.com/en-us/windows/mixed-reality/using_the_windows_device_portal