MRが楽しい

MRやVRについて学習したことを書き残す

MRTK ChannelMap Makerアドオンを使ってMRTKのチャンネルマップを作成する その2

本日は MRTK と Blender の利用手順枠です。
MRTK ChannelMap Maker アドオンを使ってMRTKのチャンネルマップを作成する手順を記事にします。
f:id:bluebirdofoz:20200729030148j:plain

その2は書き出した画像ファイルを Unity 上の MRTKStandard シェーダに設定する手順です。
前回記事の続きです。
bluebirdofoz.hatenablog.com

3Dモデルの出力

変換後の blend ファイルから3Dモデルをファイル出力します。
今回は fbx 形式で出力を行います。[エクスポート] -> [FBX (.fbx)] を選択します。
f:id:bluebirdofoz:20200729030214j:plain

ファイル出力のウィンドウが開きます。
出力先のディレクトリとファイル名を指定して[FBXをエクスポート]を実行します。
Unity へ取り込むモデルの場合、[!実験的機能!トランスフォーム適用]のチェックを入れておくと、Blender でのトランスフォームと Unity でのトランスフォームが一致します。
f:id:bluebirdofoz:20200729030224j:plain

これで Unity に取り込むための3Dモデルと、画像ファイルの準備が整いました。
f:id:bluebirdofoz:20200729030258j:plain

Unity への取り込み

Unity への取り込みを行います。
MRTKStandard シェーダとテクスチャコンバイナ(Texture Combiner)を利用するため、MRTK の Foundation と Tools パッケージのインポートが必要です。
github.com
f:id:bluebirdofoz:20200729030320j:plain

先ほど出力した3Dモデルと画像ファイルを Unity プロジェクトに取り込みます。
f:id:bluebirdofoz:20200729030332j:plain

マテリアル編集による質感の変化を確認するため、シーンに3Dモデルを配置して[Scene]画面で表示します。
f:id:bluebirdofoz:20200729030345j:plain

MRTKStandardシェーダを設定する

3Dモデルのマテリアル情報を編集するため、マテリアルデータを作成します。
fbx ファイルを選択して[Inspector]ビューを開き、[Materials]タブから[Extract Materials..]を実行します。
f:id:bluebirdofoz:20200729030403j:plain

ファイル選択のダイアログが開くので、マテリアルデータを出力するフォルダを選んで[フォルダーの選択]をクリックします。
これでマテリアルデータが出力されました。
f:id:bluebirdofoz:20200729030420j:plain

出力したマテリアルには、デフォルトでは[Unity/Standard]シェーダが設定されています。
[Shader]から[Mixed Reality Toolkits/Standard]シェーダに切り替えます。
f:id:bluebirdofoz:20200729030434j:plain
f:id:bluebirdofoz:20200729030446j:plain

これで[Mixed Reality Toolkits/Standard]シェーダのマテリアルを設定できました。
f:id:bluebirdofoz:20200729030458j:plain

チャンネルマップを作成して設定する

次にチャンネルマップを作成して質感設定を反映します。
テクスチャコンバイナ(Texture Combiner)を利用すると、4つのテクスチャをを1つのチャンネルマップに変換できます。

メニューから [Mixed Reality Toolkit] -> [Utilities] -> [Texture Combiner] を選択して起動します。
f:id:bluebirdofoz:20200729030510j:plain

テクスチャコンバイナのウィンドウが開きます。
マップ毎にテクスチャを設定します。以下の設定項目があります。

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を指定している時は推奨のデフォルト値が使用されます。

f:id:bluebirdofoz:20200729030525j:plain

MRTK ChannelMap Makerアドオンで作成した各種テクスチャを以下の対応で設定します。
なお、必ずしも全てのマップを設定する必要はありません。

TextureName_metallic.png   -> Metallic Map
TextureName_occlusion.png  -> Occlusion Map
TextureName_emission.png   -> Emission Map
TextureName_smoothness.png -> Smoothness Map

f:id:bluebirdofoz:20200729030615j:plain

全てのテクスチャは白黒(R:0~1,G:0~1,B:0~1)で情報を出力しています。
このため、全ての[Input Channel]は[Red/Blue/Green]のいづれかに設定してください。
f:id:bluebirdofoz:20200729030627j:plain

設定後、[TextureFormat]で出力形式を指定し、[Save Channel Map]で出力を行います。
f:id:bluebirdofoz:20200729030637j:plain

これでチャンネルマップが出力されます。
f:id:bluebirdofoz:20200729030648j:plain

先ほど作成したマテリアルの[Channel Map]のチェックを入れて、作成したチャンネルマップを指定します。
するとチャンネルマップに基づいた質感の描画が行われます。
f:id:bluebirdofoz:20200729030705j:plain

シーンを再生してワールド内で想定通りの質感となるか確認します。
f:id:bluebirdofoz:20200729030716j:plain

これでBlender 内で作成した質感設定を Unity 内の MRTKStandard で再構成することができました。

Emission(発光)を利用する際は以下の手順を参考にしてください。
Unityで改めてカラー情報を設定する必要があるため、Blenderから発光色は引き継げず、発光箇所のみの引継ぎとなります。
bluebirdofoz.hatenablog.com

Blender内でのレンダリング結果

f:id:bluebirdofoz:20200729030728j:plain

Unity内で再構成したレンダリング結果

f:id:bluebirdofoz:20200729030739j:plain

既知の問題点

2020/08/10現在、以下の問題を確認しています。
解決方法が分かって気が向いたら、アドオンを更新します。

透明度の中間値が設定できない

現状 Blender の Cycles エンジンは透明度のベイク出力が行えません。
このため、カラー設定による透明度は出力されません。
代替策として、Blender での互換マテリアルに[伝播]項目を追加しています。
本項目に 1 を設定したとき、該当箇所のカラーベイクは行わず、そのマテリアルのカラーは完全な透明色となります。