MRTK v2のExamplesに含まれているデモシーンを見ながらStanderdShaderに関して勉強していました。
記事をMRTKチームのCameron Mickaさんに見ていただいていたようで、ステキなメッセージとともに「もしもっと調べたかったら公式ドキュメントここだよ」とドキュメントの場所を教えていただいていました。
一つのデモシーンを見ながらMRTK StandardShaderに触れて、今回からドキュメントを読み解いていこうと思います。
英語の記事になりますので、まずは英語を勉強もかねて見ていきます。
I love the detailed documentation you are adding for each row of the Material Gallery! If you are curious about channel maps, or would like to create your own channel maps, you can find a bit more information here: https://t.co/y9wM9JRt2z #MRTK
— Cameron Micka (@tcmicka) October 25, 2019
公式のドキュメントはこちらになります。
※この記事は公式ドキュメントの画像を使用しています。
〇MRTK StanderdShader
MRTK StanderdShaderはUnityのStanderd Shaderに似た効果を実現し、Fluent Design Systemの原理で実行し、MixedRealityデバイスで動作する柔軟なShaderです。
sceneサンプルはMixedRealityToolkit.Examples/Demos/StandardShader/Scenes/ にあります。
〇MaterialGallery
すべてのMaterialにMRTK/Standard shaderを使用しています
MaterialGalleryのオブジェクトに関しては過去記事で詳しく見ています。
〇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のことのようです。
inspectorの最初の部分のRendering Modeはマテリアルのレンダリング状態を設定します。
レンダリングモードではドキュメントでは以下のように説明されています。
Rendering Mode | ドキュメントの訳 | |
---|---|---|
Opaque | 透明な領域のない通常のソリッドオブジェクトに適する(デフォルトの設定) | |
Cutout | このモードでは半透明の領域はなく、100パーセント透明、または不透明な状態になる。 | |
Fade | 鏡面反射のハイライトや反射を含む透明度でオブジェクトをフェードアウトできる。 このモードではanimationと組み合わせフェードイン、フェードアウトの表現などを行う場合便利。 ガラスなどのリアルな透明表現にはあまり適さない | |
Transparent | 透明なプラスチックやガラスなどリアルな素材の表現に適している。 このモードではマテリアル自体がテクスチャのα値に基づいて透明度を持つが、反射と照明のハイライトはくっきり表示される。 | |
Additive |
前のピクセルカラーと現在のピクセルカラーを合成する[加算]モードを有効にする。 透明度を合わせる時の問題を解決する際推奨されるモード |
|
Custom |
レンダリングモードの設定を手動で制御できる。 |
これを一言で解釈してみました。
Rendering Mode |
筆者の解釈 | |
---|---|---|
Opaque | デフォルトの設定 | |
Cutout | png画像などのテクスチャで背景(透過されていない部分)が必要ないものを作るとき使用する | |
Fade | UIや幽霊など全体がかすんでいくようなオブジェクトを作る際に使用する | |
Transparent | 透過率を持ったリアルなオブジェクトを作る際に使用する | |
Additive | 透明度に関して問題があったり違った表現がしたい場合使用する | |
Custom | 自分でカスタマイズできる。 玄人仕様 |
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単体で非常に多くの表現ができることがわかりました。
次回は続きから見ていきたいと思います。