自動微分を援用した適応的オーバーサンプリング

by syoyo

牧野光則, 井下雅美,柏木雅英,大石進一
自動微分を援用した適応的オーバーサンプリング

http://www2.tamacc.chuo-u.ac.jp/tise/pub/journal07/

レイ微分を調べているときに見つけた論文。
自動微分とありますが、
やっていることはつまりレイ微分とおなじで
連鎖律(chain rule)で関数を微分するというやつです。

この自動微分(automatic
differentiaton)というのは、もともとは
mathematica
のようにプログラムがシンボリックに関数の微分式を求めてくれるしくみのようです。

A Collection of Automatic
Differentiation Tools

http://www-unix.mcs.anl.gov/autodiff/AD_Tools/

本論文では、重心座標パラメータの微分値を利用することで、
三角形と交差する可能性のある部分(スクリーン座標での物体のふちなど)を
適応的にサンプリングできることを示しています。

レイトレでの適応的サンプリングは、Glassner
 を見る限り、
輝度や深度の差、ピクセル内の三角形の数などから求めるのが一般的ですが、

本論文のように微分量も加味できると、
よりロバストな推定をすることができるようになりますね。

とはいえ、実際に実装するとなると問題もあります。

論文では述べられていませんが、
空間データ構造をトラバースしているときに、
直接レイとは交差しないが、
すこしレイの方向がずれれば交差する可能性のある
ポリゴンも見つける必要があります。

ちょっと考えてみた解は、

o 入力の三角形をちょっと大きくして(fat triangle)、
空間データ構造を構築する。
スクリーンに射影したときに大きくした分がだいたい 1
ピクセル程度になる必要があります。
あまり遠くにある三角形だと失敗するかもしれないし、
それを回避するために構築時に視点からの
距離に応じて大きくする幅を変えたとしても、
今度は反射屈折があったときにうまくいかなくなります。

o ビームやコーンのように、
ある程度レイに幅を持たせて空間データ構造をトラバースする。
もちろんどれくらいのビーム幅で探索するかにはレイ微分が使えます。

いくつか無駄にトラバースする回数が増えるかもしれませんが、
三角形を大きくするよりは
こちらのほうが反射屈折などがあっても問題がありません。空間データ構造が
kd 木であれば、
ビームでのトラバースは今年の SIGGRAPH 2005
論文である
MLRTA(Multi-Level Ray Tracing
Algorithm) も使えますので、
レイを一緒にまとめて飛ばすこともできて効率的にできそうです。

物体のふちなどの部分への適応的サンプリングは通常のレイトレでは難しいので、

一次レイ程度はジオメトリックアンチエイリアシングのやりやすい
スキャンラインのほうがいいかなーと思っていましたが、
これを使えばなんかいけそうですね。

Advertisements