本日は昨日に引き続きMRDLのアプリSurfaceのCubeで使用されているクリスタルのマテリアルを調査します。
〇MRDLとは?
MRDL(MixedRealityDesignLab)はMicrosoftによって提供されているMRTKを用いたHoloLensの実験的プロジェクト集です。
MRTKにはExamplesと呼ばれるサンプル集が提供されていますが、MRDLはどちらかと言うとオープンソースのアプリケーションとしての側面が大きく、MicrosoftStoreで提供されているだけではなくGithubでソースコードとUnityのプロジェクト自体を取得することができ、中身をみながら学ぶことができます。
〇Surface
SurfaceはMRDで提供されているHoloLens 2専用のアプリケーションです。 HoloLens 2で使用できるHandTrackingを用いてアニメーションと音によって本来は得ることができない触角フィードバックを疑似的に再現する、体験することができるアプリケーションになります。
〇VolumeShardsMat
〇チャンネルマップ
チャンネルマップとはピクセル単位でテクスチャのカラー情報(RGBA)を用いて金属感(Red)、透過率(Green)、放射(Blue)、滑らかさ(Alpha)を制御するための機能です。
この辺りはホロモンさんの以下の記事が詳しいです。
この[VolumeShadersMat]では次のチャンネルマップが使用されています。
これをCubeに割り当ててみると次のようになります。
一般的にUnityのマテリアルではAlbedo(もしくはMainTex)に画像を割り当てて見た目を再現することが多いですが、クリスタルの見た目はチャンネルマップの画像によって再現されていることがわかります。
〇Emmision
[Emmision]にはバイオレットが使用されています。
これをCubeに割り当てると次のようになります。 これでほとんどの見た目が再現できました。
MRTKStandardShaderのEmmisionは過去の記事を参考にしてください。
〇RimLight
リムライトはオブジェクトの輪郭を発光させる機能になります。
[Emission]よりも彩度の高い青系統の色が使用されています。
[RimLight]はカメラに依存しているため[VolumeShadersMat]の場合クリスタルの面ごとの発光に影響を与えているようです。
上画像ではリムライトによってCubeの右側面が青みかかっていることが見て取れます。
MRTKStandardShaderのリムライト自体の処理は過去の記事にまとめています。
〇HoverLight・Proximity Light(近接ライト)
[Proximity Light]はオブジェクトの表面近くでホバリングする[グラデーション逆点光]を模倣するものです。
MRTKStandardShaderの考え方の基となっている[Fluent Design System]の考え方に基づき実装されています。
[Proximity Light]を使用するためにはMaterialをアタッチしているオブジェクトにライトのコンポーネントをアタッチする必要があります。
[FingerTip]オブジェクトでは[HoverLight]コンポーネントがアタッチされています。
以上でクリスタルに使用されているマテリアル、[VolumeShadersMat]に関して理解できました。
次はクリスタルの仕組みを見ていきます。