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が少し入っています。

Cotton Pinpoint Shirt Satin

じゃあテクスチャを描くときに絶対0、1の二値化しないといけないのかというとそういうわけではない状況もあります。

うすいほこりが乗ってるような表現をテクスチャでする場合、その部分に0.3のほこりマテリアルが乗っかってMetalnessの数値が0.7になるかもしれません。

金属の上に何か乗っているというレイヤー的な考え方だと小数点を使ってマテリアルを混ぜることはありえると思います。

当然ほこりをモデリングしてモデルの上に配置するのが一番ではありますが、なかなかそうもいかないことが多いと思いますのでそういう時にこういう表現を使うこともあるかと思います。



↑金属のマテリアルの上に埃のマテリアルを薄く要所要所で乗せた例

まとめ

これにて初級編は終了です。

Metalnessは簡単に金属質感を再現できるとても便利なパラメーターです。

便利な故にいろいろ都合よく使われがちですが、しっかり仕様を把握して必要な表現に使えるといいと思います。

関連記事