現在のMaterial+BSDFシステムメモ

ShadeTreeパーシング実装に向けて現状整理。設計したのが去年の6月らしく、あんまり覚えてない。

大きくかかわってくるのが2つのクラス

Material (src/renderer/Material.h)

主なメンバ関数
  • evalBSDFxCOSxPI
    • f_r(\omega_o, \omega_i) |\cos \theta_i| \piを計算する。
  • sampleBSDFxCOSxPI
    • 入射方向の重点的サンプリングを行い、f_r(\omega_o, \omega_i) |\cos \theta_i| \piの値と\pi p(\omega_i)を返す。
  • bouncePhoton
  • rhd
    • 放射照度(Irradiance)に対してどれだけの放射輝度(radiance)を出すか。但しIrradianceは半球面全部なのに対し放射輝度はper solid angle: \rho_{hd}
    • あれ?なんか未実装。後で近似計算を実装する。
  • shade
    • NPRパス用の関数
    • カメラレイ(微分情報アリ)に対してどういう放射輝度を返すか。

BSDF (src/renderer/BSDF.h)

Materialクラスのメンバ関数の中で内部的に使われる。Physically Correctな挙動。

主なメンバ関数
  • FxCOSxPI
    • f_r(\omega_o, \omega_i) |\cos \theta_i| \piを計算する。
  • sampleF
    • 入射方向の重点的サンプリングを行い、f_r(\omega_o, \omega_i) |\cos \theta_i| \piの値と\pi p(\omega_i)を返す。
  • bouncePhoton