メタリック

Metallic別名:金属度、メタルネス

概要

マテリアルが金属かどうかを表す値。金属(1)は拡散色を持たず、映り込みにベースカラーの色が付く。非金属(0)は、ベースカラーの拡散色の上に、色の付かない弱い映り込みが乗る。

デモ

デモを読み込んでいます
白い線をドラッグすると、同じベースカラーの非金属(左、メタリック 0)と金属(右、メタリック 1)を見比べられます。「点光源だけ」にすると、金属には拡散色がなく、ハイライトにだけ色が付くことが分かります。

使われる場面

  • 物理ベースのマテリアル設定

    ラフネスと並ぶ基本の値である。ベースカラー、メタリック、ラフネスの三つで、多くの素材を表せる。

  • 金属と塗装の描き分け

    金色の金属と、金色に塗ったプラスチックは、同じベースカラーでもメタリックの値だけで見分けが付く。

  • メタリックマップ

    塗装が剥げて下の金属が見える箇所や、錆びた鉄と地金の境目のように、一つの物体の中で金属と非金属が混ざる箇所を、白黒のテクスチャで塗り分ける。

判断基準

こういうときこうする
鉄、金、銅、アルミのような金属1 にする。金属の色は映り込みの色として、ベースカラーに設定する。
プラスチック、木、石、布、肌、塗装面など、金属以外の素材0 にする。つやの違いはラフネスで付ける。
0 と 1 の中間の値を使いたくなった現実の素材はほぼどちらかなので、中間は避ける。中間を使うのは、錆や塗装の剥げの境目のように、金属と非金属が 1 画素の中で混ざる箇所に限る。
金属が黒っぽい、つやのない暗い塊に見える映り込む環境がない。金属は周りを映すことで見えるので、環境光(環境マップや周りの明るい物)を用意する。
金属がくすんで、鈍い色に見える金属のベースカラーは映り込みの強さそのものなので、明るめにする。sRGB の値でおおよそ 0.7 以上が目安。

こう見えたら

  • 金属のはずがプラスチックのように見える質感
  • 金属が黒っぽく、暗い塊に見える質感

指示の例

  • 金色の部分がプラスチックのように見える。メタリックを 1 にして、ラフネスは 0.3 くらいにして

  • 金属のパーツが黒くつぶれて見える。金属は周りを映して見えるので、環境光(環境マップ)を足して

  • メタリックが 0.5 のような中間の値になっている素材がある。金属なら 1、金属以外なら 0 にそろえて

  • 塗装が剥げた部分だけ金属に見せたい。メタリックマップを使って、剥げた部分だけを 1 にして

詳細

金属と非金属で、光の返し方が違う

光が物体に当たると、一部は表面で反射し(鏡面反射)、残りは中へ入る。非金属では、中に入った光が内部で散乱しながら一部の色を吸収され、四方へ出てくる。これが拡散反射で、物体の色(ベースカラー)として見える。表面での反射は、正面から見ると 4% 程度と弱く、色も付かない。

金属では、中に入った光はすぐに吸収されてしまうので、拡散反射がない。そのかわり表面で強く反射し、反射の強さが光の色(波長)によって違うので、映り込みに色が付く。金や銅の色は、この映り込みの色である。メタリックは、この二つの振る舞いのどちらで描くかを決める値である。

ベースカラーの意味が入れ替わる

物理ベースのシェーダーでは、ベースカラー cc とメタリック mm から、拡散色 cdc_d と正面の反射率 F0F_0 を次のように決める。

cd=(1−m) c,F0=(1−m)⋅0.04+m cc_d = (1 - m)\,c, \qquad F_0 = (1 - m) \cdot 0.04 + m\,c

m=0m = 0 なら、ベースカラーは拡散色になり、反射率は色のない 0.04 になる。m=1m = 1 なら、拡散色は 0 になり、ベースカラーはそのまま反射率(映り込みの色)になる。同じベースカラーでも、メタリックによって「物体の色」になるか「映り込みの色」になるかが入れ替わる。

vec3 diffuseColor = baseColor * (1.0 - metallic);  // 金属では 0
vec3 f0 = mix(vec3(0.04), baseColor, metallic);    // 金属ではベースカラーが反射率になる
vec3 color = diffuseColor * diffuseLight + specularLight * fresnel(f0, cosTheta);

デモを「点光源だけ」にすると、左の非金属は色の付いた拡散反射の上に白いハイライトが乗る。右の金属は拡散反射がないので暗く沈み、ハイライトにだけベースカラーの色が付く。

中間の値と、見分け方

現実の素材は、ほぼ金属か非金属のどちらかである。中間の値は、二つの性質を半分ずつ持つ素材を表すわけではなく、薄く濁った不自然な見た目になりやすい。中間を使うのは、錆や塗装の剥げの境目のように、1 画素の中に金属と非金属が混ざる箇所に限られる。

金属かどうかは、映り込みの色で見分けられる。映り込みやハイライトが物体と同じ色に染まっていれば金属、白っぽい映り込みの下に物体の色が見えれば非金属である。金属は周りを映すことで見えるので、映るものがない暗い環境では黒い塊になる。金属が暗く沈んで見えるときは、メタリックの値よりも先に、映り込む環境の明るさを確かめる。

関連