戯言日記

ホロレンジャーの戦いの記録

HoloLens Shader Pack を買ってみた 【後編】

HoloLens Shader Pack 後編です

後編ではSpatialMap用のMaterial/Shaderについて簡単に紹介します

(Material名 / Shader名)
1. Triangles / CellsAndLines
f:id:haikage1755:20170723210004p:plain:w300

2. Squares / Grid
f:id:haikage1755:20170723224944p:plain:w300

3. Quads / CellsAndLines
f:id:haikage1755:20170723224817p:plain:w300

4. MultiGrid / MultiGrid
f:id:haikage1755:20170723210509p:plain:w300

5. Holodeck / Grid
f:id:haikage1755:20170723210625p:plain:w300

6. Flagments / PatterAndHighlight
f:id:haikage1755:20170723210828p:plain:w300

使い方

1. SpatialMappingCalcNormalsをScene内の空のGameObjectまたはSpatialMapping Prefabにアタッチ

2. SpatialMappingManagerのSurfaceMaterialにHololensShaderPack/Assets/Materials/SpatialMapping内のMaterialを適応

3.

  • GazeTransitionAnimatorをシーン内のSpatialMappingにアタッチし、SurfaceMaterialに2で使用しているマテリアルを指定すると、現在見ている位置を中心にパルスアニメーションが走る(この時マテリアルのPulse TransitionがEnableになっていることを確認)
  • TapTransitionAnimatorをシーン内のSpatialMappingにアタッチし、SurfaceMaterialに2で使用しているマテリアルを指定すると、タップした位置を中心にパルスアニメーションが走る(この時マテリアルのPulse TransitionがEnableになっていることを確認)

4. SpatialMappingMaterialControllerを用いることで、SpatialMappingのマテリアル変更をトリガー可能 (例として音声認識を使ってSelectNextMaterialを呼び出すなど)

5. GazeAnimatorは, 注視点に指定されたマテリアルをコピーするスクリプトで、カーソルオブジェクトの代わりに利用することで注視点をシェーダーによって可視化できる (Fragmentsマテリアルは、この機能を使用するマテリアル)


今回はTapTransitionAnimatorを除いた以下の構成にしました

f:id:haikage1755:20170723225247p:plain

SMMCSampleは、SpatialMapController.csのSelectNextMaterialをAirTapで呼ぶ簡単なコードです

using UnityEngine;
using HoloToolkit.Unity.InputModule;

public class SMMCSample : MonoBehaviour, IInputClickHandler
{
    SpatialMappingMaterialController _smmc;

    private void Start()
    {
        _smmc = GetComponent<SpatialMappingMaterialController>();
    }

    public void OnInputClicked(InputClickedEventData eventData)
    {
        _smmc.SelectNextMaterial();
    }
}

動画

youtu.be

HoloLens Shader Pack を買ってみた 【前編】

HoloLens で使えるカッコいいShaderの詰め合わせを買いましたので簡単に紹介

f:id:haikage1755:20170722171053p:plain:w480

youtu.be

本Assetを使用するにあたり、HoloToolKitが必要です。

今回利用した環境はこちら
・ Unity 5.6.2f1
・ HoloToolKit v1.5.8

サンプルシーン2つを実機で録画してみました

前編では Gears について紹介します

youtu.be

(Material名/Shader名)
1. Wirefloat / Wire floating
f:id:haikage1755:20170722174410p:plain:w480

2. GradientBlueGreen / Gradient
f:id:haikage1755:20170722174820p:plain:w480

3. XRay / XRay
f:id:haikage1755:20170722175051p:plain:w480

4. Holographic / Holographic
f:id:haikage1755:20170722175219p:plain:w480

5. Orangepurple / Gradient
f:id:haikage1755:20170722175435p:plain:w480

6. Triplaner / Triplaner Single Texture
f:id:haikage1755:20170722175830p:plain:w480

7. Two Sided Triangle / Two Sided Triangles
f:id:haikage1755:20170722180000p:plain:w480

8. Two Sided Wire / Two Sided Wire
f:id:haikage1755:20170722180210p:plain:w480

Mixed Reality 250 翻訳 第5章

Final

目標

2つのデバイスタイプ間で共同作業の体験をつくります

ビルドするもの

第4章に基づいて,島内のパズルにImmersiveデバイスユーザーが近づくと,HoloLensユーザーはパズルを解くヒントツールを取得します。Immersiveデバイスユーザーが皆パズルを通過すると,ロケットルーム内の"ready pad"にたどり着くと,ロケットが発射されます。

AtGoals
 ・HierarchyでUslandを選択する
 ・Inspectorで,Level Control内のEnable Collaborationにチェックを入れる

コードを理解する

  LevelControl.csを見てみましょう。このスクリプトはゲームロジックのコアであり,ゲーム状態を保持しています。UNETを利用したマルチプレイヤーゲームなので,少なくともチュートリアルを修正できるようにデータがどのように流れているか理解する必要があります。

Assets\AppPrefabs\Support\Scripts\GameLogicからLevelControl.csをダブルクリックして開いてください。

Immersiveデバイスがどのようにロケットを発射する準備をするか理解しましょう。ロケット発射準備は,島の3つの道に対応するboolリスト内の3つのboolのうちの一つを設定することで伝えれられます。ユーザーが道に配置されたときに設定されるある道のboolはロケットルーム内の茶色いパッド上にあります。それでは,詳細に移りましょう。

Update関数から始めます。'チート'機能があることに気が付くでしょう。これは開発中に,ロケット発射をテストし,またシーケンスをリセットするために使われます。これはマルチユーザー体験では機能しません。上手くいけば,次の情報を内部化する時までに、それを機能させることができます。チートすべきかどうかを確認した後,ローカルプレイヤーが没入しているかを確認します。ゴールに到達していることをどのように見いだすかに焦点を当てる。(Immersed)チェックの内部では,EnableCollaboration boolの背後に隠れているCheckGoalの呼び出しがあります。これは,この章のステップを完了している間にチェックされたチェックボックスに関与します。EnableCollaboration の内部では,CheckGoal()を呼んでいることが確認できます。

CheckGoal はパッド上に多かれ少なかれ立っているかどうかを確認するための計算をしています。Debug.Log "Arrived at goal"とSendAtGoalMessage()を呼び出します。SendAtGoalMessage ではplayerController.SendAtGoalを呼び出します。時間を省くためにここにコードを載せます。

private void CmdSendAtGoal(int GoalIndex)
       {
           levelState.SetGoalIndex(GoalIndex);
       }
public void SendAtGoal(int GoalIndex)
       {
           if (isLocalPlayer)
           {
               Debug.Log("sending at goal " + GoalIndex);
               CmdSendAtGoal(GoalIndex);
           }
       }


SendAtGoalMessageがLevelControl.csの背後でlevelState.SetGoalIndexを呼び出すCmdSendAtGoalを呼んでいることに注意してください。一見これは奇妙に見えるでしょう。SetGoalIndexを呼ぶのではなくプレイヤーコントローラーを介したこの奇妙なルーティングなのでしょう?この理由は,同期するデータを保持するためUNETが使用するデータモデルに準拠しているからです。不正行為やスラッシングを防ぐため,UNETは各オブジェクトにどのユーザーが同期中の変数を変更可能な権利を有するかを確認します。更にホスト(セッションを開始したユーザー)のみがデータを直接変更することができます。ホストではないユーザーは権利は持つも,変数を変更できるホストにコマンドを送る必要があります。デフォルトではホストはユーザーを示すオブジェクトを除いた全てのオブジェクトに対して権限を持ちます。この場合,オブジェクトはplayercontroller スクリプトを持っています。オブジェクトに対する権限を要求し変更する方法もありますが,プレイヤーコントローラには自身の権限とプレイヤーコントローラを介したルートコマンドがあるという優位性を選択します。

言い換えれば,自分の目標に到達したら,プレイヤーはホストに通知する必要があり,ホストは他のユーザーに通知する必要があるということです。


LevelControl.csの背後では,SetGoalIndexを見ています。ここでは,synclist (AtGoal)の変数の値を設定します。この操作をする間,ホストであるということに気を留めておいてください。コマンドと同様に,PRCはホストが発行できるものであり,全てのクライアントにいくつかのコードを実行させます。ここでは”RpcCheckAllGoals”と呼びましょう。各クライアントは個々に3つのAtGoals が設定されているかを確認し,そうであればロケットを発射します。

進捗を楽しむ

 前章に基づき,同様にセッションを開始します。今回は,Immersiveデバイスユーザーとして道上の"扉"に辿り着くと,ツールがHoloLensユーザーだけに現れます。HoloLensユーザーはImmersiveデバイスユーザーにヒントを伝える責任があります。ロケットはアバターが火山内の対応する茶色いパッドを踏んだ後に宇宙へ向かって発射します。このシーンは60秒後にリセットされ,再度挑戦できます。

Mixed Reality 250 翻訳 第4章

Immersion and teleporting

目標

各タイプのMixed Realityデバイスに体験を提供する

何をビルドするか

ImmersiveデバイスユーザーにImmersive Viewの島に置くために,アプリケーションをアップデートします。HoloLensユーザーは未だ島を俯瞰している状態です。各タイプのデバイスユーザーは,世界中にいるユーザーを見ることができます。例えば,ImmersiveデバイスユーザーはHoloLensユーザーが島のどこを見ているかどうかGaze Rayカーソルを見ることができます。HoloLensユーザーは島にいる各Immersiveデバイスユーザーを表すアバターを見ることができます。

ImmersiveデバイスのUpdateされた入力

 ・Mixed Reality TeleportをMixedRealityCameraParentに追加
  ・HierarchyでUslandを選択
  ・HierarchyでLevelControlを選択
  ・HierarchyでMixedRealityCameraParentを選択
・Inspectorで Add Componentをクリック
  ・Mixed Reality Teleportとタイプして入力

コードを理解する

 ImmersiveデバイスユーザーはケーブルでPCと接続されますが,この島はケーブルの長さに対して巨大です。これを補うには,ユーザーの動きと独立してカメラを動かす必要があります。Mixed Reality アプリケーションの設計について更に情報(特に自己移動と歩行)が必要な場合は次のページを見て下さい。(https://developer.microsoft.com/en-us/windows/mixed-reality/comfort)

このプロセスを説明するためには2つの用語を定義することが有用になります。一つは"dolly(移動式撮影機台)",これはユーザーから独立してカメラを移動するオブジェクトです。dollyの子オブジェクトはmain cameraになります。main cameraはユーザーの頭にアタッチされています。

Assets\AppPrefabs\Support\Scripts\GameLogic から MixedRealityTeleport.csをダブルクリックしてください。

MixedRealityTeleport は2つのジョブを持ちます。まず,バンパーを用いた回転の処理です。Update関数では,LeftBumper と RightBumper上で'ButtonUp'をポーリングします。GetButtonUp は押し下げられたボタンが上がった最初のフレームでtrueを返します。いずれかのボタンが上げられた場合,ユーザーは回転する必要があることを知ります。

ユーザーが回転すると,'fade control'という簡単なスクリプトを利用してフェードアウトとフェードインが実行されます。この処理は違和感を覚える不自然な移動を見ることを防ぎます。フェードインとフェードアウトエフェクトは,かなりシンプルです。Main cameraの前には黒いQuadがあります。フェードアウトすると,アルファ値が0から1へと遷移します。これにより、Quadの黒いピクセルが徐々にレンダリングされ、背後にあるものが隠されます。フェードインすると、アルファ値が0に戻ります。

回転を計算するとき,dollyが回転していることに注意してMain cameraの周りについて回転を計算します。これはMain cameraが原点から離れるにつれて重要になってきます。精度の低いdolly周りの回転はユーザーの視点から離れていきます。実際,カメラ周りに回転しなかった場合,ユーザーは回転ではなく,dolly周りについて回転移動してしまいます。

2つ目のMixedRealityTeleportのジョブは,dollyの移動です。これはSetWorldPositionで処理されます。SetWorldPositionはユーザーが知りたい自分のいるのワールド位置を要求する。dollyをその位置からmain cameraのローカル位置を引いた場所に置き,そのオフセットを各フレームで加算する必要がある。


Assets\AppPrefabs\Support\Scripts\GameLogicからTeleportScript.csをダブルクリックしてください。

このスクリプトは,MixedRealityTeleportより少し複雑です。このスクリプトでは,XboxコントローラのYボタンが押下されているか確認します。ボタンが押下されている間,テレポートカーソルが描画され,スクリプトはユーザーのGaze位置にRayを飛ばします。そのRay が多かれ少なかれ上向きになっているサーフェスと衝突すると,サーフェスはテレポートするには良いサーフェスであると判断し,テレポートカーソルのアニメーションが有効になります。Rayがサーフェスのどこにも衝突しない場合,アニメーションは無効になります。Yボタンが離され,計算されたRayの位置が有効である場合,スクリプトはRayが交差した位置でSetWorldPosition を呼び出します。

進捗を楽しむ

今回,友達を探す必要があります

もう一度,HoloLensユーザーはセッションをホストします。他のユーザーはセッションに参加します。アプリケーションはImmersiveデバイスから参加した最初の3人のユーザーを島にある3つの道のうちの1つに配置します。このセクションでは島を自由に探索できます。

詳細
 1.雲のなかの顔を見ることができ,ImmersiveデバイスユーザーはHoloLensユーザーがどの方向を見ているか見ることができます
 2. 島内のアバターは,回転できる首があります。現実の挙動には従っていない(そのような情報は持っていない)ですが,良い体験を生むことができます。
 3.HoloLenユーザーが島を見ると,Immersiveデバイスユーザーはそのカーソルを見ることができます
 4.HoloLensユーザーを表す雲は影を落とします

Mixed Reality 250 翻訳 第3章

Chapter 3 - Sharing

目標

ネットワークが正しく構成されていること,及びデバイス間で空間アンカーがどのように共有されているかを詳しく確認する

ビルドするもの

プロジェクトをマルチプレイヤープロジェクトに変換します。ホストや参加者にUIとロジックの追加をします。HoloLensユーザは頭上にある雲でセッション内にいるお互いを確認でき,Immersiveデバイスユーザは,アンカー付近に雲を持っています。Immersiveデバイス内のユーザはシーンの原点から相対的な場所にいるHoloLensユーザを見ることができます。HoloLensユーザは全て同じ場所にあるHologramの島を見ることができます。気を付けるべき重要な点は,この章ではImmersiveデバイスユーザーは島の中におらず,島を俯瞰するHoloLensと同様に舞います。

Steps

・IslandとVRRoomの除去
 ・Hierarchy で Isaland を右クリックし,削除
 ・Hierarchy で VRRoom を右クリックし,削除

・ Uslandの追加
 ・AppPrefabsからUslandをHierarchyに置く
 ・AppPrefabsから下記をHierarchyに置く
  ・UNETSharingStage
  ・UNetAnchorRoot
  ・UIContainer
  ・DebugPanelButton
 ・前回同様にSaveしてBuildする

コードを掘る

Assets\AppPrefabs\Support\SharingWithUnet\Scriptsを開き,UnetAnchorManager.csをダブルクリックする。HoloLensが別のHoloLensと両デバイが同じ空間を共有できるようにトラッキング情報をシェアする能力は,魔法のようです。2人以上で同じデジタルデータを利用して共同作業をする時,Mixed Realityのパワーが発揮されます。

このスクリプトで注目する点はいくつかあります
Start関数では,IsDisplayOpaqueをチェックしていることに注意してください。ここで,Anchorが確立されているフリをします。これは,ImmersiveデバイスがImport/Exportする方法が公開されていないためです。一方,HoloLens側ではこのスクリプトはデバイス間のAnchorのシェアリングを実装しています。セッションを開始したデバイスはExportするためにAnchorを生成します。セッションに参加したデバイスは,セッションを開始したデバイスにAnchorを要求します。

Exporting

ユーザーがセッションを生成すると,NetworkDiscoveryWithAnchors は UNETAnchorManagers内のCreateAnchor関数を呼び出します。CreateAnchorの流れを追ってみましょう。
まずいくつかのハウスキーピングを行い,以前に収集したであろうAnchorのデータを全て除去します。そして,次にロード用にキャッシュされたAnchorがあるかチェックします。Anchorデータはだいたい5~20MBほどでなので,キャッシュされたAnchorを再利用することで,ネットワーク経由で転送する必要のあるデータ量を省くことができます。後にこれがどのように動作するか確認します。Anchorを再利用している場合でも,新しい参加者がAnchorを持っていない場合に備えて,Anchorデータを準備する必要があります。

Anchorデータを準備する段階で,WorldAnchorTransferBatch Class は 他のデバイスやアプリに送信するAnchorデータを準備する機能と,AnchorデータをImportする機能を公開しています。Exportパスから,WorldAnchorTransferBatch へAnchorを追加し,ExportAsync 関数を呼び出します。ExportAsync関数はExport向けのデータを生成する時にWriteBuffer callbackを呼び出します。全てのデータがExportされると,ExportComplete が呼び出されます。WriteBuffer では,Export用に保持するリストデータチャンクを追加します。ExportComplete では,リストを配列に変換します。AnchorName 変数も同様に設定され,Anchorがない場合は,他のデバイスがAnchorを要求するようにTriggerします。

場合によっては,AnchorはExportされないか,極小のデータを生成するので,再度試みられます。ここではCreateAnchor が再度呼び出されます。

Exportパスの最後の機能は,AnchorFoundRemotelyです。他のデバイスがAnchorを見つけた時,デバイスはホストに通知し,ホストはそのAnchorが"good anchor"であり,キャッシュできるという信号として利用します。

Importing

HoloLensがセッションに参加すると,AnchorのImportが必要になります。UNETAnchorManagerのUpdate関数では,AnchorName がポーリングされます。Anchorの名前が変更されると,Importプロセスが開始されます。まず,Local Anchor Storeから指定された名前でAnchorをロードします。もし既にAnchorを持っていれば,データの再ダウンロードをせずにそれを利用します。もしなければ,Downloadを開始するWaitForAnchor を呼び出します。

Downloadが終了すると,NetworkTransmitter_dataReadyEvent が呼び出されます。これはダウンロードされたデータを用いて,ImportAsync を呼び出すようUpdate Loopに通知します。ImportAsync はImportプロセスが終了しるとImportComplete を呼び出します。もしImportが成功していれば,AnchorはLocal player storeに保存されます。PlayerController.csは実際にAnchorFoundRemotelyを呼び出して,良いAnchorが確率されたことをホストに通知します。

進捗を楽しむ

今回,HoloLensユーザはStart settion button を用いてセッションを開始します。HoloLensまたはImmersiveデバイスを利用する他のユーザーは,セッションを選択し,join session buttonを押します。もし複数のHoloLensデバイスユーザーがいる場合,彼らの頭上には赤い雲が浮かびます。また,青い雲が各Immersiveデバイスユーザが現れますが,HoloLensデバイスと同じ作業空間を見つけようとしないため雲は頭上にはありません。
このプロジェクトのポイントは,シェアリングアプリケーションを包括することです。それほど多くはありませんし,ベースラインとして機能し得ます。次の章では,楽しめる体験を構築します。共有体験デザインの更なるガイダンスはここにあります。

Mixed Reality 250 翻訳 第2章

第2章 Interaction

目標

Windows Mixed Reality アプリケーションの入力を扱う方法を示します

何をビルドするか

第一章のアプリ上に基づき,ユーザがHologramsを掴み,HoloLens内で現実世界のサーフェスや,Immersiveデバイス内のバーチャルテーブルの上に置ける機能を追加します

Steps

・InputManagerの追加
 ・HoloToolkit > Input > PrefabsからInputManagerをHierarchyにあるManagersの子として置く
 ・HoloToolkit > Input > Prefabs > Cursor drag から Cursor を Hierarchyに置く

・Spatial Mappingの追加
 ・HoloToolkit > SpatialMapping > Prefabs から SpatialMapping を Hierarchyに置く

・Virtual Playspaceの追加
 ・Hierarchy で MixedRealityCameraParentを展開し,Playspaceを選択
 ・InspectorでPlayspaceのチェックボックスを有効にする
 ・AppPrefabsからVRRoomをHierarchyに置く

・WorldAnchorManagerの追加
 ・Hierarchy内で,Managersを選択
 ・Inspectorで,Addcomponentをクリック
 ・World Anchor Manager とタイプする
 ・World Anchor Manager を選択し,追加する

・IslandへのTapToPlace の追加
 ・Hierarchy内で,Islandを展開する
 ・MixedRealityLandを選択する
 ・Inspectorで,Add Componentをクリック
 ・Tap To Place とタイプし,選択する
 ・Place Parent On Tap をチェックする
 ・Placement Offset に (0, 0.1, 0)をセットする

コードを掘る

Script 1 - GamepadInput.cs

Assets\HoloToolkit\Input\Scripts\InputSourcesから,GamepadInput.csを開く。また,同一パス内にある GesturesInput.csもダブルクリックする。
尚,両スクリプトがBaseInputSourceという共通Classを持つことに気を付けてください。
BaseInputSourceはInputManagerへの参照を保持することで,スクリプトがイベントをトリガーできるようにします。この場合,InputClicked eventが関連しています。これは第2章でTapToPlaceを追加したときに意識しておくことが重要です。GamePadInputの場合,押されるコントローラのAボタンをポーリングし,そしてInputClickedイベントを立ち上げます。GesturesInputでは,TappedEventに反応してInputClickedイベントが立ち上がります。

Script 2 - TapToPlace.cs

Assets\HoloToolkit\SpatialMapping\Scriptsから,TapToPlace.csを開く。Holographic アプリを作成する多くの開発者が最初に実装したいことは,ジェスチャー入力でHologramsを移動することです。そのため,我々はこのスクリプトにコメントを徹底的にするように努めました。このチュートリアルでは,いくつかの注目すべき点があります。
最初に,TapToPlaceがIInputClickHandlerを実装することに注意してください。IInputClickHandlerは,GamePadInput.csまたはGesturesInput.csによって生成されたInputClickedイベントを処理する関数を公開します。OnInputClickedは,TapToPlaceを持つオブジェクトにフォーカスがあるときにBaseInputSourceがクリックを検出すると呼び出されます。HoloLensでAirTapをする,あるいはXboxコントローラのAボタンを押したときにイベントをトリガーします。

 次にUpdate内でサーフェスを見ているかどうかを監視しているので,ゲームオブジェクトをテーブルのようなサーフェスに置くことができます。Immersiveデバイスは現実のサーフェスの概念はなく,テーブルトップを表すオブジェクト (Vroom > TableThingy > Cube)には SpatialMapping physics layerがマークされ,Update内のrayはVirtualテーブルトップと衝突します。

進捗を楽しむ

 今回は島を移動できるようになりました。HoloLensでは島を実際のサーフェスに従って移動し,Immersiveデバイスでは追加したVirutalテーブルへ移動できます。

Mixed Reality 250 翻訳 概要から第1章まで

Mixed Reality 250

UWPの持つ柔軟性により、複数のデバイスにまたがったアプリケーションが簡単に作成できます。この柔軟性により、各デバイスの持つ強みを活かした体験を創ることができます。このチュートリアルでは、HoloLensとWindows Mixed Reality Immersive Headsetsの両方で実行される基本的な共有体験について説明します。このコンテンツは、もともとワシントン州シアトルで開催されたMicrosoft Build 2017で配信されました。

このチュートリアルで行うこと

UNETを使用してネットワークを設定する

  • MRデバイス間でホログラムを共有する
  • MRデバイスごとに、異なるアプリケーションのビューを確立する
  • HoloLensユーザーが簡単なパズルを通してImmersive Headset ユーザーを導く共有体験を創ります

前提条件

  • HoloLensデバイスとImmersive Headset
  • UDPが利用可能なネットワーク

 (Unityのセキュリティ設定も変更する必要があります。)
dhero.hatenablog.com

プロジェクトファイル

環境構築

  • Window 10 Creators Update

https://www.microsoft.com/software-download/windows10
f:id:haikage1755:20170719015414p:plain

http://dev.windows.com/downloads
f:id:haikage1755:20170719020356p:plain

https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK
f:id:haikage1755:20170719032920p:plain

  • Unity Mixed Reality Technical Preview (調査中です。2017を利用してください…)

f:id:haikage1755:20170719034533p:plain

  • Unity Mixed Reality Technical Preview

https://unity3d.com/jp/unity/beta/unity2017.2.0b2
f:id:haikage1755:20170719040106p:plain

  • Holographic Template (DirectXでの開発者用) ※今回は必要ありません

https://go.microsoft.com/fwlink/?linkid=852626
f:id:haikage1755:20170719083248p:plain

  • Graphics driversの更新

https://developer.microsoft.com/en-us/windows/mixed-reality/updating_your_gpu_driver
f:id:haikage1755:20170719083656p:plain

第一章 Holo World

目標

シンプルなプロジェクトで開発環境の準備ができているのかを確認する

ビルドするもの

HoloLensまたはImmersiveデバイスのいずれかにHologramを表示するアプリケーション

ステップ

  • Unityを開く

 - 開くを選択
 - プロジェクトファイルを展開した場所に移動する
 - 「フォルダの選択」をクリック
 - Unityが最初にプロジェクトを処理するには少々時間がかかります

f:id:haikage1755:20170719084316p:plain


  • UnityでMixed Realityが有効になっているかを確認する

 - ビルド設定ダイアログ(Ctrl + Shift + Bまたはファイル>ビルド設定...)を開きます。
 - Windows Storeを選択し、Switch Platformをクリックします

f:id:haikage1755:20170719084917p:plain



 - プレーヤーの設定を選択します。
 - 右のインスペクタで、[その他の設定]を展開します
 - 右のインスペクタで、[XR Settings]を展開します
 - Virtual Realityのボックスをチェックしてください
 - Windows Mixed RealityはVirtual Reality SDKでなければなりません

f:id:haikage1755:20170719085319p:plain


  • シーンを作成する

 - HierarchyでMain Cameraを右クリックし、Deleteを選択します。
 - HoloToolkit>Input>PrefabsからMixedRealityCameraParentをHierarchyにドラッグ

f:id:haikage1755:20170719085501p:plain


  • Hologramsをシーンに追加する

 - AppPrefabsのSkyboxをScene Viewにドラッグ
 - AppPrefabsのManagersをHierarchyにドラッグ
 - AppPrefabsのIslandをHierarchyにドラッグ

f:id:haikage1755:20170719090307p:plain


  • SaveとBuild

 - Save (Control+S または File > Save Scene)
 - これは新しいシーンのため、名前を付ける必要があります。
名前は特に問題ではありませんがSharedMixedRealityとします

f:id:haikage1755:20170719090536p:plain


 - ビルドメニュー(Ctrl + Shift + Bまたはファイル/ビルド設定)を開く
 - Add Open Scenesをクリックする
 - Unity C# Projectsにチェックを入れる
 - Buildをクリックする

f:id:haikage1755:20170719091638p:plain

※ 現在、Unity2017.2の既知の問題として以上の設定ではビルドができないようです。
(C# Project のチェックを外すとビルドはできます)
f:id:haikage1755:20170720093151j:plain


 - ファイルエクスプローラが開くので、新しくAppというフォルダを作成します
 - Appフォルダを1回押します
 - フォルダを選択を押します
 - ビルドとコンパイルを待ちます

f:id:haikage1755:20170719091949p:plain


 - ファイルエクスプローラが開くので、Appフォルダを開きます
 - SharedMixedReality.slnをダブルクリックしてVisual Studioを起動します

 - トップツールバーを使用して、ターゲットをReleaseとx86に変更する
 - HoloLensに展開するために、ローカルマシンの横にある矢印をクリックし、デバイスを選択する
 - Mixed realityデバイスに展開するためにデバイスの横にある矢印をクリックし、Local Machineを選択する
- アプリケーションをスタートするためにDebug->Start Without DebuggingまたはCtr+F5をクリックする

コードを理解する

プロジェクトで、Assets\HoloToolkit\Input\Scripts\Utilitiesをダブルクリックし、MixedRealityCameraManager.cs を開いてください。

概要:MixedRealityCameraManager.csはデバイスに応じてクオリティレベルとBackgound設定を適応する簡単なスクリプトです。重要な点はHolographicSettings.IsDisplayOpaqueであり、これはデバイスがHoloLensかImmersiveHMDかを判定します。(IsDisplayOpaqueはHoloLensならfalse、immersiveならtrueを返します)

進捗を楽しむ

この時点で、アプリケーションはHologramsを描画します。HologramへのInteractionは後程追加します。両デバイスは同じHologramを描画します。Immersiveデバイスではまた青い空と雲も描画します。

[研究者になりたかった青二才の戯言日記]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」