パストレーシングを実装する上でどちらの流派をとるかというのがあります.
レンダラによって異なるので複数のレンダラの実装を参考するときは注意が必要です.
BSDF f のふるまい
o OSL testrender : BSDF f に cos を入れる
o PBRT-v3 : integrator で cos で割る派
cos を f に入れる場合の利点は Hair BSCDF など BSDF でないものとインターフェイスを合わせることができる. 欠点は光積分式とは食い違いが出る
BSDF を計算するときの空間
ローカル, ワールド, etc.
環境マップの座標空間
Y up か, Z up か.
Fresnel 項
- OSL(e.g. Blender cycles) : Fresnel は closure(BSDF)の外で計算して, mix shader で対応
- PBRT とか. Fresnel 減衰を f に含める. Disney Principled BSDF など uber shader 系を扱いやすい.
光線方向
wi と wo がどれに対応するか?
たとえば,
wi : サンプルされた方向, 光源方向
wo : 入射方向, レイの方向
面の下かどうかの判定
Ns(shading normal) を使うか, Ng(geometric normal) を使うか
shadow ray のオフセット
normal 方向に押し出すか, 光源方向に押し出すか