夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

DigiGirlzイベントで小中高生向けにHoloLensのデモをしてきました。 アプリ開発編 その④ PulseShaderを使ってみる。

 先日DigiGirlzというイベントでHoloLensのデモアプリを作成、アテンドをおこないました。

 MRTKv2.2.0のPulseShadeを含む数多くの実験的機能を盛り込んだアプリに仕上がりました。

 今回からアプリに関して少しずつ残します。

 前回の記事はこちらです。

 魔方陣の演出を解説しています。

redhologerbera.hatenablog.com

 イベントでのデモに関してはこちら記事を見てください。

redhologerbera.hatenablog.com


HoloLens DigiGirlzDemoApps

〇PulseShaderを使う!

 今回のデモアプリに関して主催者側の方からのオーダーは以下の二点です。

 ・初めて体験する中高生にHoloLensの魅力を伝えてほしい

 ・PulseShaderとSpatialSoundsを使ってほしい

 PulseShaderは2019年末にリリースされたMRTKバージョン2.2.0でリリースされた実験的機能です。

 PulseShaderに関してはこちらの記事も参考にしてください。

redhologerbera.hatenablog.com

〇SpatialAwarenessのMaterialを差し替える。

 今回のデモアプリでは

 ①アプリ起動してからAirTapを認識してキャラクターが現れるまで

 ②キャラクターが現れてから曲の1番のサビまで

 ③1番のサビから2番まで

 ④2番のサビから間奏まで

 ⑤間奏から最後まで

 の5つのMaterialを適時入れ替えて常に視覚的に変化を与え単調にならない工夫をしています。

 5つのMaterialはそれぞれ以下のようになっています。

 ①SpatialMeshは見えない。

 ②緑色のPulse

f:id:Holomoto-Sumire:20191229210300j:plain

 ③青色のPulse

f:id:Holomoto-Sumire:20191229210441j:plain

 ④オレンジのPulse

f:id:Holomoto-Sumire:20191229210544j:plain

 ⑤パステルカラーのPulse

f:id:Holomoto-Sumire:20191229210746j:plain

 と曲が進む中で視覚的にも派手にしています。

〇SpatialAwarenessのMaterialの差し替え

 MRTKの公式ドキュメントを参考に次のようなスクリプトを実装しました。

microsoft.github.io

using UnityEngine;
using Microsoft.MixedReality.Toolkit.SpatialAwareness;
using Microsoft.MixedReality.Toolkit;

 public class ChangeSpatialMaterial : MonoBehaviour{

   // new material;
   public Material spatialmaterial;
    /// <summary>
    ///  Change MRTKSpatialAwareness VisibleMaterial.
    /// </summary>
    public void OnSpatialShaerCange1st()
    {
        // Cast the Spatial Awareness system to IMixedRealityDataProviderAccess to get an Observer
        var access = CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;
        // Get the first Mesh Observer available, generally we have only one registered
        var observer = access.GetDataProvider<IMixedRealitySpatialAwarenessMeshObserver>(); 
        // Change the VisivleMaterial to new material.
            observer.VisibleMaterial = spatialmaterial;
    }
}

 これは、MixedRealityToolkitオブジェクトのProfileで設定されたSpatialAwarenessのマテリアルを動的に差し替えることができます。

でもアプリではこのメソッドをアニメーションによって管理することで任意のタイミングでアニメーションにあわせMaterialを差し替え、Pulseの変化をつけています。