CrossRoadスマートフォン用の表示で見るCrossRoadAR、MR、VR、Babylon.jsを中心とした技術ブログ。Academyについてです。Mappingについて整理しました。これまでの内容は下記にあります。10のPCとHoloLensが必要です。Update3とUnity5.5以上がインストールされていることが必要です。私の場合は、下記の環境で動作確認しました。Mappingだけでも確認することをお勧めします。230」を開き、プロジェクトをダウンロードします。211のときと異なり、今回はチュートリアル確認用のプロジェクトは、unitypackageの形で提供されています。Planetarium.unitypackageをインポートします。これで始める準備は整いました。Setupまずは一通りの環境を作ります。何度か出てきている手順は割愛し、異なる手順だけ説明します。Capabilitiesの設定AndroidでいうPermissionに相当します。今回の設定対象は、InternetClientServerPrivateNetworkClientServerMicrophoneSpatialPerceptionです。Settingsの中で設定します。MicrophoneとSpatialPerceptionも同様です。Projectにチェックを入れておくことをお勧めします。Layerを選びます。Raycastのままで良いです。Scanningここでは、目の前でリアルタイムにメッシュを表示させる、という基本的な機能を解説しています。以下、チュートリアルの記載に沿って、3つに分けて説明します。この時点でビルドしてHoloLens実機にアプリを転送すると、以下のようになります。2)2つ目では、UnityのProfiler機能を使ってGPUの負荷を見る方法を説明しています。IPを選択し、HoloLensのIPアドレスを入力します。すると、このようなグラフができます。GPUの波形は、HoloLensが静止していれば穏やかですが、HoloLensが動けば(HoloLensを着けて辺りを見回せば)波形が変化します。TrianglesPerCubicMeterを500から1200に変更してみます。Cubic単位のTriangleの数を変更、ということで、値を大きくするほどメッシュが細かくなりますが、モデル化するときのデータ量も多くなります。SpatialMappingObserver.csを開いて、Awake()の先頭に下記を追加してビルドします。gist5b6ac87c4bb728363469ed1054e40310HoloLensで見てみると、よりメッシュが細かくなっていることが確認できます。Editorで見る方法を説明しています。SpatialMappingObserver.csのAwakeに書いた下記は削除します。gistc23a7b9a17cf7eb703d96fb36ccdc573この状態で再度ビルドしてHoloLensにDeployします。Portalを開きます。Mappingという項目にあるUpdateをクリックします。1回クリックすると、空間のCG化が始まります。Portal上では何も変化が見られません。再度Updateをクリックすると、その間に取得したモデルデータが反映されます。次に、Saveをクリックすると、SpatialMapping.objという名前でダウンロードができます。次に、SpatialMapping.objを先ほどのUnityのプロジェクトにドラッグします。Modelにドラッグします。Editorで再生すると、モデルを表示させることができます。ちなみに、WireFrameというshaderではこのように真っ暗です。ShaderをStandardFastに変えると、見え方が変わります。Shaderの設定箇所は下記です。Visualizationここでは、Shaderの加工によって、壁に相当する箇所だけ異なる表示にすることを説明しています。Materialを、BlueLinesOnWallsに変更するだけです。Editorで見るとこうなります。このShaderに設定してからHoloLensにビルドすると、壁が青く見えます。Shaderを使ってますので、見え方はそちらをご確認ください。BlueLinesOnWallsのプロパティでは、線の太さと密度を変更できます。Mappingで取得したモデルの中から壁と床を認識する処理を説明しています。Prefabを追加します。Editorで実行します。最初はこのように真っ暗です。10秒たつと、壁と床を認識した箇所が別のGameObjectに置き換わり、かつプラネタリウムのようなモデルが中心に現れます。実機でビルドしても同様です。Placementここでは、AirTapによって、スキャンした空間の壁に、オブジェクトを配置する処理を説明しています。コンポーネントのInspectorを見ます。PlanesをEverythingからWallのみに変更します。PlanesをUnknownから変更すると、今回のデモが動きませんのでご注意ください。ここでは、Placeable.csを修正します。チュートリアルに記載の完全版と差し替えます。Placeable.csはすでにProjecter、RocketPoster、AstronautPosterのPrefabにアタッチされています。ビルドしてHoloLensで見てみます。これまでのように10秒たってプラネタリウムが出たら、PosterとProjecterはGazeしてAirTapすることで移動させることができます。このように、Placeable.csがアタッチされたオブジェクトであれば、AirTap後に自分の視線方向に移動させることができます。移動開始と終了はAirTapです。Occlusionoccludeの元々の意味は、塞ぐ、です。Mappingのmeshにふさがれてしまう時に、どんな方法で表示させれば良いか、をデモで説明しています。HoloLensの世界ではオブジェクト同士が重なった時に4つの表現手段があります。ここでは、4つの表現手段を確認できるデモを作ります。MaterialをOcclusionに変更します。Prefabの中にあるEarthだけ、ShaderをOcculusionRimに変更します。PlanetOcclusion.csを変更します。これは、SolarSystemの子オブジェクトである、それぞれの惑星Prefabにアタッチされています。Academy230の該当箇所に完成版のコードがあります。ビルドしてHoloLensで動作を見てみます。通常のオブジェクトはそのまま見えます。(Occlusion)Earthの場合、他のオブジェクトの裏になると、青いふちだけに見えます。Shader)他の惑星オブジェクトの場合、チュートリアルではX-rayと呼ばれる表示になります。Shader)また、惑星を取り巻く隕石は、壁の向こうに移動したり、何かの影になると隠れます。Tipsいくつか気になるところがあったので、備忘録を兼ねて残しておきました。Observerクラスのpublic変数として指定されています。Viewから値を変更します。プロジェクトを開いて、HoloLensにDeployの2段階の手順が必要になります。Studioで開いたときのプロジェクトにUhityで作ったソースコードが残ります。C#のコードを修正してHoloLens向けにdeployすると変更が反映されます。Unityの画面でしかできない処理は対象外ですが、ある程度はこの方法でカバーできるので、ビルドの手間を減らす方法としてお勧めです。Studioプロジェクトからソースコードを開くと、自分が何もしていないのに大量のエラーメッセージが出ることがあります。Packageの復元を実行することで直ります。Mobile向けのアプリを作ったときや、Microsoft提供のUWPサンプルプロジェクトを開いたときは、ほぼ100%発生しました。Mappingで計測した結果を使って、オブジェクトを配置する方法HoloLensアプリで、特定の壁や床から何かが飛び出してくるゲームを作る時は、あらかじめゲームを行う部屋をモデル化し、壁や床の位置を特定することが必要です。そこで、今回取得したSpatialMapping.objを使うことで、オブジェクトの配置位置を決められるのかを試して見ました。Viewにドラッグします。objになっている部屋の中に適当なgameobjectを配置します。今回は少し赤く色付けしたCubeを配置しました。UWPビルドしてHoloLens実機に転送してみます。透過するので赤色がわかりづらいですが、Cubeの配置位置は、先ほどUnity上で配置した辺りと一致していました。特定の場所を使ったアプリを作りたい時は、こうやって事前スキャンした部屋モデルをUnityに読み込ませてから配置を検討すれば良さそうです。注意点として、この方法を使う時は、アプリ起動時にUnityのCameraオブジェクトの向きとHoloLens実機の向きを一致させておく必要があります。理由はわかりませんが、CameraとHoloLensの向きが不一致状態でアプリを起動すると、Cubeが見えませんでした。コンポーネントにドラッグしたSpatialMapping.objは、そのままでビルドしても、HoloLensで見た時は表示されません。DesktopではShaderにwarningが出ることがあるChapter5では、OcculusionというShaderを使いました。Desktop上のWindows10のUnityではwarningを表示していました。デスクトップPCでは出ませんでした。Desktopで作ってHoloLensにdeployしても動作は問題ありません。Mappingは、HoloLensの最も分かりやすい特徴だと思います。実際、今回のデモではかなり色々と分かりました。ところで、今回、ざっとですがソースコードを見たところ、機能実現に必要なSpatialMappingObserver.csや、SpatialMappingManager.csは、具体的な処理を実行している部分は隠れていて、APIを呼び出すような形になっていました。いえ、できることは色々あるはずなので、機能面ではもう少し調べた方が良いかもしれません。holograms」の解説(Chapter3まで)少し空いてしまいましたが、次は240の内容を整理しました。Academyについてです。Academyについてです。»ProfileAR、MR、VR、Babylon.jsを中心とした技術ブログです。広く色々な技術を勉強するのが好きで、あれこれ書いています。詳細なプロフィールはこちらをご確認ください。2020)■プライバシーポリシー■こちらに記載しておりますのでご確認ください。■お問い合わせ■こちらよりお願いいたします。月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。