dskjal
広告
広告

Principled BSDF の使い方

カテゴリ:blender

Blender のバージョン 4.0 からは Principled v2 BSDF になる。Principled v2 BSDF については Blender の Principled v2 BSDF を参照。

目次

Principled BSDF の特徴

フレネルの自動調整

実際のマテリアルでは表面が粗いときフレネルは小さくなる。従来のノードの場合、粗さを上げたときに手動でフレネルノードを調整しなければならなかった。Principled BSDF の場合は粗さを変更すると、ノードの内部で自動的に最適なフレネルを設定する。

PBR のデファクトスタンダード(2018年現在)

Substance Painter、Render Man、Unreal、Houdini でも使われており、それらのツールと連携するならば Principled BSDF を使う方がいい。

PBR に基づいてマテリアルを作成すると、アーティストのスキルに依存せずにリアリティのあるマテリアルを作成できる。Principled BSDF の最大の利点はツール間でマテリアルのルックの違いを最小化するところにある。

使い方

よく使うパラメータ

ベースカラー

マテリアルの色で、テクスチャを使うときはディフューズまたはアルベドテクスチャを接続する。

メタリック

金属であれば1、そうでなければ0を指定する。0~1の間も指定できるが、現実世界の物質で半メタリックのマテリアルはめったに存在しない。

テクスチャを渡すときは色空間を非カラーデータにする必要がある。

金属(金属スペキュラー)と非金属(拡散(diffuse)+サブサーフェス(subsurface)+誘電体(dielectric)+伝播(transmission))とのブレンドを行う。つまりメタリックを1にすると、サブサーフェスや伝播のパラメータはマテリアルに影響を与えない。

粗さ

光沢の有無をきめる。テクスチャを渡すときは色空間を非カラーデータにする必要がある。

ノーマル(法線)

テクスチャで法線を渡すときは色空間を非カラーデータにする必要がある。

そのほかのパラメータ

スペキュラー

非金属の反射の明るさを調整できる。スペキュラーを変更するときは IOR も変更する必要があり、0.5 から変更しない方がいい。Substance Painter では4%の反射率が Principled BSDF のスペキュラーの 0.5 に対応する。この反射率はプラスチックの反射率で、たいていのマテリアルでこの値が推奨されている。

スペキュラーと IOR は関連があり、スペキュラーの 0-1 は IOR の 1.0-1.8 に対応する。計算式は specular=((ior−1)/(ior+1))2/0.08。以下のパターンがよく使われる。

材質IORスペキュラー
1.330.25
ガラス1.50.50
ダイアモンド1.4172.15

ハイライトが不要な時は粗さを上げるようにする。

材料の屈折率一覧表 《光学》

スペキュラーチント

ハイライトに Base Color の色をつける。これも変更しない方がいい。一般的な絶縁体(非金属)の反射には色がないからだ。

シーン(Sheen)

シーンは布を表現するときに便利だ。シーンチントは布のハイライトに色を付ける。

クリアコート

クリアコートは自動車のワックスなどを表現するのに使える。それを表現するにはメタリックを1にし、いくらかの粗さを設定してクリアコートを1にする。

透過

透過を0、透過を1にすればガラスを表現できる。ただしガラスならばガラス BSDF を使った方がわかりやすい(結果もほとんど同じ)。

伝播(Transmission)

非金属部分のブレンドを行う。ブレンドは「伝播」と「拡散+サブサーフェス+誘電体」との間で行われる。

Node Wrangler

Principled BSDF のテクスチャを自動設定する機能が Node Wrangler に追加されている。やり方は

  1. Principled BSDF ノードを選択した状態で Ctrl + Shift + T を押す
  2. ファイルを開くウインドウが表示されるので、ベースカラーや法線などのテクスチャを選択する

Node Wrangler はテクスチャ名でどのテクスチャをつなぐかを判断しており、ファイル名の一部に以下の名前があると適切に設定される。

命名規則

命名規則

複合散乱 GGX の使い方

GGX は粗さが大きい場合、現実よりも暗くなる。複合散乱 GGX は複数回のバウンスを計算するため、より正確で明るい結果になる。なので粗さが大きいかつ、暗くなることが問題になる場合に複合散乱 GGX を使う。複合散乱 GGX は計算負荷が少し高くノイズが乗りがちなので、粗さが小さい場合は GGX で十分だ。

バージョン 4.0

Blender のバージョン 4.0 で Cycles の複合散乱 GGX は計算の近似を行うことで、高速化とノイズの低減を実現した。なのでデフォルトで複合散乱 GGX が使える。

ただし異方性の強いマテリアルでは、正確な計算との解離が大きい。

Multiple Scattering GGX

Cycles: Remove MultiGGX code, replace with albedo scaling

Practical multiple scattering compensation for microfacet models

外部リンク

When should I use multiscatter GGX?

Multiple-Scattering Microfacet BSDFs with the Smith Model

ランダムウォーク

ランダムウォークは薄く曲がったオブジェクトを最も正確に表現できる。ただし計算負荷が高くノイズが多い。面が重なっていたり、閉じていないメッシュは正しくレンダリングできない。そのようなメッシュはランダムウォークが計算に使うボリューム拡散を正しく計算できない。

スザンヌの目は閉じられていないため、目の周辺の色がおかしい

スザンヌの目は閉じられていないため、目の周辺の色がおかしい

外部リンク

Random Walk

スペキュラーの使い方

この項は The poorly understood Specular slider of the Principled Shader を抄訳して加筆したものだ。

光の反射には拡散反射(diffuse reflection)と鏡面反射(specular reflection)とがある。金属は拡散色(diffuse color)を持たないので拡散反射がない。観測できる金属の色はすべて鏡面反射によるものだ。非金属(絶縁体、誘電体)の反射は、2~5%程度の無色の鏡面反射と拡散反射とからなる。

スペキュラーや光沢を扱う PBR のワークフローでは拡散反射と鏡面反射とは個別に設定する必要がある。しかし Blender のプリンシプルシェーダでは metalness ワークフローが採用されている。metalness ワークフローでは拡散反射と鏡面反射とが結合され(ベースカラーまたはアルベド)、metalness マップ(メタリック)で拡散反射と鏡面反射とを切り替えている。

この metalness ワークフローでは非金属を正確に表現できない。非金属は少量の鏡面反射を含むからだ。Blender のプリンシプルシェーダにあるスペキュラーはこの鏡面反射をコントロールするためにある。プリンシプルシェーダのスペキュラーの0~1は鏡面反射率の0~8%に対応している。スペキュラーの既定値である 0.5 は鏡面反射率の4%に対応する。これはプラスチックの鏡面反射率で、ほとんどの非金属でこの値が推奨されている。ダイアモンドのような鏡面反射率が8%を超える非金属も存在しているので、プリンシプルシェーダのスペキュラーは1を超える値を設定できる。

よって以下の設定は間違いだ

THE PBR GUIDE

THE PBR GUIDE - 2018 EDITION(pdf)

THE PBR GUIDE - PART 1

THE PBR GUIDE - PART 2

『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版

『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR textures 』 私家訳版

THE PBR GUIDE には F0(面に光が垂直に当たったときのフレネル反射率) の話が頻繁に出てくる。F0 が重要なのは、F0 さえわかればSchlick の近似式でフレネル反射係数が計算できるからだ。Substance Painter からマテリアルをインポートしたときに正しく反射率が設定されていないことがあるので、Substance Painter を使うなら F0 について理解しておく必要がある。

Principled BSDF では非金属の F0 はスペキュラーで、金属の F0 はベースカラーで設定できる。詳細はスペキュラーの使い方を参照。

以下の絶縁体(非金属)の値は F0 値であって色ではない。 Principled BSDF のスペキュラーに変換するには、絶縁体の線形値を 0.08 で割る。金属は線形空間の F0 値をベースカラーとして入力する

絶縁体(非金属)と金属の F0 値テーブル

絶縁体(非金属)と金属の F0 値テーブル

線形空間とガンマ

ガンマを補正せずに画像を加工すると正しい結果にならない。そこで画像を線形空間へ戻す工程が必要になる。Blender ではこのガンマ補正は自動的に行われる。しかしマスク画像や法線、高さマップなどの画像ではガンマ補正は不要だ。ガンマ補正を無効にするには非カラーデータを指定する。リニアワークフローについての詳細は分かる!リニアワークフローのコンポジットを参照。

sRGB の値を線形値に直すには (sRGB値/255)^2.2 を計算すればいい。これは Google で計算できる。たとえば sRGB で 128を線形空間に直すと、その計算式は 0.5^2.2 であり、結果は 0.218 となる。この記事では sRGB 値の後ろのパーレン()に線形値を記載する。

PBR の色について

絶縁体(非金属)の色は sRGB で 30~50(0.009~0.028) を下回る値や sRGB で 240(0.875) を上回る値を取るべきではない(ブラックホールや太陽を表現するのでない限り)。それでも暗さが足りない場合はアンビエントオクルージョンで調整するべきである。

金属の色は sRGB で 180~255(0.465~1.000) の範囲の値を取る。様々な材質の sRGB 値は Sébastien Lagarde のDONTNOD Physically based rendering chart for Unreal Engine 4が有用だ。特にメタル/ラフネスチャートはチェックしておくといいだろう。

マスクを作成する場合

金属部分のマスク値(メタリックにつなぐテクスチャの値)は sRGB で 235~255(0.836~1.000) の値にする。非金属の部分のマスク値は sRGB で 234(0.828) 以下にする。ただし半メタリックのマテリアルは現実にはほとんど存在しないので、非金属の部分のマスク値は非常に小さい値にする。また半メタリックのマテリアルは IOR を調整しないと反射が強すぎる傾向にある。

設定例

金属

デフォルト設定のメタリックを1にすると金属になる。ベースカラーと粗さとを調整してマテリアルを設定する。以下の表の線形空間の値をベースカラーに設定する。これらの値は現実のマテリアルから計測された値で、これらの値から大きく外れた値を設定しない方がいい。

金属のベースカラーテーブル

金属のベースカラーテーブル

ヘアライン加工

メタリックと異方性とを1にする。異方性の詳しい解説はIntroduction to Anisotrophic Shading in Blenderを参照。

オブジェクトの Z 座標の方向にしかヘアラインが出ないことに注意する。様々な方向からヘアラインを出したい時は、独立したオブジェクトに分割する。もしくは接線を設定する

ヘアライン独特の加工は以下のテクスチャを法線として使うことで実現している。

ヘアラインの法線テクスチャ

ヘアラインの法線テクスチャ

法線を設定するノード

法線を設定するノード

ヘアラインの数を増やしたい時は光源の数を増やす。

外部リンク

プリンシプルBSDFで異方性反射の使い方(2)/ヘアライン加工の作り方


PBRマテリアルのテクスチャは実際どのようなテクスチャなのか

BASIC THEORY OF PHYSICALLY-BASED RENDERING

How to Use Blender's new ULTIMATE Shader: Principled

Principled BSDF – Cycles gets a native PBR shader

Physically-Based Shading at Disney(pdf)

PBR workflows in Cycles Render Engine(pdf)

THE PBR GUIDE

THE PBR GUIDE - 2018 EDITION(pdf)

THE PBR GUIDE - PART 1

THE PBR GUIDE - PART 2

『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版

『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR textures 』 私家訳版

関連リンク

Blender 記事の目次


広告
広告

カテゴリ