Ray Differentials on Normal-Interpolated Triangles

http://lucille.atso-net.jp/phpbb/viewtopic.php?t=25
で最近議論が盛り上がってる微分レイですが、Igehyの論文を読んでdT/dx、dT/dYを法線補完付きで計算する方法を今更知りました。

論文を読んで式は理解できたのですが、これをどうやってnytrに組み込むかで悩んでいます。

以下メモ:

  • 今までの計算方法:
    • 三角形ポリゴン衝突判定時に \frac{\partial P}{\partial T_u}, \frac{\partial P}{\partial T_v}を求める。
    • 微分レイの情報を使って \frac{\partial P}{\partial x}, \frac{\partial P}{\partial y}を求める。
    • これらの情報を使って \frac{\partial T}{\partial x}, \frac{\partial T}{\partial y}を求める。
  • Igehy大先生の方法(法線補完三角形ポリゴン限定):
    • 衝突判定時に T_\alpha, T_\beta, T_\gamma保存。 L_\alpha, L_\beta, L_\gamma計算。
    • 微分レイの情報を使って \frac{\partial P}{\partial x}, \frac{\partial P}{\partial y}を求める。
    • これらの情報を使って \frac{\partial T}{\partial x}, \frac{\partial T}{\partial y}を求める。

悩んでいる点:
DiffGeom(衝突点情報)のクラスには3角形ポリゴン依存の処理を入れたくない。Ta,Tb,Tg,La,Lb,Lgを保存したくない。
→syoyoさんのコードを見てみるとポリゴンのジオメトリ情報へのポインタを用意してる。
→結局三角形ポリゴン依存の処理になってしまうのは変わらず。DiffGeomの派生クラスを作って仮想関数で解決というのはしたくないなぁ。

dPdT_u, dPdT_vをAnisotropic BRDFの計算用(vTangent, vBiTangent)に使っているが、これをどうするか。
→dPdT_u, dPdT_vの計算部はそのまま残す?上で求めたdTdx, dTdyとの矛盾は問題にならない…はず。(Anisotropic BRDFの計算 vs. テクスチャフィルタリングでかち合わない)