本日はMRDLの勉強及び調査を行います。
〇MRDLとは?
MRDL(MixedRealityDesignLab)はMicrosoftによって提供されているMRTKを用いたHoloLensの実験的プロジェクト集です。
MRTKにはExamplesと呼ばれるサンプル集が提供されていますが、MRDLはどちらかと言うとオープンソースのアプリケーションとしての側面が大きく、MicrosoftStoreで提供されているだけではなくGithubでソースコードとUnityのプロジェクト自体を取得することができ、中身をみながら学ぶことができます。
〇Surace
SurfaceはMRDで提供されているHoloLens 2専用のアプリケーションです。 HoloLens 2で使用できるHandTrackingを用いてアニメーションと音によって本来は得ることができない触角フィードバックを疑似的に再現する、体験することができるアプリケーションになります。
〇Cube
Cubeは氷塊のようなクリスタルを指ではじくことができるシーンになります。 このシーンでは手の弾く速さや向きによって物理挙動が行われる[HandSmashService]に似た挙動が実装されています。
今回これをどのように実現しているのか気になったため、またクリスタルの見た目が美しいと感じたため最初にこのシーンを選びました。
これは[Assets/Surce/Scene]内に[Volume]という名前で存在しています。
シーンを開くと[Smoke]という名前のプレファブが一つのみでHoloLensのシーンに共通しているカメラなどが一切ないことがわかります。
これはアプリケーション実行時に[StartupScene]が読み込まれ、さらに[HandMenu]から[Cube]を選択した時、シーン遷移が行われることはなく、[StartuoScene]のままで[Cube]のオブジェクトが存在する[Volume]がロードされているためです。
〇Finger
[Cube]を選択し[Volume]がロードされるとHandTrackingによって検知されたユーザーの各関節に合わせてクリスタルが配置されます。
このオブジェクトは[Finger]という名前で[Smoke]オブジェクトの子オブジェクトとして格納されています。
[Finger]オブジェクトが親オブジェクトに該当し[FingerTip]オブジェクトが実際に見えるクリスタルに該当します。
クリスタルには[VolumeShardsMat]という名前のマテリアルがアタッチされています。
●VolumeShardsMatマテリアル
VolumeShadersMatマテリアルには[MixedRealityStanderdShader]が適応されています。
●RenderingSettings
VolumeShadersMatの[Rendering Mode]は[Custom]が設定されており、細かくカスタマイズが行われています。
●Blending
Blendingは透明度や深度を持ったマテリアルの描画にかかわる設定です。
[SourceBlend]が[SrcColor]、[Distination Blend]が[OneMinusSrcColor]と設定されています。
また、[BlendOption]が[Add]に指定されています。
これをShader内のコードで表すと
Blend SrcColor OneminuSrcColor BlendOp add
というようになります。これを文字であらわすと
最終的に出力される色= 現在の色* OneminuSrcColor+描画される色(=Shaderの処理結果)*SrcColor
というようになります。もう少しかみ砕くと
最終的な色=クリスタル以外の部分(背景)*(1-クリスタルのカラー)+Shaderで処理された色*(Shaderで処理された色)
これによってどのような変化が起こるのかをいかに示しました。
二つのCubeがあり、奥が通常、手前が[VolumeShardsMat]マテリアルと同様のBlendを行ったものになります。(またCullをOffにして面の両面が描画されるようにしています。)
手前のほうが、まるで透明度を持っているかのように裏面まで見えるようになりました。
Cubeにはα値を与えていませんがこのような表現ができるととでクリスタルはα値を持っていませんがクリスタルの透明度を再現しています。
本日は以上です。