Blender の Principled v2 BSDF
Blender のバージョン 4.0 からは Principled v2 BSDF になる。Principled v1 BSDF については Principled BSDF の使い方を参照。
目次
- Principled v2 BSDF のレイヤーモデル
- Oren-Nayar(4.3)
- v1 との違い
- Principled v1 BSDF
- Principled v1 BSDF の問題点
- Principled v2 BSDF
- 外部リンク
Principled v2 BSDF のレイヤーモデル
説明を簡単にするために放射(Emission)をないものとして説明する。
低層から上層へ向かって計算する。低層ではまず金属か非金属かで別れる。メタリックが1のときはマテリアルは金属で、サブサーフェスや伝播(Transmission)等のパラメータは評価されない。
メタリックが1未満の場合は、伝播等が評価される。伝播が1のときは、サブサーフェス等は評価されない。
メタリックと伝播とが両方1未満の場合に、拡散(Diffuse)やサブサーフェスが評価される。
v1 との違い
IOR
v1 ではサブサーフェス IOR、スペキュラー、IOR と3つの IOR があったが、v2 では IOR に一本化された。これにより非金属のスペキュラーは IOR で制御するように変更された。非物理的なスペキュラーはスペキュラーチントや IOR Level で制御する。
複合散乱 GGX
GGX は粗さが大きい場合、現実よりも暗くなる。複合散乱 GGX はその欠点を解消しているが、計算速度が遅くノイズが多かった。v2 の複合散乱 GGX は計算の近似を行うことで、高速化とノイズの低減を実現した。なのでデフォルトで複合散乱 GGX が使える。
ただし異方性の強いマテリアルでは、正確な計算との解離が大きい。
サブサーフェス(Subsurface)
サブサーフェスカラーがなくなった。拡散光の色を変更するには半径(radius)を変更する。
サブサーフェスの強さが1を超える値をとれるようになった。
スペキュラーチント
スペキュラーチントを設定すれば、金属マテリアルのエッジのハイライトに色をつけられる。F82 tint model を使用している。各金属の F82 の色は Metal material references を参照。
コート(Coat)
コートは放射の上位レイヤーに配置されるようになったので、スマホのスクリーンのガラスフィルムなどを表現できるようになった。
シーン(Sheen)
シーン(Sheen, 光沢)は別物になっている。v2 のシーンは放射やコートの上位レイヤーに配置されるようになった。従来のシーンは毛羽立った布を表現するのに使われてきたが、今後は任意のマテリアルの上にほこりが乗ったようなマテリアルも表現できる。
Oren-Nayar(4.3)
粗さが大きいディフューズマテリアルは Oren-Nayar を使うとよりリアルになる。Oren-Nayar は以下の特徴がある。
- 以前のランバートライティングに比べ全体的に若干明るい
- シェーディングがフラットになる
- 粗さが大きい場合、エッジのハイライトがなくなる
ディフューズパネルの粗さを1にすると Oren-Nayar が使える。
外部リンク
Cycles: Switch to energy-preserving multiscattering Oren-Nayar BSDF #123345
Principled v1 BSDF
Principled BSDF の目標は一般的に使われるシェーダ要素を全て含んだ物理ベースの万能シェーダを作ることだった。
Principled v1 BSDF の問題点
Principled BSDF はその目的を達成したが、いくつかの問題が明らかになった。
- 粗さを大きくするとエネルギーを失い、予想より暗くなる。複合散乱 GGX を使えばこれを回避できるが、計算負荷が高い
- 成分をミックスするとエネルギーが保存されない
- シーン(Sheen, 光沢)成分は上記のエネルギー損失を修正するためのその場しのぎの修正だ。実際の光沢をうまく再現できず、光沢モデルとしても優れていない
- 金属フレネルは Schlick 近似を使っている。これは実際の金属の振る舞いである、中間角度での反射率の減少を表現できない
- チントが白とベースカラーとのブレンドしかできない
- サブサーフェスの制御は SSS の代替物として、近似のために設計されたが、のちに実際の SSS に導入された
- 現在のフレネルの実装が変。リアルで正確な誘電フレネルを計算し、Schlick のフレネルに線形マップしている([real_F0 ... 1] to [schlick_F0 ... 1])。計算を速くしたいなら直接 schlick 近似を計算すればいいし、正確性が必要ならマッピングは不要
- 同じマテリアルに3つの異なる IOR 入力が存在する
- 伝播の粗さ(Transmission Roughness)は薄い布のモデルのハックだが、レイを屈折させる(適切な薄い布のモデルとは異なる)
Principled v2 BSDF
Principled v1 BSDF の問題点は以下のようにして解決された。
- エネルギー保護(preservation):マイクロファセット BSDF を事前計算したアルベドテーブルに従ってスケールすることで解決した。粗さが大きいときに彩度が高くなる事象等はこれで対処できる
- エネルギー保存(conservation):アルベドテーブルは、スタックの下層を上層のアルベドに応じてスケーリングするためにも使用される
- シーンは http://www.aconty.com/pdf/s2017_pbs_imageworks_sheen.pdf に置き換えられた
- 金属フレネルは、誘電体により適合するような一般化された Schlick モデルに変更された(mix(F_0, F_90, (1-cosI)^(1/f)))
- チントは色入力に置き換えられた。この色はそれぞれの要素の最上位の乗数(フィルター)として使われる。色入力に (1, 1, 1) を入力すると物理的に正しいモデルになる
- サブサーフェスの [0 .. 1] 入力はサブサーフェススケールに置き換えられた。このスケールは半径入力の最上位の乗数として機能する。サブサーフェスカラーは削除された
- フレネルは金属と誘電体とを別々に計算し、メタリックパラメータでミックスされる
- 伝播、SSS、誘電体スペキュラーは同じ IOR を使用する
- 適切な薄い布のモデルが追加された
外部リンク
https://wiki.blender.org/wiki/User:Lukasstockner97/Principled_v2
“Principled v2” feedback/discussion thread
Blender 4.0 Manual Principled BSDF