V-Ray のMetalness ワークフロー [リアルタイム系BPR シェーディング互換]
PBRワークフローをより良くサポートするために、V-Ray NextのV-Ray標準マテリアルにMetalnessパラメータを追加した理由を解説
[[以下はChaos GroupのこちらのBlog記事を翻訳した物です]]
「物理ベースレンダリング」(PBR)という用語は、多くの場合、使用されるライティングモデルやマテリアル定義が実際の物理学に基づいていることを意味しています。なお「BBRシェーディングモデル」をサポートしていないシェーダー(レンダラー)が「PBRでない」という事は誤りで、V-Ray等の多くレイトレーサーは昔からPBRに基づいたマテリアル・シェーダーを持っています。
PBRシェーディングモデルは、主に以下の2つ理由からリアルタイムレンダリングで非常に人気があります。
- 物理ベースでシンプル
- マテリアルを定義するためのパラメーターが少ない、つまりテクスチャマップが少なく済む
ゲーム業界ではメモリリソースが非常に高額なので、PBRモデルが必然的に普及し、それに伴いPBRワークフローをサポートするリソースが増えてきました。
V-Rayで使用されているような物理ベース・シェーディングモデルと、リアルタイム系で良く使用されるPBRシェーディングモデルの主な違いは「反射」がどのように記述されているかです。ほとんどの人は、これを「metalness metalness」というパラメーターとして認識しています。しかし、ほとんどの物理学書を見ても物質の「metalness」についての説明は見られません。 なので、この用語が意味することをもう少し詳しく調べてみましょう。
metalnessとは?
これは実質的に誘電体[Dielectric]と導体[Conductive]の2種類の物質的特性を区するパラメーターです。誘電体は絶縁体であり、導体は電気を通す物質です。誘電体には、ガラス、プラスチック、木材、セラミック、革などが含まれます。導体には、鋼、銅、金、すなわち金属が含まれます。
誘電体[Dielectric]
いわゆる 非金属
導体[Conductive]
いわゆる 金属
物理学では、導体は様々な反射特性を持つ為、多くの人がそれらを反射の強い素材と見なしています。レンダラが誘電体をベースとしている場合、金属は一般的にDiffuse反射を消す為に、シェーダに高いフレネル IOR値を与える必要があります(物理的な本で見られるものよりもはるかに高いIOR)
シェーダに導体[Conductive]の特性がオプションとして追加されると、金属をより簡単に表現できるようになります。ここで混乱の元になるのが、マテリアルが誘電体かもしくは導体のどちらであるかという事です。中間の状態は現実には存在しません。しかし、metalnessが、0または1のスイッチではなく0~1の変数であるという事は、metalnessのレベルが変化する事を意味します。現実の世界ではそうではありません。 PBRワークフローを行う多くのユーザーは、オブジェクトの反射率を制御するには0~1のグレースケールでmetalness値を調整し、屈折率(IOR)値はあらゆるマテリアルで同じであると信じています。これは物理的には不正確です。正確には異なるマテリアルは異なるIOR値を有し、マテリアルは”誘電性(非金属)または導体(金属)のどちら”かです。
PBR, ビデオゲームとSubstance Designer
PBRはUnityやUnrealなどのツールを使用した、リアルタイムレンダリングの世界で非常に普及しており、ビデオゲーム業界で人気があります。この業界でよく使用されているツールの1つとしてAllegorithmic社の Substance Designer があります。 Substanceでは、アーティストがmetalnessマップを含むPBRシェーディングに合ったマップをペイントする事ができます。
しかし、現在 Substance 製品はゲーム業界以外にもV-Ray等のオフラインレンダラーを使用する建築、VFX業界でも使用され初めています。したがってSubstanceを使用するユーザーの多くは、V-Rayでもこれらのマップを使用したいと考えています。そのため、V-Ray Nextでは、PBRワークフローをより良くサポートするために、MetalnessパラメータをV-Ray標準マテリアルに含めることにしました。
PBR ワークフロー
metalnessは オン(1)またはオフ(0)のどちからである事を確認したので、この状態でマテリアルをどのように設定するのかを見てみましょう。
metalnessがオフ(0)の場合、誘電体に基づくシェーディングとなります。(いわゆるこれまでのVRayMtlです。) Diffuseカラーはシェーディングのランバート(いわゆる拡散色)を制御します。Reflectionカラーは反射全体の乗数として機能し、(Refraction)IOR が 視線方向を向いている面の反射率を制御します(いわゆるフレネル反射)。選択したBRDFモデルに応じて全体的な散乱量をGlossiness (roughnessの逆数)で指定します。
V-Ray Nextで導入された Metalness値を1にすることによって導体(金属)に基づくにシェーディングに切り替えると、各パラメーターは異なる意味を持ちます:
- 金属には拡散色(Diffuse Color)がないので、VRayMtlのDiffuseカラーはベースカラーまたはアルベドカラーとして知られているものになります。
- V-RayMtlのReflectionカラーは、適切な反射率とエネルギーの保存を守る為に「白」に設定する必要があります。これがなければ視射角の場所が100%反射する事がありません。
- どのくらい反射にベースカラーがブレンドされるかは、フレネル効果と同じIOR値によって制御されます。素材全体が基本的に反射素材であるため、これは非常に微妙な効果である事に気づくでしょう。これは2つの異なる反射をブレンドさせるようなものです。
- VRayMtlのGlossinessは光沢感を制御します。なおGlossinessではなく”Roughness”マップを使用する場合(Substanceでは”Roughness”が使われます)、V-RayMtlにGlossinessの逆数である”Roughness”使うように切り替えることができます。
いくつかの実例
V-RayMtl でMetalnessマテリアルの一般的なワークフロー設定例を見てみましょう。
Metalness1; Diffuse 1(白); Reflection 1(白); Glossiness 1.0; IOR 1.5
いわゆるミラーです。
Metalness1; Diffuse 0(黒); Reflection 1(白); Glossiness 1.0; IOR 1.5
Diffuseカラーを黒にした事で金属反射(ベースカラー)が黒となっています。
Metalness1; Diffuse 1(白); Reflection 1(白); Glossiness 1.0; IOR 2.0
IORを2.0に引き上げた事でフレネル反射の視線方向を向いている面の反射率が強くなって、金属色(ベースカラー)が薄く見えます。
Metalness1; Diffuse ゴールドカラー; Reflection 1(白); Glossiness 1.0; IOR 1.35
IORを下げた事で視線方向を向いている面の反射率が弱くなり、より金属反射(ベースカラー)が強く見えます。
Metalness1; Diffuse 非常に暗いグレー(46,46,46); Reflection 1(白); Glossiness 0.6; IOR 1.5
薄黒い金属反射ですが、Glossinessを下げた事で反射がぼやけています。
IORについて
前にも述べたようにIOR値は物理的に正確なマテリアルを作成する際に重要な役割を果たします。したがって、これをシェーダの一部として考慮する必要があります。実際に https://ReflectiveIndex.info は、さまざまな素材の適切なIORを理解するための素晴らしいリソースです。しかしながら現在のV-RayMtlにReflectiveIndex.infoは波長に基づいたデータベースなので、そのままの数値を入力しても正確再現する事ができません。そのためChaos GroupではMetalnessワークフロー用に ReflectiveIndex.info から算出した一般的な金属素材の設定チャートを作成しました。
この値を計算するプログラムはこちらから参照できます。https://github.com/vkoylazov/metalness
名前 | Base (diffuse) color | Reflection color | IOR | Metalness | Base color (web) | Base color (sRGB) | ||||
---|---|---|---|---|---|---|---|---|---|---|
Red | Green | Blue | Red | Green | Blue | |||||
銀 | 252 | 250 | 249 | 255 | 255 | 255 | 1.082 | 1.0 | fefefd | |
金 | 243 | 201 | 104 | 255 | 255 | 255 | 1.35002 | 1.0 | fbe6ab | |
銅 | 238 | 158 | 137 | 255 | 255 | 255 | 1.21901 | 1.0 | f8cfc2 | |
アルミニウム | 230 | 233 | 235 | 255 | 255 | 255 | 1.002 | 1.0 | f5f6f6 | |
クロム | 141 | 141 | 141 | 255 | 255 | 255 | 1.03 | 1.0 | c5c5c5 | |
鉛 | 167 | 168 | 176 | 255 | 255 | 255 | 1.016 | 1.0 | d4d5d9 | |
プラチナ | 243 | 238 | 216 | 255 | 255 | 255 | 1.024 | 1.0 | faf8ee | |
チタン | 246 | 239 | 208 | 255 | 255 | 255 | 1.086 | 1.0 | fcf9ea | |
タングステン | 236 | 213 | 193 | 255 | 255 | 255 | 1.007 | 1.0 | f7ece2 | |
鉄 | 226 | 223 | 210 | 255 | 255 | 255 | 1.006 | 1.0 | f3f1eb | |
バナジウム | 241 | 228 | 199 | 255 | 255 | 255 | 1.034 | 1.0 | faf3e5 | |
亜鉛 | 223 | 221 | 218 | 255 | 255 | 255 | 1.011 | 1.0 | f1f0ef | |
ニッケル | 226 | 219 | 192 | 255 | 255 | 255 | 1.016 | 1.0 | f3efe2 | |
水銀 | 199 | 198 | 198 | 255 | 255 | 255 | 1.013 | 1.0 | e5e5e5 | |
コバルト | 174 | 167 | 157 | 255 | 255 | 255 | 1.031 | 1.0 | d8d4cf |
ReflectiveIndex.infoサイトから算出した金属設定の例を以下に示します:
つやけしアルミニウム
鏡面仕上げしたアルミニウム
タングステン
銅
Metalness へのテクスチャーマップ
多くのユーザーがMetalnessパラメーター(金属性)をマップでコントロールしていますが、前項で解説した様に、Metalnessテクスチャマップは、誘電体(非金属)と導体(金属)をスイッチする「マスク」として使用する必要があります。
以下は、Substance Designerを使用して1枚のビットマップから、誘電体(非金属)と導体(金属)の2つの質感を持つマテリアルを生成した例です。Metalness用のマップは 誘電体(非金属)と導体(金属)を指定するマスクテクスチャ(白黒マップ)として生成します。ベースカラー、metalness、法線マップ、roughnessマップを生成します。
Substance DesignerからのテクスチャーをV-RayMtlにセットた例。Metalnessパラメーターのマップを使う事で、一部銅メッキが剥がれたような金属と非金属マテリアルが混在するマテリアルを生成できます。
Substance Designerでのシェーディングツリー
Substance DesignerからのテクスチャーをV-RayMtlにセットた例。Metalnessパラメーターのマップを使う事で、一部銅メッキが剥がれたような金属と非金属マテリアルが混在するマテリアルを生成できます。
まとめ
PBRマテリアルは非常に人気があり、特にリアルタイムレンダリングで重要になって来ています。多くのユーザーが、リアルタイム用のPBRテクスチャをV-Rayでも使用したいと考えているでしょう。V-Ray Nextの標準V-RayMtlにMetalness変数が追加された事で、ユーザーはまったく新しいシェーダを使用せずに標準のV-RayMtlでリアルタイム系PBRワークフローを使用する事ができます。
最新記事 by Yamauchi (全て見る)
- V-Ray ルミネアライト - 2024-11-22
- V-Ray 7 for 3ds Max パブリックベータ - 2024-10-07
- Chaos Unboxed ロードマップをアナウンス - 2024-02-28