本日は MRTK の技術調査枠です。
MRTKStandardシェーダのChannelMapを利用する手順を記事にします。

MRTKStandardシェーダ
HoloLens を初めとする複合現実デバイスでのパフォーマンスを維持するための軽量なシェーダです。
軽量ながら Unity の Standard シェーダーと同様のビジュアルを実現することができます。
microsoft.github.io
MRTKStandardシェーダはマテリアルプロパティに基づいて最適なシェーダーコードを自動生成する「uberシェーダ」です。
Inspector でマテリアルプロパティを選択すると、有効にした機能のパフォーマンスコストのみが発生します。
チャンネルマップ(ChannelMap)
チャンネルマップはピクセル単位で以下のマテリアルプロパティを制御する場合に利用します。
・Metallic(金属)
・Smoothness(滑らかさ)
・Emission(放射)
・Occlusion(オクルージョン)
チャンネルマップはこれらの情報を1つのテクスチャにサンプリングしたものです。
1つのテクスチャに含まれる RGBA の情報がそれぞれ以下のプロパティに紐づきます。
| RGBAチャンネル | プロパティ |
|---|---|
| 赤(Red) | Metallic(金属) |
| 緑(Green) | Occlusion(オクルージョン) |
| 青(Blue) | Emission(放射) |
| 透明度(Alpha) | Smoothness(滑らかさ) |
チャンネルマップを利用する事で1つのマテリアルで様々な質感を持つオブジェクトを作成できます。
マテリアルの削減はレンダリング負荷の軽減に繋がるため、パフォーマンスがより向上します

上記例で使用しているチャンネルマップは以下のようなテクスチャになります。

テクスチャコンバイナ(Texture Combiner)
チャンネルマップはテクスチャコンバイナを使って各種プロパティの情報を持つテクスチャファイルから作成できます。
最大4つのテクスチャを1つのチャンネルマップにまとめることができます。
メニューから Mixed Reality Toolkit -> Utilities -> Texture Combiner を選択して起動します。

テクスチャコンバイナは Tools パッケージに含まれています。
メニューに Texture Combiner が表示されない場合は、Tools パッケージがインポートされていない可能性があります

テクスチャコンバイナを起動すると、ウィンドウが開きます。
2つのチャンネルマップの作成手順があります。

テクスチャ指定の場合
テクスチャ指定でチャンネルマップを作成する場合は、マップ毎にテクスチャを設定します。
以下の設定項目があります。
Metallic/Occlusion/Emission/Smoothness Map
- 各種プロパティの情報を持つテクスチャを指定します。
Input Channel
- プロパティの情報がテクスチャのRGBAいづれの情報として保持されているか指定します。
今回は全て白黒(R:0~1,G:0~1,B:0~1)のテクスチャを指定しているので[Red]を参照させています。
Metallic/Occlusion/Emission/Smoothness Uniform
- 各種プロパティのテクスチャを指定しない場合のデフォルト値です。
-0.01を指定している時は推奨のデフォルト値が使用されます。設定後、[TextureFormat]で出力形式を指定し、[Save Channel Map]で出力を行います。

これでチャンネルマップが出力されます。

チャンネルマップを適用するには、対象オブジェクトのマテリアルを MixedRealityToolkit/Standard シェーダに切り替えます。

[Channel Map]のチェックを入れて、作成したチャンネルマップを指定します。
これでチャンネルマップに基づいた質感の描画が行われます。

マテリアル指定の場合
作成済みのマテリアルを元にチャンネルマップを作成することもできます。
例えば、以下のような Unity/Standard シェーダで質感設定を行ったマテリアルを用意します。

[Standard Material]で先ほどの Unity/Standard シェーダのマテリアルを指定します。
この状態で[Autopopulate from Standard Material]を実行します。

すると、以下のように自動で設定が展開されます。
[TextureFormat]で出力形式を指定し、[Save Channel Map]で出力を行います。

チャンネルマップが作成されました。
後はテクスチャ指定と同様に、MixedRealityToolkit/Standard シェーダでチャンネルマップを使用します。

Emission(発光)のみ利用手順が少し異なるので、記事を作成しました。
bluebirdofoz.hatenablog.com