PBR入門: 物理ベースレンダリングで使う要素

概要
物理ベースレンダリング(PBR)とは、物理的に正しい方法で光の流れを模倣したレンダリング技術です。
Unity や Unreal Engine の Lit 系マテリアルでも、PBR の考え方が利用されています。
PBR の基本要素
PBR では、以下の 3 つが基本的な要素になります。
- マイクロファセット サーフェスモデルに基づく
- エネルギー保存則を守る
- 物理ベース BRDF を使う
マイクロファセット サーフェスモデルとは、表面を細かい鏡面の集まりとして考えるモデルです。
Roughness が低いほど細かい面の向きが揃い、くっきりした反射になります。
Roughness が高いほど向きがばらつき、ぼやけた反射になります。
エネルギー保存則は、入ってきた光よりも強い光を反射しないという考え方です。
たとえば金属では拡散反射が弱くなり、鏡面反射の色が Albedo に近づきます。
BRDF とは、入射光がどの方向へどれだけ反射するかを示す関数です。
PBR では、この BRDF に物理ベースの反射モデルを利用します。
レンダリング方程式
点 から、方向 へと放出される光の強度を示す。
項は入射光と出射光に対する反射率を計算する関数です。
この項は、スペキュラー項と拡散反射項に分けることができます。
それぞれ、Cook-Torrance BRDF とランバート反射で示すことができ、以下のように示すことができます。
ランバート反射は以下の式で示すことができます。(c: アルベド)
スペキュラー項は以下の式で示すことができます
DFG は 3 つの関数で構成されています。
PBR の実装では、Roughness、法線、視線方向、ライト方向などから計算します。
- D: 正規分布項(Normal distribution function) マイクロファセットの法線分布を示す
- F: フレネル項(Fresnel equation) 入射光とマイクロファセットの法線における反射率を示す
- G: ジオメトリ項(Geometry function) マイクロファセットが遮蔽やマスキングによってどれだけ影響を受けるかを示す
残りの項 は極小立方角()における入射放射輝度を示します。
PBR で使用されるテクスチャ
PBR のマテリアルでは、以下のテクスチャを組み合わせて質感を制御します。
- Albedo: 表面そのものの色。ライトや影の情報は含めない
- Normal: 法線方向を変化させ、細かな凹凸を表現する
- Metallic: 金属か非金属かを表す。金属では拡散反射が弱くなり、反射色が Albedo に近づく
- Roughness: 表面の粗さを表す。低いほど鋭い反射になり、高いほどぼやけた反射になる
- AO: Ambient Occlusion。隙間や奥まった部分の間接光を弱める
この中でも、特に Metallic と Roughness が重要です。
Albedo で色を決め、Metallic で金属らしさを決め、Roughness で反射の広がり方を決めます。
まとめ
PBR は、専用のテクスチャを使うだけの仕組みではありません。
マイクロファセット、エネルギー保存則、物理ベース BRDF を使って、拡散反射と鏡面反射を計算します。
マテリアルを作るときは、Albedo、Metallic、Roughness、Normal、AO がそれぞれ何を制御しているかを意識すると、見た目を調整しやすくなります。
Table of contents