2023年12月22日金曜日

[Arnold]シェーダーパラメーター・Metalness初級編

ArnoldのAi Standard SurfaceのMetalnessのパラメーターに関してまとめてみました。今回は初級編ということで挙動の説明になります。
シェーダーの挙動を把握して使いこなすことでよりよい質感のアセットになると思います。

Ai Standard SurfaceのMetalnessとは?


金属か非金属を定義するパラメーターです。
だと非金属
だと金属
になります。
Metalness 0

Metalness 1

どういう挙動をするの?

Metalnessを1にすると起きること
・BaseのColorがDiffuseではなくSpecularで出るようになります。書き出されるAOVもDiffuseがなくなりSpecularのみになります。

Metalness0の画像
DiffuseとSpecularが出ているのがわかります。

Metalness1の画像
Diffuseが無くなり、SpecularにシェーダーのBasecolorに入れていた赤色が反映されています。


・IORの入力がキャンセルされ金属の鏡面反射を再現するのに必要な数値に内部的に処理されていると考えられます。
IOR入力だと0または100のような大きな数値で同じような見た目になります。

Metalness1のレンダー画像とシェーダーパラメーター


IORを0、BaseのWreightを0にしてSpecularだけ出るようにしているレンダー画像とシェーダーパラメーター

上記二枚は微妙にレンダー結果は違いますがほとんど同じ状態の見た目と言えると思います。
とりあえずこの2点をおさえておきましょう。

Metalnessを扱う際の注意点

メタルネスの数値は基本的に0か1か、つまり金属か金属じゃないかを定義するために使います。
たとえば非金属に0.5とか小数点の数値を入れてスペキュラーの調整をするというのはPBR(物理的なレンダリング)的にはNGです。


画像はMetalnessの数値が左から0、0.5、1の画像です。
左はプラスチックのようで、右は金のようだが、真ん中のものはなんとも言えない質感です。

小数点を入力したときの問題点は、
① BaseのColorの色が多少Specular Colorに反映されてしまうこと
② 小数点の時にIORの数値が何として扱われてるのかが不明なこと

①は一部特殊な例をのぞいて多くの非金属のSpecular Colorは白(RGBすべて1の数値)が望ましいからです。

②はIORの数値は素材ごとに計測値があり、素材を再現するのに不明な数値を扱うのは物理的に正しくなく、環境によって望まない見え方をしてしまう可能性があるから問題になります。

小数点を入れるイレギュラーなものとして、サテン、ベルベットなどの光沢のある生地を簡易的に表現することに使われることがあります。こういう場合はプロジェクトの仕様的に問題なければ選択肢の一つに入れてもいいかもしれません。
↓このマテリアルはサテン生地ですが、Metalnessが少し入っています。

じゃあテクスチャを描くときに絶対0、1の二値化しないといけないのかというとそういうわけではありません。
うすいほこりが乗ってるときなどはその部分は0.3とかの数値になるかもしれません。
金属の上に何か乗っているというレイヤー的な考え方だと小数点を使ってマテリアルを混ぜることはありえると思います。
↑金属のマテリアルの上に埃のマテリアルを薄く要所要所で乗せた例

他レンダラーを使う際の注意事項

レンダラーによってシェーダーのMetalnessパラメーターの使い方は若干異なることがあります。例えばVray MtlとAi Standad Surfaceでは同じMetalnessでも金属を再現するために必要な他のアトリビュートの使い方が違います。
細かい仕様は各レンダラーのシェーダーページを参考にしてください。

まとめ

これにて初級編は終了です。
Metalnessは簡単に金属質感を再現できるとても便利なパラメーターです。
便利な故にいろいろ都合よく使われがちですが、しっかり仕様を把握して必要な表現に使えるといいと思います。
次は実践編?を更新予定です。