MRが楽しい

MRやVRについて学習したことを書き残す

MRTK v2のドキュメントを少しずつ読み解く MRTK標準シェーダー その3

本日は MRTKv2 の調査枠です。
MRTKv2 の Guides ドキュメントを少しずつ読み進めていきます。

MRTKv2のGuidesドキュメント

以下のドキュメントを読み進めていきます。
microsoft.github.io

以下のページでは有志による本ドキュメントの日本語翻訳が行われています。
投稿時点でこちらで未翻訳、または著者が興味のある部分について記事にしていきます。
hololabinc.github.io

本記事では以下のページを読み進めます。
microsoft.github.io
f:id:bluebirdofoz:20200326082418j:plain

パフォーマンス

MRTK/Standard シェーダーを使用する主な利点の1つは、パフォーマンスです。
これは有効な機能のみを利用するように拡張可能です。

MRTK/Standard シェーダーは Unity/Standard シェーダーと同等の描画を提供するように作成されていますが、はるかに低コストです。
シェーダーのパフォーマンスを比較する1つの簡単な方法は、GPUで実行する必要がある処理の数を確認することです。
もちろん、処理の大きさは有効な機能や他のレンダリング構成によって変動する場合があります。
それでも一般的に、MRTK/Standard シェーダーは Unity/Standard シェーダーよりもかなり小さな処理を実現します。

・Unity/Standard シェーダー統計の例
f:id:bluebirdofoz:20200326082430j:plain

・MRTK/Standard シェーダー統計の例
f:id:bluebirdofoz:20200326082440j:plain

ライティング

MRTK/Standard シェーダーは、ライティングに単純な近似を使用します。
このシェーダーは物理的な正確さとエネルギーの管理を計算しないため、迅速かつ効率的にレンダリングします。
Blinn-Phong は物理ベースのライティングに近づけるために、フレネルと画像ベースのライティングを組み合わせた主要なライティング技術です。

シェーダーは次のライティング技術をサポートしています。

Directional light(指向性ライト)

シェーダーは、シーン内の最初の Directional Light の方向、色、強度を考慮します。(有効な場合)
ダイナミックポイントライト、スポットライト、またはその他の Unity ライトは、リアルタイムライティングでは考慮されません。

Spherical harmonics(球面調和関数)

シェーダーは Light Probes を使用して、球面調和関数を使用してシーン内のライトを近似します。(有効な場合)
球面調和関数の計算は、計算コストを削減するために頂点ごとに実行されます。
docs.unity3d.com

Lightmapping(ライトマッピング)

静的ライティングの場合、シェーダーは Unity の Lightmapping システムで作成されたライトマップに従います。
ライトマップを使用するには、レンダラーを static(またはライトマップを static )としてマークするだけです。

Hover light(ホバーライト)

ホバーライトは、オブジェクトの表面近くでホバリングする「ポイントライト」を模倣する Fluent Design System の枠組みです。
遠く離れたカーソルの照明によく使用されます。
この機能は HoverLight.cs を介してホバーライトのプロパティを制御できます。

Proximity light(近接ライト)

近接ライトは、オブジェクトの表面近くでホバリングする「勾配逆点ライト」を模倣する Fluent Design Systemパ の枠組みです。
多くの場合、カーソル付近の照明に使用されます。
この機能は ProximityLight.cs を介して近接ライトのプロパティを制御できます。
一度に最大2つの近接ライトがサポートされます。

軽量のスクリプト可能なレンダリングパイプラインのサポート

MRTK には、開発者が MRTK シェーダーで Unity の Lightweight Scriptable Render Pipeline(LWRP)を利用できるようにするアップグレードパスが含まれています。
Unity 2019.1.1f1 および Lightweight RP 5.7.2 パッケージでテスト済みです。
LWRP の使用を開始する手順については、以下のページを参照してください。
docs.unity3d.com

MRTK アップグレードを実行するには、メニューから Mixed Reality Toolkit -> Utilities -> Upgrade LightTK Render Pipeline の MRTK Standard Shader を選択します。
f:id:bluebirdofoz:20200326083105j:plain

アップグレードを実行すると、MRTK/Standard シェーダーが変更され、マゼンタ(シェーダーエラー)マテリアルが修正されます。
アップグレードが正常に行われたことを確認するには、Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader のコンソールを確認します。
Lightweight Render Pipeline で使用するためのアップグレードが行われています。

UGUIサポート

MRTK標準シェーディングシステムは、Unity に組み込まれたUIシステムで動作します。
unity_ObjectToWorld マトリックスは Graphic コンポーネントが存在するローカルトランスフォームの変換マトリックスではありません。
その親の Canvas の変換マトリックスです。

多くの MRTK/Standard シェーダーのエフェクトでは、オブジェクトスケールを知っておく必要があります。
この問題を解決するために、ScaleMeshEffect.cs はUIメッシュの構築中にスケーリング情報をUVチャネル属性に保存します。

Unity Image コンポーネントを使用する場合、ソースイメージに「None (Sprite)」を指定することをお勧めします。
これは Unity UI が余分な頂点を生成しないようにするためです。

MRTK 内の Canvas は、必要なときに ScaleMeshEffect.cs の追加を要求します
f:id:bluebirdofoz:20200326083117j:plain