夜風のMixedReality

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

MRTK Standard Shader ドキュメントを読み解く その② MRTK StandardShaderのライティング

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

MRTK v2のExamplesに含まれているデモシーンを見ながらStanderdShaderに関して勉強していました。

 一つのデモシーンを見ながらMRTK StandardShaderに触れて、前回からドキュメントを読み解いています。

 英語の記事になりますので、まずは英語を勉強もかねて見ていきます。

※この記事は公式ドキュメントの画像を使用しています。

 前回の記事はこちら

redhologerbera.hatenablog.com

 ドキュメントはこちらです。

microsoft.github.io

〇ライティング

 MRTK StandardShaderは照明に単純な近似を使用しています。 物理的な正確さとエネルギー保存を計算しないため、迅速かつ効率的なレンダリングを行えます。

 MRTK StandardShaderの処理が軽いというのもこの近似がかかわっていそうです。

 サポートしているライティング技術は以下になります。

〇Directional Light

 Shaderはシーンの実行時のUnity Directional Lightの方向、色、強さの影響を受けます。(この機能が有効の場合)

 Dynamic point lights,sport lights,その他Unitylightはリアルタイムライティングでは考量されません。

〇Spherical Harmoincs

 有効になっている場合Shaderはライトプローブを使用し球面調和関数を使用してscene内のライトを近似します。

 この球面調和関数の計算は計算コストを削減するために頂点ごとに実行します。

 ・ライトプローブ→空間内にあるlightの情報を保存すること

 ・球面調和関数→3次元ラプラス方程式の解となる斉次多項式を単位球面に制御することで得られる関数→ 難しい…

〇Lightmpping

 静的ライティングの場合ShaderはUnityのLightmapping機能によって構築されたLightMapを基にしてレンダラーを静的としてマークしてlightマップを使用します。

〇Hover Light

 Hover Lightはオブジェクトの表面近くでホバリングする「Point Light」を模倣するものです。

 多くの場合アプリケーションは遠くのカーソル照明に使用されHoverLight.csを介してHoverLightのプロパティ制御を行えます。

 一度に最大3つのHoverLightがサポートされます。

〇Proximity Light(近接ライト)

 近接ライトはオブジェクトの表面近くでホバリングする「勾配逆点ライト」を模倣するものです。

 多くの売アプリケーションにはニアカーソルライティングに使用されProximityLight.csを介して近接ライトのプロパティを制御できます。一度に2つの近接ライトがサポートされます。

 

 うん、一気に用語も増え直感で理解することが難しくなってきました。

どうやらMRTK StandardShaderのライティングはUnityのライティングを模倣した形になり、処理の負荷をさらに抑えているようです。

 Unityのライティングも合わせ今後勉強していきたいです。

〇軽量スクリプトレンダリングパイプラインサポート

 MRTKには開発者がUnityのLightweight Scriptable Render Pipeline(LWRP)とMRTKのShaderを利用できるようにするアップブレードパスが含まれています。

 Unity 2019.1.1f1、LWRP 5.7.5でテストされています。

 LWRPの使い方については下のページを見てください。

docs.unity3d.com

 MRTKアップグレードを実行するため人はUnity上部タブからMixed Reality Toolkit->utility->Lightwaight Render Pipeline用のMRTK Standard Shaderのアップグレードを選択する。

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

 

 Unityはオブジェクトを描画する際の様々な技術をまとめたレンダリングパイプラインをカスタマイズすることができますが、敷居が高いのでいくつかプリセットが用意されており、モバイルプラットフォームを想定した軽量のレンダリングパイプラインのことをLWRPというようです。Unity 2019まではプレビュー版であったようですね。

 このレンダリングパイプラインに関してはUnityのブログにわかりやすくまとめられていました。

blogs.unity3d.com

 

 MRTK StandardShaderのドキュメントを読み始めてその多くが軽量化に関する文面のように感じます。

 スタンドアローンであるHoloLensやハイエンドVRに比べ比較的スペックの低い環境でも動作するWindows MixedRealityデバイス用に作られたというのがよくわかります。

 もしかしたらOculus QuestなどのスタンドアローンVRのShaderとしても利用できそうですね。

 MRTKStanderdShaderの他環境下での使用に関しても今後試してみたいです。