MRTK 標準シェーダー

標準シェーダーの例

mrtk 標準シェーディングシステムでは、Unity の標準シェーダーに似た視覚エフェクトを実現し、 Fluent Design Systemの原則を実装し、mixed reality デバイスでパフォーマンスを維持できる、単一の柔軟なシェーダーを利用しています。

シーンの例

シェーダーの素材の例については、「」の MaterialGallery シーンを参照して MRTK/Examples/Demos/StandardShader/Scenes/ ください。 このシーンのすべての素材は、MRTK/Standard シェーダーを使用しています。

素材ギャラリー

「」の StandardMaterialComparison シーンで、Unity/標準シェーダーの例に対して MRTK/standard シェーダーを比較してテストするための比較シーンを見つけることができ MRTK/Examples/Demos/StandardShader/Scenes/ ます。

素材の比較

アーキテクチャ

MRTK/標準シェーディングシステムは、 Unity のシェーダープログラムのバリアント機能 を使用して、マテリアルのプロパティに基づいて最適なシェーダーコードを自動生成する "uber シェーダー" です。 ユーザーがマテリアルインスペクターで素材プロパティを選択すると、それらのプロパティによって有効になった機能についてのみ、パフォーマンスコストが発生します。

マテリアルインスペクター

カスタムマテリアルインスペクターは、という名前の MRTK/Standard シェーダー用に存在し MixedRealityStandardShaderGUI.cs ます。 インスペクターでは、レンダリング状態を設定するときのユーザーの選択と aides に基づいて、シェーダーの機能を自動的に有効または無効にします。 各機能の詳細については 、Unity エディターの各プロパティにマウスのポインターを合わせて、ツールヒントを参照してください。

マテリアルインスペクター

インスペクターの最初の部分は、素材のレンダリング状態を制御します。 表示モード は、マテリアルをどのようにレンダリングするかを決定します。 MRTK/Standard シェーダーの目的は、 Unity/standard シェーダーのレンダリングモードをミラー化することです。 MRTK/Standard シェーダーには、ユーザーコントロールを完了するための 加法 レンダリングモードと カスタム レンダリングモードも含まれています。

表示モード Description
非透過的 標準透明な領域を持たない通常のソリッドオブジェクトに適しています。
抜き 不透明な領域と透明な領域の間にエッジがある透明効果を作成できるようにします。 このモードでは、半透明の領域は存在しません。テクスチャは、100% 不透明または非表示のいずれかになります。 これは、透明度を使用して、vegetation などの素材の形状を作成する場合に便利です。
フェード 透明度の値が、反射の光源や反射を含むオブジェクトを完全にフェードアウトできるようにします。 このモードは、フェードインまたはフェードアウトするオブジェクトをアニメーション化する場合に便利です。反射とハイライトも薄く表示されるため、プラスチックやガラスなどの実際の透明な素材のレンダリングには適していません。
透明 明確なプラスチックやガラスなどの実際の透明なマテリアルをレンダリングする場合に適しています。 このモードでは、素材は透明度の値 (テクスチャのアルファチャネルと濃淡の色のアルファ) を引き継ぎます。 ただし、反射と光源のハイライトは、実際に透明なマテリアルの場合と同様に、完全な明瞭度でも表示されます。
加法 前のピクセルの色を現在のピクセルの色で合計する加法ブレンドモードを有効にします。 これは、透明度の並べ替えの問題を回避するために推奨される透過性モードです。
Custom 表示モードのすべての側面を手動で制御できます。 詳細な使用のみを目的としています。

表示モード

カリングモード Description
オフ 顔カリングを無効にします。 2つのサイドメッシュが必要な場合にのみ、カリングを Off に設定する必要があります。
Front フロントフェイスカリングを有効にします。
戻る 標準 背面カリングを有効にします。 表示パフォーマンスを向上させるために、バックフェイスカリングを可能な限り頻繁に有効にする必要があります。

パフォーマンス

Unity standard shader で MRTK Standard シェーダーを使用する主な利点の1つは、パフォーマンスです。 MRTK Standard シェーダーは、有効になっている機能だけを利用できるように拡張できます。 ただし、MRTK の標準シェーダーは、Unity 標準シェーダーと同じような美しい結果を提供するためにも記述されていますが、はるかに低コストです。 シェーダーのパフォーマンスを比較する簡単な方法の1つは、GPU で実行する必要がある操作の数です。 もちろん、計算の大きさは、有効な機能やその他のレンダリング構成によって変動する場合があります。 ただし、一般に、MRTK Standard shader は Unity の標準シェーダーよりも大幅に計算を実行します。

Unity Standard shader statistics の例

Unity の標準シェーダーの統計情報

MRTK Standard shader statistics の例

MRTK 標準シェーダーの統計情報

注意

これらの結果を生成するには、Unity インスペクターで シェーダー資産 を選択して表示し、[ コンパイルしてコードを表示 ] ボタンをクリックします。

照明

MRTK/Standard では、照明に単純な近似を使用します。 このシェーダーは、物理的な正確性とエネルギーの節約に対しては計算されないため、すばやく効率的にレンダリングします。 Blinn-Phong は、物理的に基づく照明に近いフレネルと画像ベースの光源とブレンドされる主要な光源技法です。 シェーダーは、次のライティング手法をサポートしています。

指向性ライト

シェーダーは、シーン内の最初の Unity ディレクショナルライト (有効な場合) の方向、色、および強度を尊重します。 ダイナミックポイントライト、スポットライト、またはその他の Unity ライトは、リアルタイム照明では考慮されません。

球高周波

シェーダーは、 球高周波を使用してシーン内のライトの概数を表示します (有効になっている場合)。 球高周波の計算は、計算コストを削減するために頂点ごとに実行されます。

ライトマッピング

静的な光源の場合、シェーダーは、Unity の ライトマッピングシステムによって構築されたライトマップを尊重します。 ライトマップを使用するには、単にレンダラーを静的 (またはライトマップ静的) としてマークします。

ホバー ライト

近接ライト

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

MRTK にはアップグレードパスが含まれています。これにより、開発者は、MRTK シェーダーで Unity の軽量のスクリプト可能なレンダリングパイプライン (LWRP) を利用できます。 Unity 2019.1.1 f1 および簡易 RP 5.7.2 パッケージでテストされています。 または、LWRP の概要については、こちらの ページを参照してください。

mrtk のアップグレードを実行するには、 Mixed Reality Toolkit-> ユーティリティ-> upgrade mrtk Standard Shader for ライトウェイトレンダリングパイプライン を選択します。

lwrp のアップグレード

アップグレードが完了すると、MRTK/Standard シェーダーが変更され、マゼンタ (シェーダーエラー) マテリアルが修正される必要があります。 アップグレードが正常に行われたことを確認するには、コンソールで、ライトウェイトレンダリングパイプラインで使用するために、アップグレードされた assets/MixedRealityToolkit/StandardAssets/shader/MixedRealityStandard を確認します。

UGUI のサポート

MRTK 標準シェーディングシステムは、Unity の組み込み UI システムと連携して動作します。 Unity UI コンポーネントでは、unity_ObjectToWorld 行列は、グラフィックコンポーネントが存在するローカル変換の変換行列ではなく、親キャンバスの変換行列です。 多くの MRTK/標準シェーダーの効果では、オブジェクトのスケールが認識されている必要があります。 この問題を解決するために、 ScaleMeshEffect.cs UI メッシュの構築中に、によってスケーリング情報が UV チャネル属性に格納されます。

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

MRTK 内の Canvas では、必要な場合に の追加 ScaleMeshEffect.cs を求めるメッセージが表示されます。

スケール メッシュ効果

テクスチャ コンバイナー

ピクセル の金属ごとの Unity 標準シェーダーとのパリティを向上させるために、スムーズ、エミシブ、およびオクルージョンの値はすべて、チャネル パッキング を介 して制御できます。 次に例を示します。

チャネル マップの例

チャネル パッキングを使用する場合は、4 つの個別のテクスチャではなく、1 つのテクスチャをサンプリングしてメモリに読み込む必要があります。 テクスチャ マップを、テキストやPhotoshop などのプログラムで記述する場合は、次のようにハンドパックできます。

チャネル プロパティ
[赤] 金属
[緑] オクルージョン
エミッション (グレースケール)
Alpha 滑らか さ

または、MRTK テクスチャ コンバイナー ツールを使用することもできます。 ツールを開くために、次のウィンドウを開Mixed Reality Toolkit -> ユーティリティ -> テクスチャ コンバイナー] を選択します。

テクスチャ コンバイナーの例

このウィンドウは、Unity 標準シェーダーを選択し、[Autopopulate from Standard Material]をクリックすることで自動的に入力できます。 または、赤、緑、青、またはアルファ チャネルごとにテクスチャ (または定数値) を手動で指定することもできます。 テクスチャの組み合わせは GPU アクセラレータであり、入力テクスチャに CPU アクセス可能である必要はない。

その他の機能に関するドキュメント

MRTK/Standard シェーダーで使用できる機能の詳細の一部を次に示します。

プリミティブ クリッピング

プリミティブ クリッピング

メッシュのアウトライン

多くのメッシュ アウトライン手法は、後処理手法 を使用して行 われます。 後処理は優れた品質のアウトラインを提供しますが、多くのデバイスで非常にコストがかかるMixed Realityがあります。 メッシュ アウトラインの使用方法を示すシーンは、 の下の OutlineExamples シーンで確認 できます MRTK/Examples/Demos/StandardShader/Scenes/

Mesh Outline

MeshOutline.csMeshOutlineHierarchy.cs を使用して、メッシュ レンダラーの周囲にアウトラインをレンダリングできます。 このコンポーネントを有効にすると、概要が示されているオブジェクトの追加のレンダリング パスが導入されますが、モバイル Mixed Reality デバイスでパフォーマンスを高く実行するように設計され、ポスト プロセスは利用されません。 この効果の制限には、水密ではない (または 2 つの面である必要がある) オブジェクトではうまく機能しない場合や、重なり合うオブジェクトで深さの並べ替えの問題が発生する可能性があります。

アウトライン動作は、MRTK/Standard シェーダーと組み合わせて使用するように設計されています。 アウトライン素材は通常、単色の非点灯色ですが、さまざまな効果を実現するように構成できます。 アウトライン マテリアルの既定の構成は次のとおりです。

Mesh Outline Material
  1. 深度書き込み - アウトライン素材では無効にし、アウトラインが他のオブジェクトのレンダリングを妨げるのを防ぐ必要があります。
  2. 頂点の押し出し - アウトラインをレンダリングするには、有効にする必要があります。
  3. Smooth Normals を使用する - この設定は、一部のメッシュでは省略可能です。 押し出しは、頂点を頂点法線に沿って移動することで発生します。一部のメッシュでは、既定の法線に沿って押し出され、アウトラインに不連続性が発生します。 これらの不連続性を修正するには、このチェック ボックスをオンにして、 によって生成される別のスムーズな法線セットを使用できます。 MeshSmoother.cs

MeshSmoother.cs は、メッシュ上でスムーズな法線を自動的に生成するために使用できるコンポーネントです。 このメソッドは、空間内の同じ位置を共有するメッシュ内の頂点をグループ化し、それらの頂点の法線を平均します。 このプロセスでは、基になるメッシュのコピーが作成され、必要な場合にのみ使用する必要があります。

Smooth Normals Outline
  1. を介して生成された滑らかな法線 MeshSmoother.cs
  2. 使用される既定の法線。キューブの角の周りの成果物に注意してください。

ステンシル テスト

さまざまな効果を実現するために、構成可能なステンシル テスト サポートが組み込まれています。 ポータルなど:

ステンシル テスト

インスタンス化された色のサポート

何千もの GPU インスタンス化メッシュに固有の素材プロパティを提供するインスタンス化された色のサポート:

インスタンス化されたプロパティ

Triplanar マッピング

Triplanar マッピングは、プログラムによってメッシュをテクスチャ化する手法です。 多くの場合、地形、UV のないメッシュ、または図形の折りたたみ解除が困難な場合に使用されます。 この実装では、ワールドまたはローカルの空間投影、ブレンドの滑らかさ、および通常のマップのサポートがサポートされます。 使用する各テクスチャには 3 つのテクスチャ サンプルが必要なので、パフォーマンスクリティカルな状況では注意が必要です。

triplanar

頂点の押し出し

ワールド空間での頂点の押し出し。 押し出された境界ボリュームまたは切り替えメッシュを視覚化する場合に便利です。

通常のマップ スケール 1

その他

Albedo の最適化を制御するチェック ボックス。 最適化として、albedo テクスチャが指定されていない場合、albedo 操作は無効になります。 これは、リモート テクスチャの読み込 みを制御する場合に便利です

このチェック ボックスをオンにします。

albedo の割り当て

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

通常のマップ スケール 2

こちらもご覧ください