本日は昨日に引き続きMRTK3のGraphicsToolsを調査していきます。
GraphicsToolsではMRTKのShaderやレンダリングなどのグラフィックに関する機能を担うMRTK3のパッケージです。
前回はMRTKv2のMRTKStandardShaderの後継機に当たるGraphicsTools/StandardShaderを軽く触っていきました。
今回はGraphicsTools/StandardShaderのドキュメントを読み解いていきます。
〇GraphicsTools/StandardShaderドキュメント
MSのドキュメントは次にあります。
GraphicsToolsStandardシェーダーはMixedRealityデバイスでのパフォーマンスを想定しながらUnityで提供されているStandardShaderなどの汎用性の高いShaderとして提供されています。
Fluent Design Systemにのっとって機能が提供されています。
〇Fluent Design System
Fluent Design Systemはオープンソースで提供されているクロスプラットフォームの設計システムを指し、アクセシビリティとパフォーマンスを両立したデザイン指向となっています。
〇サンプル
GraphicsTools/StandardShaderの例はMaterialGalleryシーンから確認することができます。
〇設計
GraphicsTools/StandardShaderはUnityが提供しているShaderValiantを使用してShaderのプロパティに基づき、使用する機能がコンパイルされるウーバーシェーダーとなっています。
これによって使用しない機能はコンパイルされることはなく、これが多機能かつ軽量を実現している仕組みとなっています。
#pragma shader_feature_local _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHABLEND_TRANS_ON _ADDITIVE_ON #pragma shader_feature_local _DISABLE_ALBEDO_MAP ...
例えばノーマル(法線)はShader内で次のようにプリプロセッサによってコンパイルが設定されています。
half3 localNormal = input.normal; #if defined(_NORMAL) || defined(_VERTEX_EXTRUSION) #if defined(_URP) half3 worldNormal = TransformObjectToWorldNormal(localNormal); #else half3 worldNormal = UnityObjectToWorldNormal(localNormal); #endif #endif
このような仕組みを導入することで最適なパフォーマンスを提供するほかにURPなどにも対応することを可能としています。
〇提供されているシェーダーファイル
先日見たように GraphicsToolsStandardShaderではMRTKv2のMRTKStandardShaderから進化して、HLSLファイルを読み込むことで可読性を上げています。
GraphicsToolsでは次のファイルが提供されてます。
〇GraphicsToolsStandardProgram.hlsl
頂点シェーダーとフラグメント シェーダーのコアを含みます。
GrapichsToolsStandardShaderのコア部分と呼べます。
〇GraphicsToolsStandardMetaProgram
UnityによるStaticライティングに使用する頂点シェーダーとフラグメントシェーダーの実装を含みます。 この処理は実行時および実機には使用されません
〇GraphicsToolsStandardInput
頂点属性、頂点補間器、テクスチャ、テクスチャ サンプラー、マテリアルごとの定数バッファー、グローバル プロパティ、および定数の定義が含まれています。
これらはUnityCG.cgincのAppdataなどのようにGraphicsToolsStandardShaderで使用されるデータが定義されているのでしょうか?
〇GraphicsToolsCommon.hlsl
共通で使用されるメソッドと定義が記述されています。
これらのファイルはGrapchicsTools/Runtime/Shader内に存在します。
今回は長くなってしまったので以上です。
続きは次回以降見ていきます。