水鳥コンビナート

CGとかUnityとか

Sequential Monte Carlo Instant Radiosity

Sequential Monte Carlo Instant Radiosity

www.youtube.com

www.youtube.com

I3D 2016 の論文。

インスタントラジオシティ法において、 光路上の複数回の反射をサポートしつつ、 カメラや光源が動的に変化するシーンでも 空間的なノイズを少なくし、 かつ時間的なチラつきも小さくできる VPL の配置の仕方を扱っている。

まず、そもそもインスタントラジオシティとは何かを説明する。 ある光路  \bar{z} を考える際、  \bar{z} は、カメラと直接見ている物体の表面  x を結ぶ  \bar{x} と、  \bar{x} が含む 2 頂点を除いた経路  \bar{y} に分けられる。 このとき、  \bar{y} の始点  y を、 \bar{y} を通った光を表現する仮想の点光源と考えると、 経路  \bar{y} による  x への影響はこの仮想光源からの直接光の計算により求めることができる。 こうした仮想光源を Virtual Point Light (VPL) と呼び、 インスタントラジオシティは VPL をシーン中にばらまくことで、 直接光の計算のみで大域照明を実現しようという手法である。 この VPL の設置の仕方は、 どういう方向に、何回反射させるか、 カメラの方からレイを飛ばしたり、ライトの方から飛ばしたりと色々とやりようがあり、 その辺は色々研究の対象になっていてこの論文もその一種ということである。

f:id:mizuooon:20170612012849p:plain:w300 f:id:mizuooon:20170612012850p:plain:w300

インスタントラジオシティは biased な手法であるが、 扱いやすいのでよく使われている。 例えば光源が固定の場合、 適当な位置に適当な量の VPL を間接光の影響を計算済みで置いておけば 比較的リーズナブルな計算量でリアルタイムの大域照明が実現できる。 今回の論文は光源も動くので VPL を計算済みで置くことはできないが、 VPL を光路についてのある種のコントロールポイントとすることで 安定した結果を作っている。

以上を踏まえて改めて言うと、 この論文の目的は、 最終的な画面中に大きな影響を及ぼす VPL のみを上手く動的に配置して結果の精度を高めることと、 VPL の動的な再配置時にチラつきが発生しないようにすることのふたつである。 提案手法では、 VPL の有効な配置位置を 『画面中に映っている面』が見える面 (以降これを『間接的に見える面』と呼ぶ) の上として、 画面への影響度が小さくなったり間接的に見えなくなったりした VPL を削除し、 新たな VPL を間接的に見える面上に配置するのを繰り返すことで 上記の目標を達成している。 こうした逐次的な更新の方法が、 タイトルにもなっている Sequential Monte Carlo (の一種)らしい。

ここで疑問となるのが VPL の画面への影響度をどうやって数値化するかという点であるが、 この論文中ではそれを VPL が照らす画面中のピクセルの最大輝度としている。 詳しい式は省くが、 VPL が無指向性であり、 物体の表面は常に完全拡散で、 VPL の位置  y と照らされる点  x の間には遮蔽がない という (割とガッツリした) 仮定を置くと、 この値は VPL の放射輝度  L(y) を VPL の確率密度  p(y) で割った値に比例する。 この値を強度(?)  I(y) として、 I(y) の値に基づいて VPL の更新が行われる。 実際  I(y)放射輝度が小さかったりオーバーサンプリングされていたりする領域では低くなるので 画面への影響度を表す数値としては確からしい気がなんとなくする。 値を求める際は、  L(y) は VPL からレイを飛ばすことで計算を行い、 また  p(y) も逐次的な更新のせいで解析的に求められないので 近所の k 個の VPL の密度から近似的に求める方法を採っている。

VPL の更新については、全体の流れは

  1. 間接的に見えなくなった VPL を削除
  2. 新しい VPL を複数個ランダムに生成
  3.  I(y) が最も大きい VPL を採用

のようになっている。 1. での判定は VPL に対応付けられている  x が画面外へ出たかで判定されるが、 この際、別の  x から見えないかどうかがチェックされる。 また 1 フレーム中で削除する VPL の数に最大数を設けることもされており、 できるだけ VPL 更新時のチラつきが出ないように工夫がされている。