Rendererクラスのリファクタリング案・改
Pathクラス書いたら妄想が広がってきましたよ。
- Rastalizer (Ray tracing, scanline, micropoly, etc.)
- Direct Illumination Handler (sample from one light/multiple light/IBL)
- Indirect Illumination Filter (Irradiance Caching, Final Gathering, etc.)
- Indirect Illumination Handler (Photon Mapping, IBL, etc.)
ラスタライザって呼ぶのはおかしいような気がするけど、FirstRayの衝突場所を探して、それぞれに対してNPRの場合pMat->shade()又はPathを生成して上記パストレをしたりMLTしたり。
必要に応じてDIハンドラが呼び出されて直接照明サンプリング、必要があればIIハンドラが呼び出されて大域照明サンプリング。
IIハンドラはさらにIIハンドラを入れ子で呼べて、その機構をつかって放射照度キャッシュとか実装。
どれだけ軽く実装できるかが課題。
Material::shade用のRendererInterfaceクラスを改善すればいい感じにNPRと統合できる予感。