ラベル Metalness の投稿を表示しています。 すべての投稿を表示
ラベル Metalness の投稿を表示しています。 すべての投稿を表示

2024年11月29日金曜日

[Arnold]シェーダーパラメーター・Metalness金属再現編

以前の記事でMetalnessが何をしてるのか大枠を説明しました。

今回はMetalnessを使って金属の質感を再現する方法について見ていきましょう!


Metalnessを使わない金属の反射の再現方法

金属の反射を再現するのに、フレネル反射モデルで使われるn値とk値の2つのパラメータがあります。これらは、物質の光の反射特性を定義するために使われます。

n値(屈折率): 金属の表面における屈折率を示し、光がその表面に入るときの屈折の度合いを決めます。

k値(消衰係数): 光が金属内部に入ったときの減衰や吸収の度合いを示します。k値が高いと、光がすぐに吸収されるため、表面での反射が強くなります。

この2つの値を使うことで、CGでリアルな金属の見た目、特に色や光沢の正確な表現が可能になります。

アーノルドでは以前これをComplex IORというシェーダーで再現可能でしたが、こちらは現在使えないと思います。

Metalnessの目的

Artist Friendly Metallic Fresnel

↑2014年のこちらの記事が詳しく記載してくれています。

Metalnessは、n値とk値を直接扱う代わりに、もっと直感的に金属の見た目を再現できる仕組みです。

n値 → F0(正面からの反射率)

k値 → F90(斜めからの反射率)

と変換し、アーティストがスライダーや色を設定するだけで、複雑な金属のフレネル効果を簡単にシミュレーションできます。

これにより、物理的に正しい金属表現をアーティストが手軽に行えるようにするのがMetalnessです。

金属再現の際に使う数値一覧とレンダー画像

こちらはアーノルドで金属を再現するための数値表です。

アーノルドユーザーガイドより参照

上の図のリストのようにパラメーターを設定することで現実の金属の計測値をもとに質感を設定することが可能です。

Metalnessを1にしたうえでBase ColorとSpecular Colorにそれぞれの色を入れることが必要です。

金(Gold)に設定するならこんな感じです。


上のアーノルドの表の9つの金属をすべて設定してレンダリングするとこんな感じです。

こうやって見ると白系の金属もそれぞれ結構違いますね。

今回はここまで!

Metalnessをうまく使って金属をかっこよく見せていきましょう!

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は簡単に金属質感を再現できるとても便利なパラメーターです。

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

関連記事