夜風のMixedReality

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

HoloLens 2向けのHandMeshのマテリアルを実機内でチェックするツールを作りました。

タイトル通りですが、HoloLens 2のHandTrackingで表示されるメッシュのマテリアルをHoloLens 2実機内でシュミュレーションして自身のアプリケーションにあったHandMeshの表現を行えるツールを作りました。

〇作ったもの

www.youtube.com

GitHubに公開している部分はこれの一部になります。

〇作成経緯

HoloLens 2を触ってオブジェクトとの距離感に関してつかみにくいということに気が付きました。

具体的にはボタンなどのUIやオブジェクトをつかもうとしてもボタンに手が届いていなかったり、ボタンの奥で押そうとしていたりといった仮想のオブジェクトならではの距離感がつかめない現象が起こりました。(ほかの人でデモを行っていても2人に一人はボタンが押せない)

 これはHoloLensで表示される仮想のオブジェクトと現実のオブジェクトとで光の当たり方が違うことが原因として考えられます。

   この距離感をユーザーに知覚させるうえでユーザーの手のメッシュの表示は重要な要素になります。これがあることでユーザーはオブジェクトとの距離感を手のメッシュで計り感覚的に調整することができます。

 しかし常に手のメッシュが表示されていてはMixedRealityのコンテンツの体験に支障をきたすことがあります。(要するに目障り)

 そこでHandTrianglesShaderが用意されています。

 redhologerbera.hatenablog.com

 このShaderは定期的にpulseが流れるようにメッシュの表示、非表示が切り替わることでユーザーのHandMeshを常に表示することなくビジュアルとUXの両立を行うことができます。

 HandTrianglesShaderには調整できるパラメータが多く用意されており、Unity内でマテリアルを作成することはもちろんできますが、実機との見え方で差が生まれることがあります。

 そこで今回HoloLens 2実機内でHandMeshのマテリアルのパラメーターをスライダーで変化させ、その変化を自分の手で確認できるようにしました。

〇PinchSlider

今回はMRTKに同梱されているUIの一つのPinchSliderを用いてMaterialのパラメータを変更できるようにしています。

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

PinchSliderの使い方は以前の記事で紹介しています。 

redhologerbera.hatenablog.com

using Microsoft.MixedReality.Toolkit.UI;

...
 public void hoge(SliderEventDeta deta){

float value = deta.NewValue;
 ...

}

というようにスクリプト側でメソッドを用意しPinchSliderコンポーネントEvents/On Value Updated(SliderEventData)hogeを呼び出します。

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

これでPinchSliderのデータを使用することができます。

〇HandTrianglesShaderのパラメータをスライダーで変化させる

 Material _handMaterial;

//Intensity
  public void Intensity(SliderEventData data)
    {
        TMP_Text text = GameObject.Find("Intensity").GetComponentInChildren<TMP_Text>();
        float value = data.NewValue *5f;
        text.text = "Intensity ="+value;
        _handMaterial.SetFloat("_Intensity_",value);
    }

SliderEventDataの値を一度valueに置き換えパラメータに応じて定数をかけてRangeを調整します。

 Textはスライダーの値を表示するためのものでスライダーオブジェクトを取得し子オブジェクトにあるTextを取得します。

_handMaterial.SetFloat("変更したいパラメータ名",value);

でパラメータを変更しています。

最後に_handMaterialはHandMeshのプレファブであるArticulatedHandMeshのマテリアルと同一にしています。

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

これで実機内で動的にマテリアルのパラメータを変更してHandMeshの変化を見ることができます。

〇公開先

今回作成したツール(の一部)はこちらで公開しています。

github.com