2017年5月18日

Unity オブジェクトの一部だけ質感を変える ~マップの超基本~


テクスチャマップでMetallicを指定する方法について簡単にメモメモ…


※このページの内容の動作確認にはUnity5.3を使用しています。
唐突ですが、ドアを用意しました。


このドアのマテリアルはこんな感じ。Unity5.3のデフォルトのシェーダーです。


Albedoの部分にテクスチャが指定してありますね。ただ、このままだとドア本体の質感とドアノブの質感が同じになってしまいます。ドアノブの部分は金属なんだから、そこだけ反射率を高くしたい!

これを実現するには、Metallic(Smoothness)の項目にテクスチャマップを指定します。「どの部分をどの程度金属っぽくさせるか」を画像で伝えればいいわけです。こちらのマニュアルページの鞄の例が非常にわかりやすいですね。てなわけで、さっそくこういう画像を作成しました。


うう、すんごく見えにくい…。UVやテクスチャの配置が雑なのは置いておいて、とにかく画像左下のドアノブに対応する箇所をRGBA(240, 240, 240, 240)、ドアの本体に対応する部分をRGBA(0, 0, 0, 32)として塗りつぶしています。

Metallicの度合いはRチャンネル(赤色)の値の大きさで決定されるので、この場合240のドアノブは金属っぽくなり、0のドア本体は完全に非金属になるわけです。また、Smoothnessの大きさはアルファチャンネル(透明度)の数値で指定できるので、240のドアノブはすごくツルツル、32しかない本体はザラザラになります。ちなみに、色はグレースケール(白~灰色~黒)にしていますが、ここではRとAしか使わないので別にGBの値はなんでもかまいません。真っ赤なマップでも機能します。

実はこれでも同じ結果になる

この画像をマテリアルのインスペクタ上にあるMetallicの項目に設定しましょう。設定するには、通常のテクスチャと同じように"Metallic"という文字の前の〇をクリックして画像を選択するか、その隣の□の部分に画像を直接ドロップします。


設定した結果がこちら。


ドアノブの部分だけが金属になりSkyboxが映りこむようになりました。あとはReflection Probeなんかを設置すれば周囲の景色を映す綺麗な反射になりますね。この「マップ」の考え方はNormal MapやHeight Mapなど様々な局面で使われるので、是非ともモノにしたいところです…

0 件のコメント:

コメントを投稿