MRが楽しい

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

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

ARとVRデバイスを色々調べてまとめる 周辺機器枠その3 Matterport です。

Matterport

f:id:bluebirdofoz:20170511014509j:plain
matterport.com

スペック

カメラスペック

センサRGBカメラ×3、赤外線センサ×3
電源8~10時間
重量2.5kg

参考:matterport
   https://matterport.com
(どちらかというと3Dスキャンのサービスが凄いのでカメラ自体のスペックには余り意味なし)

価格

Matterport Pro 3Dcamera$3,600(約41万円)
ベーシックプラン月額 $49(約5900円)

説明

Matterport社がカメラの販売とサービス提供を行う3Dスキャンサービスです。

現実世界の空間を写真を使ってVR空間に再現

Matterport社が拘っているのは「現実世界の空間をVR空間に再現」ということのようです。
・カメラで撮るだけで行える3Dモデリング「Matterport」
 http://svs100.com/matterport/

公式ページでサンプルが公開されています。こんな3Dスキャンサービスが既にあった事に驚きです。
スペック等の詳細な情報は得られませんでしたが、備忘録として残しておきたくて思わず記事にしてしまいました。
・3Dギャラリー
 https://matterport.com/3d-space/lodge-grants-trail/

Googleストリートビューで利用

Googleも目を付けたようでパートナーシップを結んだようです。
jp.techcrunch.com

利用方法とフォーマット

以下に実際サービスを利用してみた事例をまとめた記事がありました。
現状、最も詳細かつ具体的な情報を得られる日本語ページだと思われます。
vr-lab.voyagegroup.com

これが手軽に利用できる時代が来ると、世の中は一体どうなるんでしょうか。
3Dモデルの精度が上がれば、もう建物系の観光地巡りなんかはVRデバイスとこれだけで十分なんじゃないかなぁ。
実家を撮影して、SNSと組み合わせれば仮想空間上で帰省して家族に会えたりとか。

ユニティちゃんトゥーンシェーダー2.0を試してみる

本日UnityChanページに立ち寄ると、「ユニティちゃんトゥーンシェーダー2.0」ver:2.0.0リリースの記事がありました。
・ユニティちゃんトゥーンシェーダー2.0
 http://unity-chan.com/download/releaseNote.php?id=UTS2_0

リリース直後です。トゥーンシェーダには興味があったので試してみることにしました。
ダウンロードを行うと、プロジェクトの形で取得できるのでサンプルシーンを開いてみます。
f:id:bluebirdofoz:20170510021753j:plain
絵的な塗りの3D世界が映し出されています。

さて、これってそのままhololensに持ってこれるのか?早速試してみます。
まずサンプルプロジェクトだとカメラが自動移動するスクリプトが組まれているのでCenterオブジェクトを無効化します。
f:id:bluebirdofoz:20170510021844j:plain
メインカメラを有効化し、いつも通り下記の設定を行います。
・Move Camera to Origin: アプリ起動時にカメラ位置を0,0,0にする
・Camera Clears to Black: カメラのBackgroundを黒にする

後はBuild SettingsでUWPアプリオブジェクトに切り替えます。
この辺りの設定は以下のチュートリアル101を参考にします。お決まりパターンです。
・HOLOLENS 初めての開発 “HOLO”WORLD
 https://azure-recipe.kc-cloud.jp/2016/12/hololens-tutorial1/

この時点でビルドしてみると、唯一「AutoBlinkforSD.cs」というクラスのみエラーが発生しました。
UWPで提供されていないライブラリを参照しているようです。
目パチのスクリプトという事なので今回はコメントアウトしました。

これでビルドは通り、実行できた…と思ったのですが、hololens上でアプリを動作しても画面が何も表示されません。
holographic Remotingで試してみるもやはり失敗…。

Unityが即座に落ちてしまうので詳細が追えませんが、D3D11というエラーが見えたのでDirectX系の問題?
やはりシェーダが関係していそうです。苦戦しそうなので今日はここで切り上げです。


裏ではユニティちゃん追いかけっこアプリの修正中です。
というよりも、本日は修正から着手していたのですが、新規に書くことが思い当たらなかったので急遽トゥーンレンダお試し枠にしました。
が、色々問題が出てきて手間取ったために結局、修正の方もほとんど勧められない結果に…。
二兎を追ってはいけない。

公式チュートリアル「HOLOGRAMS 210 1章」を試してみる

本日は公式チュートリアル実施枠です。
いつも通り、以下ブログの記事を参考に実施します。
・HOLOLENS 公式チュートリアル HOLOGRAMS 210 GAZE 1章
 https://azure-recipe.kc-cloud.jp/2016/12/holograms-210-1/


参考記事にある通りにチュートリアルを実施します。
アプリをビルドすると、下記の画面が表示されました。
f:id:bluebirdofoz:20170509014238j:plain
タップ操作を行うと…。
f:id:bluebirdofoz:20170509014243j:plain
宇宙飛行士が現れました。

今回の目新しい技術としてはfitboxのオブジェクトでしょうか。
アプリ起動時に表示された、所謂「スプラッシュスクリーン」のオブジェクトとなります。

作っている箇所は以下の辺り。
以前利用したPanelオブジェクトと異なり、四角形の3Dオブジェクトを作成する手法のようです。
・Fitbox.cs

    private void CreateFitboxQuad(Transform parent, float xPos, float yPos, float width, float height)
    {
        var quad = GameObject.CreatePrimitive(PrimitiveType.Quad);
        quad.transform.parent = parent;
        quad.transform.localPosition = new Vector3(xPos, yPos, 0);
        quad.transform.localScale = new Vector3(width, height, quad.transform.localScale.z);
        quad.transform.localRotation = Quaternion.Euler(0f, 180f, 0f);
        quad.GetComponent<MeshRenderer>().material = FitboxMaterial;
    }

以下でタップイベントをキャッチした際に呼び出す関数を設定しています。
・Fitbox.cs

        // Set up our GestureRecognizer to listen for the SelectEvent
        recognizer = new GestureRecognizer();
        recognizer.TappedEvent += (source, tapCount, ray) =>
        {
            DismissFitbox();
        };
        recognizer.StartCapturingGestures();

DismissFitbox関数ではAstroManのオブジェクトがアクティブになり、表示されます。

    private void DismissFitbox()
    {
        // Destroy the GestureRecognizer ...
        recognizer.CancelGestures();
        recognizer.StopCapturingGestures();
        recognizer.Dispose();
        recognizer = null;

        // ... show the hologram collection ...
        if (HologramCollection)
        {
            HologramCollection.SetActive(true);

同時に、fitboxオブジェクトは削除されます。

        // ... and Destroy the Fitbox
        Destroy(gameObject);

因みに途中、差し替えたカメラオブジェクトは以下の設定を行ったカメラオブジェクトとなります。
・Move Camera to Origin: アプリ起動時にカメラ位置を0,0,0にする
・Camera Clears to Black: カメラのBackgroundを黒にする

以前の「Holograms 101」チュートリアルでは手動設定していた項目ですね。

Unityでのhololensアプリの開発プロジェクト作成手順

おいかけっこアプリの再設計にてプロジェクトを新規作成する際に気付いたことがありました。
これまでサンプルプロジェクトを用いていたため、hololensアプリ向けのプロジェクトの新規作成方法をまとめていません。
メモがないと不便なので以下を参考に新規プロジェクトの作成方法をまとめます。
・初めてのHoloLens開発(2D/Holographicアプリ)[環境準備~実行、HoloToolkit-Unity活用]
 http://www.buildinsider.net/small/hololens/002


1.Unityを起動したら、右上の[New]アイコンをクリックしてプロジェクト名を設定する。[Create project]ボタンをクリックして新規プロジェクトを作成する。
f:id:bluebirdofoz:20170508005839j:plain


2.HoloToolKit-UintyのAssetsフォルダにある「HoloToolkit」をプロジェクトのAssetsフォルダにコピーする。f:id:bluebirdofoz:20170508005504j:plain
これによりメニューバーに「HoloToolkit」が追加される。


3.メニューバーから「HoloToolkit」->「Configure」->「Apply HoloLens Scene Settings」をクリックする。
f:id:bluebirdofoz:20170508005510j:plain
これにより、以下の設定が行われる。
・Move Camera to Origin: アプリ起動時にカメラ位置を0,0,0にする
・Camera Clears to Black: カメラのBackgroundを黒にする
・Update Near Clipping Plane
・Update Field of View


4.メニューバーから「HoloToolkit」->「Configure」->「Apply HoloLens Project Settings」をクリックする。
f:id:bluebirdofoz:20170508005518j:plain
これにより、「Build Settings」が自動的に設定される。


5.メニューバーから「File」->「Save Scene As...」でシーンを保存する。
f:id:bluebirdofoz:20170508005612j:plain


6.「Build Settings」で「Add Open Scenes」を選択し、作成したシーンを追加する。
f:id:bluebirdofoz:20170508005621j:plain


7.「Build Settings」で「Build」を実行する。初回時は出力先のフォルダ選択が必要となる。
これで完了です。新規プロジェクトとして最低限必要な設定は以上となります。


以下、必須作業ではないですが、追加で行った設定もメモとして残しておきます。
1.「Holograms 101」のAssetsフォルダから「Holograms」を取り込み、Lightsオブジェクトを配置する。
f:id:bluebirdofoz:20170508005700j:plain
初期配置のライトだと単一ライトのため、現実世界と合わせたとき、違和感のある光源になります。
何らかの方法で光源を動的に判断することがない限り、hololens用のライト設定を用意しておくと楽かも。


2.「Build Settings」で「Unity C# Project」をチェックする。
f:id:bluebirdofoz:20170508005726j:plain
これを行っておくと、ビルド時にC# Projectとして出力が行われるため、VisualStudio側でのコード修正が可能となります。


また、参考先にある以下の設定は空間のワイヤーフレーム表示を利用する際に設定する項目です。
機能が不要な場合は設定を行わなくても大丈夫です。
1.「HoloToolkit」->「Input」->「Prefabs」->「HoloLensCamera」を「Hierarchy」ウィンドウにドラッグする。
f:id:bluebirdofoz:20170508005741j:plain


2.「Build Settings」->「Player Settings」から「SpatialPerception」にチェックを入れる。
f:id:bluebirdofoz:20170508005753j:plain
空間認識の利用選択のようです。「Spatial Mapping」などを使う際にはチェックを入れていないと機能が利用できません。

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

ARとVRデバイスを色々調べてまとめる 周辺機器枠その2 Real Sense R200 です。

スペック

搭載センサ

カラーカメラ1920x1080@30FPS
Depthカメラ最大628x468@30FPS
距離範囲0.5~4m(屋外をサポート)

サポート環境

サポートOSWindows 8.1以降
USBUSB 3.0
サポートCPU第4世代(Haswell)以降のインテル Core プロセッサー
インテル Core M プロセッサー
インテル Atom プロセッサー(Cherry Trail以降)

開発環境

OSWindows 8.1以降(デスクトップモードのみ)
アプリ開発言語C++
C#.NET Framework 4.0以降)
JavaScript
JavaJDK 1.7.0_11以降)
Processing(2.1.2以降)
開発環境 Visual Studio 2010以降
Unity Pro 4.1.0以降(Unity5.0以降であればPersonalでも可)
参考:中距離対応インテル RealSense カメラ
   http://www.intel.co.jp/content/www/jp/ja/architecture-and-technology/realsense-longrange.html
参考:インテル RealSense R200で進化した新機能とは?
   http://www.buildinsider.net/small/newsensor/realsenser200

価格

Intel RealSense Developer Kit (R200)$169(約1万9000円)

説明

Intelから開発者向けに販売されているタブレットPCの背面セットを目的としたカメラセンサデバイスです。

RealSense SDKによる提供機能

インテルRealSenseの開発はIntelが提供する「Intel RealSense SDK」を利用して行うことができます。
SDKには同じSDKを用いる各RealSenseの提供機能の一覧があり、R200ではSDKより下記の機能の利用ができるようです。

ストリームカラー、Depth(深度)、Left(IR)、Right(IR)
顔認識検出、特徴点抽出
手認識ブロブ(輪郭)
空間環境認識(空間の3Dスキャン)、距離計測
3D スキャン物体、頭、体(全身)
写真写真、動画
参考:インテル RealSense R200で進化した新機能とは?
   http://www.buildinsider.net/small/newsensor/realsenser200

ARデバイスとの相性

使い方はタブレットなどの小型PCに接続し、空間認識や顔認識機能の利用によるARカメラとしての利用目的のデバイスとなります。
ARデバイスとしての利用用途だけでなく、深度センサが付いているのでタブレットをかざして画像データと共に3Dデータを取り込む用途でも利用可能です。
RealSenseは他にもジェスチャー検出機能のついたSR300などの型番がありますが、R200はAtomもサポート環境となっており、動作の軽さによる取り回しの良さが特徴です。
VRデバイスでも外部情報の入力デバイスとして利用可能かもしれません…機能としてはARデバイスになってしまいますが。

Unityでの使用例

下記のブログで様々な使用例が示されていました。
www.naturalsoftware.jp

特に検出した表情を元に3Dキャラクタの表情を変更するのは仮想空間でのSNSでも注目されている技術です。
AR/VRデバイスと非常に相性の良いデバイスであることが分かります。

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

ARとVRデバイスを色々調べてまとめる 周辺機器枠その1 Leap Motion です。

スペック

本体スペック

サイズW80×D30×H11mm
インターフェースUSB 3.0/2.0
対応OSWindows 7/8、Mac OS X 10.7、Ubuntu Linux 12.04LTS/13.04
CMOSイメージセンサー半径50センチ、中心角110度の空間でポイントを0.01ミリの精度で認識

ラッキング速度

バランスモード120fps
プレシジョンモード60fps
高速モード214fps

開発環境

アプリ開発言語C++, Objective-C, Java, C#, Python, JavaScript
参考:イベントのために調べたLeapMotionのスペックと開発手順
   https://gist.github.com/K90j1/8563595

価格

Leap Motion10,080円

説明

Leap Motion社から一般向けに販売されている手のジェスチャーを認識する入力デバイスです。

モーションキャプチャ機能

Leap Motionでは両手とその指10本のモーションキャプチャが行えます。
手と指の動きは3次元空間でキャプチャされ、上下左右、前後への手の移動、手首の捻り動作も認識します。
ラッキング速度はバランスモードで120fps、精度重視のプレシジョンモードでも60fpsということで仮想空間へも遅延を感じさせない取り込みが可能でしょう。

VRデバイスとの相性

特にハンドトラッキング機能のないスマートフォン系VRデバイスでの入力センサとしての用途が期待できます。
ハンドコントローラのあるハイエンドVRでもコントローラを利用しない入力デバイスとしての利用が可能です。
実際、その需要が高かったのか公式ページでVRデバイスへのマウント用器具が提供されています。
f:id:bluebirdofoz:20170506144622j:plain
価格は$19.99です。(高くない?)

開発環境について

Leap Motion SDKを利用することでLeap Motionを用いたアプリ開発が可能です。
スペック欄にまとめましたが、数多くの開発言語に対応しています。
Unityでの開発にも対応しており、サンプルプロジェクトやOculus RiftやHTC viveと連動するアセットも用意されています。
開発の敷居はとても低いと言えるでしょう。

筆者も機会があれば試してみたいと考えていますが、形状的にhololensへのセットは難しそう。

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

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

Gear VR

f:id:bluebirdofoz:20170505091426j:plain
www.samsung.com

スペック

本体スペック

OSAndroid(Galaxy S6/S7接続)
対応デバイスGalaxy S6/Galaxy S6 edge/Galaxy S7 edge
電源スマートフォン電源利用
重量345g(フロントカバー含む)

ディスプレイ

視野角約101度
解像度(全体)2560×1440
解像度(片目)1280×1440

搭載センサ

センサジャイロセンサー/加速度センサー/近接センサー
参考:Galaxy Gear VR
   http://www.samsung.com/jp/consumer/mobilephone/gear/gear/SM-R323NBKAXJP#gallery
参考:徹底比較!おすすめのVRヘッドマウントディスプレイ5選【2017年最新版】
   http://life-saver.jp/1

価格

GearVR(Galaxy本体含まず)約1万3000円

長所/短所

長所

・VR端末として手頃な価格設定
・携帯をセットすればコード不要で単体動作可能
・追加のジャイロ加速度センサによる快適なトラッキング性能

短所

・位置トラッキングの機能はなし
・携帯端末によっては発熱問題により長時間利用が不可能

感想

samsung社から一般向けに販売されているHUD型VRデバイスです。
本デバイスは前期モデルを筆者が所有しております。最新モデルとの違いは視野角の広さです。

優れた点について

本機の優れた点は大きく2点あります。
一点目はVRデバイスの中では安価な価格設定です。GearVR本体の価格は1万強です。
本体の携帯端末をどれを購入するかで大きく変わりますが、最も古いモデルのS6であれば4万程度で手に入ります。
キャリアの購入プランや中古購入を利用すればより安価に手に入れることもできるでしょう。
凡そ5万前後の価格でVRを体験可能です。

スマートフォンVRの中で優れたトラッキング性能

二点目はスマートフォンを本体として利用するVRデバイスとしては優れたトラッキング性能です。
これはハコスコを代表するGoogle Cardboardのプラットフォームと大きく異なる点です。
Gear VR自体に追加のジャイロセンサ/加速度センサが搭載されています。
これを連携利用することで、Gear VRはスマートフォンを利用するVRデバイスの中で非常に優れたトラッキング性能を発揮します。
加えて、スタンドアローン機で接続コードが不要なため、VR空間での視点変更の快適度はOculusなどのハイエンドVR端末よりも優れて感じます。

位置トラッキング機能はなし

外部センサが存在しないため、位置トラッキング機能は提供されません。
このため、仮想空間を歩き回るなどといった体験はGear VRでは行えません。

解像度はハイエンドVRと比べても遜色なし

筆者はGalaxy S6と前期モデルを利用しての体験でしたが、映像の解像度についてOculusなどのハイエンドVRと比べても遜色ないと感じました。
ただし、起動可能なアプリのクオリティには明確な隔たりが存在します。これは本体機として利用する携帯端末と高性能PCの差によるものです。
Gear VRのアプリではハイエンドVRでのゲームのような大容量/高画質のアプリは存在しません。
現状、VRデバイスはゲーム利用が主な使用目的となるので、コンテンツの不足は痛いところです。

古いモデルでは熱暴走の問題あり

筆者が利用したGalaxy S6ではGear VRアプリを動作させたときの端末の温度上昇も問題になりました。
10分程度の連続利用で、端末温度が上昇し、アプリが停止してしまいます。
本問題は後継機ではある程度改善されたとのことですが、それでも1時間以上の連続利用は難しいようです。