デコシノニッキ

デコシノニッキ

ホロレンジャーの戦いの記録

MRTKv2のStandardShaderについて

MRTKv2のShader紹介です。(内容はほぼ意訳になります。)

microsoft.github.io

概要

MRTK Standard shading システムは,単一で柔軟なシェーダーで, Unityの Standard shaderに似たビジュアルに達しつつ,Fluent Design Systemの原則に則り,加えてMRデバイスでパフォーマンスを維持することができます。

f:id:haikage1755:20190721035423p:plain

Example Scenes

MaterialGallery のシーンでShaderマテリアルの例を見ることができます。

MixedRealityToolkit.Examples/Demos/StandardShader/Scenes/

https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Images/MRTKStandardShader/MRTK_MaterialGallery.jpg

StandardMaterialComparison では,UnityのStandard ShaderとMRTK/Standardの違いを比較することができます。

MixedRealityToolkit.Examples/Demos/StandardShader/Scenes/

https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Images/MRTKStandardShader/MRTK_StandardMaterialComparison.gif

アーキテクチャ

MRTK/Standard Shaderは、uber shaderと呼ばれる、[Unity's shader program variant feature]というマテリアルのプロパティに応じて最適な Shaderコードを自動生成生成する機能が使われています。ユーザがマテリアルインスペクタ内のマテリアルプロパティを選択すると,マテリアルのプロパティで有効にした機能のみにパフォーマンスコストがかかります。

MRTK/Standardのカスタムマテリアルインスペクタは, MixedRealityStandardShaderGUI.cs と呼ばれています。インスペクタはユーザの選択に基づいて自動的にShader機能の有効/無効をユーザの選択し,レンダリングのセットアップを手助けします。各機能の詳細情報は,各プロパティ上にカーソルを置いて,Unity Editorのtooltipを確認してください。

f:id:haikage1755:20190720183914p:plain:w450

ライティング

MRTK/Standardでは,ライティングに単純な近似を使用しています。これはShaderが物理的な正確性を計算せず,省エネであることで,より素早く効率的にレンダリングするためです。Blinn-Phongは,物理ベースのライティングに近づけるために,フレネルおよびイメージベースの照明とブレンドされた主要な照明技術です。このShaderは以下のライティング手法をサポートしています。

Directional Light

有効になっていれば,シーン内の1つ目のDirectional Lightの向き,色,強度を優先します。Dynamic point lights, spot lights,その他Unityのライトはリアルタイムライティングで考慮しません。

Spherical Harmonics

有効になっていれば,球面調和関数を使ったLight Probeでシーン内のライトを近似します。計算コストを減らすために,頂点毎の計算を行っています。

Lightmapping

静的なライティングのために,ShaderはUnityのLightmapping systemによって生成されたライトマップを使用します。これを使うためには単にレンダリングをstaticとしてマークするだけです。

Hover Light

ホバーライトは,オブジェクトの表面近くでホバリングする「点光源」を模したFluent Design Systemパラダイムです。遠くのカーソルのライティングでよく使われており,HoverLight.csを介してホバーライトのプロパティを制御できます。一度に最大3つのホバーライトがサポートされます。

Proximity Light

近接ライトは,物体の表面近辺をホバリングする"勾配逆のポイントライト"を模倣するFluent Design Systemパラダイムです。これはよく近接カーソルで使われ,ProximityLight.csからプロパティをコントールすることができます。一度に2つの近似ライトがサポートされます。

Lightweight Scriptable Render Pipeline Support

MRTKは開発者がUnityのLightweight Scriptable Render Pipeline (LWRP)をMRTKのShaderでも利用できるようにしています。

Mixed Reality Toolkit -> Utilities -> Upgrade MRTK Standard Shader for Lightweight Render Pipelineでアップグレードすることができます。

f:id:haikage1755:20190721043008p:plain:w450

アップグレードすると,MRTK/Standard Shaderは差し代わり,マゼンダ色は修正されるはずです。アップグレードできたかどうかはコンソールで次のようになっているかをチェックしてください。Upgraded Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader for use with the Lightweight Render Pipeline.

Texture Combiner

channel packkingを利用して,UntyStandardShaderのピクセル当たりのmetallic, smoothness, emissiveそれとocculusion値を改善することができます。

f:id:haikage1755:20190721043636p:plain:w450

channel packingを使う時,4つの別々のテクスチャではなく,1つのテクスチャをサンプリングしてメモリにロードするだけです。もしSubstancePhotoshopのようなプログラムでテクスチャマップを書くとき,手動パックすることができます。

f:id:haikage1755:20190721043909p:plain:w450

または,MRTK Texture Combiner Toolを使ってすることもできます。Mixed Reality Toolkit -> Utilities -> Texture Combinerを開いて以下のようにします。

f:id:haikage1755:20190721044056p:plain:w450

Unity Standard Sharderを選択し,"Autopopulate from Standard Material"をクリックすることで, ウィンドウは自動で埋まります。または,赤,緑,青,またはアルファチャンネルごとにテクスチャ(または定数値)を手動で指定することもできます。テクスチャの組み合わせはGPUで高速化されているため,入力テクスチャをCPUからアクセス可能にする必要はありません。

その他の機能のドキュメント

以下はMRTK / Standardシェーダで利用可能ないくつかの機能に関する詳細です。

プリミティブのどちら側をクリップするか(内側または外側)を指定できまる,良パフォーマンスな面,球体,およびボックス形状のクリッピング機能。使い方のシーンは、MixedRealityToolkit.Examples / Demos / StandardShader / Scenes /の,ClippingExamplesにあります。

f:id:haikage1755:20190721044839p:plain:w450

ClippingPlane.cs,ClippingSphere.cs,それと ClippingBox.cs を使って簡単にクリッピングをコントロールすることができます。

f:id:haikage1755:20190721044944p:plain:w450

ポータルなど,さまざまな効果を実現するための設定可能なステンシルテストサポートが組み込まれています。

f:id:haikage1755:20190721045002p:plain:w450

何千ものGPUインスタンスメッシュに独自のマテリアルプロパティを与えるためのnstancedカラーサポート しています。

f:id:haikage1755:20190721045128p:plain:w450

Triplanarマッピングはプログラミックにメッシュをテクスチャリングする技法です。terrain,UVなしのメッシュ,unwrapが難しい形状によく使われます。この実装はワールド,ローカルスペースへのプロジェクション,smoothnessのブレンディング,ノーマルマップをサポートします。使用される各テクスチャーは3つのテクスチャーサンプルを必要とするので,パフォーマンスが重要な状況では使用を控えるように注意してください。

f:id:haikage1755:20190721045711p:plain:w450

Albedoを最適化するためのチェックボックスがあります。アルベドテクスチャが指定されていない場合,最適化としてアルベド操作は無効になります。これを制御するにはチェックボックスを有効にしてください。

f:id:haikage1755:20190721045923p:plain:w450

ピクセル単位のクリッピングテクスチャ,ローカルエッジベースのアンチエイリアシング,および法線マップのスケーリングがサポートされています。

f:id:haikage1755:20190721050022p:plain:w450

ワールド空間での頂点押し出し機能。押し出されたバウンディングボリュームやメッシュの開閉を視覚化するのに便利です。

f:id:haikage1755:20190721050055p:plain:w450

[デコシノニッキ]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」