夜風のMixedReality

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

MRTK Standard Shader ドキュメントを読み解く その①

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


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

 記事をMRTKチームのCameron Mickaさんに見ていただいていたようで、ステキなメッセージとともに「もしもっと調べたかったら公式ドキュメントここだよ」とドキュメントの場所を教えていただいていました。

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

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

 公式のドキュメントはこちらになります。

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

microsoft.github.io

 〇MRTK StanderdShader

 MRTK StanderdShaderはUnityのStanderd Shaderに似た効果を実現し、Fluent Design Systemの原理で実行し、MixedRealityデバイスで動作する柔軟なShaderです。

 sceneサンプルはMixedRealityToolkit.Examples/Demos/StandardShader/Scenes/ にあります。

 〇MaterialGallery

 すべてのMaterialにMRTK/Standard shaderを使用しています

 MaterialGalleryのオブジェクトに関しては過去記事で詳しく見ています。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

 〇StandardMaterialComparison

 UnityのStanderdShaderとの比較を見ることができるシーンです。

 今後詳しく見ていきたいと思います。

アーキテクチャ

  MRTK StanderdShaderはUnityのShaderプログラムバリアント機能を使用して、マテリアルプロパティに最適なshaderコードを自動生成する「uber Shader」です。

 ユーザーがMaterialのインスペクタからプロパティを選択したとき、有効にした機能のみにパフォーマンス負荷がかかります。

 MRTK StanderdShaderは多くの機能があっても選択していない機能に関しては全く処理の負荷がかからないような仕組みになっているようです。

 〇Material inspector

  MixedRealityStandardShaderGUI.csと呼ばれるMRTK Standerd Shader用のカスタムマテリアルインスペクターがあり、ユーザーの選択井基づきshaderの機能を自動的に有効、無効にし、レンダリングの状態の設定を支援する。

 アーキテクチャで触れられていた「MRTK StanderdShaderは多くの機能があっても選択していない機能に関しては全く処理の負荷がかからないような仕組み」とはMixedRealityStandardShaderGUI.csのことのようです。

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

 inspectorの最初の部分のRendering Modeはマテリアルのレンダリング状態を設定します。

 レンダリングモードではドキュメントでは以下のように説明されています。

Rendering Mode  ドキュメントの訳  
Opaque 透明な領域のない通常のソリッドオブジェクトに適する(デフォルトの設定)  
Cutout このモードでは半透明の領域はなく、100パーセント透明、または不透明な状態になる。   
Fade 鏡面反射のハイライトや反射を含む透明度でオブジェクトをフェードアウトできる。 このモードではanimationと組み合わせフェードイン、フェードアウトの表現などを行う場合便利。 ガラスなどのリアルな透明表現にはあまり適さない  
Transparent 透明なプラスチックやガラスなどリアルな素材の表現に適している。 このモードではマテリアル自体がテクスチャのα値に基づいて透明度を持つが、反射と照明のハイライトはくっきり表示される。  
Additive

前のピクセルカラーと現在のピクセルカラーを合成する[加算]モードを有効にする。

透明度を合わせる時の問題を解決する際推奨されるモード

 
Custom

レンダリングモードの設定を手動で制御できる。

これを一言で解釈してみました。

Rendering Mode

 筆者の解釈  
Opaque デフォルトの設定  
Cutout png画像などのテクスチャで背景(透過されていない部分)が必要ないものを作るとき使用する   
Fade UIや幽霊など全体がかすんでいくようなオブジェクトを作る際に使用する  
Transparent 透過率を持ったリアルなオブジェクトを作る際に使用する  
Additive 透明度に関して問題があったり違った表現がしたい場合使用する  
Custom 自分でカスタマイズできる。 玄人仕様

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

Cull Mode  ドキュメントの訳
Off フェイスカリングを無効にする。 両面メッシュが必要な場合のみこの選択をする
Front 表面でカリングを行う
Back デフォルト、背面カリングを行う。レンダリングパフォーマンスを改善するためにはこのカリングを可能な限り有効にする必要がある

カリングって何?っとなったので少し調べてみたところ

カリング・・・描画する必要がないポリゴンを描画しないようにする設定。 

 のようです。 描画されるポリゴン数は処理の重さに直結するのでハイポリゴンモデルを扱う場合は特に注意が必要かもしれません。

〇パフォーマンス

 UnityStandardShaderよりもMRTK StandardShaderを使用する主な利点の一つはパフォーマンスです。

 MRTK StandardShaderは必要のない設定を処理せず有効な設定のみを利用するように拡張可能です。

 ただし、MRTK StandardShaderはUnityのStandardShaderと同等の効果を春香人低いコストで提供するように作成されています。

 Shaderのパフォーマンスを比較する一つとしてGPUで実行する処理の数があります。 

 MRTK StandardShaderはUnityのStandardShaderに比べ大幅に少ない計算を実行します。

 

 MRTK StandardShaderはパフォーマンスのそこまで出せないHoloLensで動くことを前提にしているため非常に軽く作られているようです。

 またデモシーンをみて、MRTK StandardShader単体で非常に多くの表現ができることがわかりました。

 次回は続きから見ていきたいと思います。