Unityで使うためのメタリックマップを、Blender2.8のテクスチャペイントで作ってみます。
Unityのメタリックマップは、金属感を表すMetallicをメタリックマップのR値で、なめらかさを表すSmoothnessをアルファ値で制御します。つまり、画像の真っ白な部分は一番金属っぽくて、真っ黒な部分は金属感がなく、不透明な部分はなめらかで、透明な部分は粗いです。
こういった画像をBlenderのテクスチャペイントモードで、色を変えた時のモデル表面の金属感やなめらかさの変化を見ながら作りたいです。
BlenderではPrincipled BSDFを使います。
Metallicは同じだとして、BlenderにはSmoothnessはなく、Roughnessがあります。
これはUnityのSmoothnessとは逆に、値が大きいほど表面が粗く、小さいほどなめらかになります。
これらを考慮してシェーダーエディターでマテリアルを編集してみました。
まずテクスチャペイントモードでテクスチャスロットに2つのベースカラーテクスチャを追加して、片方はそのまま「Base Color」につなげます。
もう片方はメタリックマップとして使うので、「Color」はPrinciple BSDFの「Metallic」に、「Alpha」は1から引いて「Roughness」につなげました。
Principle BSDFの他の項目の大半は0にしています。
メタリックマップを描く
テクスチャペイントモードにして、テクスチャスロットでメタリックマップを選択し、Viewport ShadingをMaterial Previewにします。
真っ白に塗ると、最も金属的でなめらかになります。
黒く塗った部分は金属感がなくなります。
グレーで塗るとその中間ぐらいです。
ブラシのBlendを「Mix」から「Erase Alpha」に変えると、塗った部分が透明になります。このときの色は関係ありません。
透明な部分はAlphaが0なので、Roughnessが1になって粗くなり、はっきりした像が映らなくなります。
先に白で塗っていた部分と黒で塗っていた部分で表面の色が変わっています。
不透明にするには、ブラシのBlendを「Add Alpha」にします。
元々の色のまま不透明に戻りました。
不透明な部分はAlphaで1なので、Roughnessは0で、なめらかになり、表面にはっきりした像が映ります。
透明度はブラシのストレングスで変えられます。
メタリックマップをUnityで使う
こんなメタリックマップを作りました。
これを画像ファイルとして保存します。
Unityでインポートして、マテリアルにアタッチし、Smoothnessを1にしました。
マテリアルをPlaneオブジェクトに付け、表面に映り込ませるためのCubeをいくつか配置し、リフレクションプローブも使います。
すると、表面の金属感や滑らかさが変わります。
メタリックマップの不透明な部分ではCubeが映り、透明な部分では映りません。
これはこのあたりを行き来しています。
黒く塗った部分は金属っぽくないですが、不透明なのでちゃんとCubeが移っています。