MRTK v2のExamplesに含まれているデモシーンを見ながらStanderdShaderに関して勉強していました。
一つのデモシーンを見ながらMRTK StandardShaderに触れて、前回からドキュメントを読み解いています。
英語の記事になりますので、まずは英語を勉強もかねて見ていきます。
※この記事は公式ドキュメントの画像を使用しています。
前回の記事はこちら
ドキュメントはこちらです。
〇ライティング
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の使い方については下のページを見てください。
MRTKアップグレードを実行するため人はUnity上部タブからMixed Reality Toolkit->utility->Lightwaight Render Pipeline用のMRTK Standard Shaderのアップグレードを選択する。
Unityはオブジェクトを描画する際の様々な技術をまとめたレンダリングパイプラインをカスタマイズすることができますが、敷居が高いのでいくつかプリセットが用意されており、モバイルプラットフォームを想定した軽量のレンダリングパイプラインのことをLWRPというようです。Unity 2019まではプレビュー版であったようですね。
このレンダリングパイプラインに関してはUnityのブログにわかりやすくまとめられていました。
MRTK StandardShaderのドキュメントを読み始めてその多くが軽量化に関する文面のように感じます。
スタンドアローンであるHoloLensやハイエンドVRに比べ比較的スペックの低い環境でも動作するWindows MixedRealityデバイス用に作られたというのがよくわかります。
もしかしたらOculus QuestなどのスタンドアローンVRのShaderとしても利用できそうですね。
MRTKStanderdShaderの他環境下での使用に関しても今後試してみたいです。