PBR tutorial at Marmoset.org


Memo in Japanese

  • Marmoset.org にあった物理ベースレンダリングに関する記事の簡易メモです.
  • テクスチャの種類についての説明が面白かったので, 主にそこについて書いています.
  • 下の記事で説明しているテクスチャの種類は以下のものです.
    • アルベドマップ
    • スペキュラマップ
    • マイクロサーフェスマップ(別名: ラフネスマップ, グロシネスマップ)
    • AO マップ
    • Cavity マップ(キャビティマップ)
エネルギー保存
  • ディフューズ反射が支配的で表面が粗いマテリアルは, 反射する光が暗くて, ハイライトが広がる傾向がある.
  • スペキュラ反射が支配的で表面が滑らかなマテリアルは, 反射する光が明るめで, ハイライトが絞られる傾向にある.


アルベドマップ
  • 基本的にはマテリアルのディフューズアルベドを示すマップで, マテリアルが反射するディフューズ成分のライトの計算に使う.
    • これにはディレクショナルライトや AO の情報は書き込まない.
    • 純粋な金属のアルベドマップには非常に低い値(sRGB 50 とか)を書き込む.
  • 下図の左側にあるものほどディフューズアルベドの反射率が低く, 右側にあるほどディフューズアルベドの反射率が高い.

  • もし後述するメタルネスマップを使う場合, このアルベドマップの用途が変化する.
    • 非金属のものにとってアルベドマップはディフューズカラーを示す.
    • 金属にとってはアルベドマップはスペキュラマップの代わりになる.
  • メタルネスマップを使う場合は, アルベドマップは(Unreal Engine 4 や Disney の物理ベースシェーダで使われている)ベースカラーを書き込むものになる.
スペキュラマップ (リフレクタンスマップ)
  • マテリアルのスペキュラリフレクタンスを示すマップで, マテリアルが反射するスペキュラ成分のライト計算に使う.
    • 非金属の場合, グレースケールになり, 下図の左側にあるように値が小さいことが多い.
    • 金属の場合, カラー(RGB)になり, 下図の右側にあるように値が大きいことが多い.
  • 後述するように, メタルネスマップを使用する場合, アルベドマップがスペキュラマップの代わりになる.


メタルネスマップ
  • 非金属か金属か ? を示すマップで, 完全に非金属の場合は 0.0, 完全に金属の場合は 1.0 を書き込む.
  • a: 完全に非金属の場合 (値が 0.0)
    • アルベドマップがディフューズアルベドとして使われる.
    • スペキュラリフレクタンスの値に リニア 0.04 (sRGB 0.06)を使う.
  • b: 完全に金属の場合 (値が 1.0)
    • ディフューズアルベドの値は 0.0 を使う.
    • アルベドマップがスペキュラマップとして使われる.
  • c: グレースケールの値の場合 (0.0 より大きく, 1.0 より小さい )
    • 部分的に金属とみなされる.
    • アルベドマップの値をスペキュラリフレクタンスとして利用し, また少し暗くしてディフューズアルベドとしても使う.
  • つまり, メタルネスマップを使う場合, 上のスペキュラマップの値はアルベドマップに書き込めるのでスペキュラマップは不要になる.
  • 下図の左側はメタルネスマップを使わない場合で, アルベドマップはディフューズアルベド, スペキュラマップはスペキュラリフレクタンスとして解釈される.
  • 下図の右側はメタルネスマップを使う場合で, メタルネスマップのピクセルの値に応じて, アルベドマップは(ディフューズアルベド/スペキュラリフレクタンス)として解釈される.


マイクロサーフェスのマップ(別名: ラフネスマップ, グロシネススマップ)
  • マテリアルの表面の粗さや滑らかさを示すマップ.
  • 下図だと左側ほど表面が粗くて, 右側ほど表面が滑らかなことを示す. それに伴い, ハイライトの面積が小さくなっていて, またハイライトの輝度も明るくなっている.
  • ラフネスマップと呼ばれるものは 0:非常に滑らか, 1:非常に粗い を示す.
  • グロシネスマップはその逆で, 0:非常に粗い, 1:非常に滑らか を示す.
  • 直感的には, グロシネスマップの方がわかりやすそう. ( 1 になると, ハイライトの面積が小さくなるけど明るくなる )


AO マップ
  • 広い範囲のオクルージョンを示すグレースケールのテクスチャ. (具体的には AO 計算時のカーネルが大きい)
  • 3d モデルからベイクによって自動的に作られるテクスチャ.
  • AO は IBL によるディフューズ環境光のマスクのみに使われる.
    • ライトの直接光によるディフューズ反射のマスクには使わない.
    • またスペキュラ反射のマスクにも使わない.
    • スペキュラマップやグロシネスマップに乗算する用途にも使わない.
      • 理由は, スクリーンスペースのローカルリフレクションでリフレクションのオクルージョンが計算できるので.


Cavity マップ
  • 細かいオクルージョンを示すグレースケールのテクスチャ. (具体的には AO 計算時のカーネルのサイズが小さい )
  • 3d モデルや法線マップから自動的に作られるテクスチャ.
  • 表面の窪みを示す.
  • IBL による環境光のディフューズ・スペキュラ, 動的ライトのディフューズ・スペキュラの全ての結果に対して乗算して使う.


  • Cavity マップの代わりに, リフレクションのオクルージョンを差し込むことができるが, そのときにはディフューズには影響しないようにする必要がある.
フレネルインテンシティ
  • フレネルインテンシティは grazing angles (すれすれ角)での光の反射率をスケールするもの.
  • 一般的にこの値は常に 1.0 にすべき.
  • Marmoset toolbag 2 ではテクスチャによるサポートはしていない.