デイライト実装(An implementation of sunsky model)

by syoyo

A. J. Preetham, Peter Shirley and Brian Smits,
A Practical Analytic Model for Daylight“,
Siggraph 1999, pp. 91-100.
http://www.cs.utah.edu/vissim/papers/sunsky/

を、レンダラ王 shinji さんに感化されたので angelina に実装してみました。

http://lucille.atso-net.jp/svn/angelina/sunsky/

いつもどおり、win32(cygwin), Mac OS X(PowerPC), linux でコンパイルできる、
fltk + OpenGL なアプリです。
Windows 用には、すでにコンパイルされたバイナリ sunsky.exe を置いておきました。

この論文が提案しているデイライトのモデルは、
大気効果の計算をスペクトルで計算しているため
スペクトルレンダリングの手始めにちょうどよかったのと、
テストレンダリングでとりあえずレンダリングするときに、
明示的にライトを生成しなくとも見栄えのする照光環境が
作り出せるので役立ちそうだったからです。

論文のあるリンク先にはソースコード例もありますが、ちょうどスペクトルデータを計算する
ところの部分に関するソースはありません。

http://www.cs.cmu.edu/afs/cs/user/ajw/www/software/

こちらのほうには、スペクトルを計算するコードも補完された実装コードがあります。
(ちなみに、他には、yafray などの実装のようにスペクトルではなく RGB で近似して
求めるようにしているのも見受けられます)

今回は、スペクトルの計算は 380 – 780 nm の間で、
10 nm 間隔(41 サンプル)固定で行っています。

sunlight and skylight

このデイライトのモデルでは、

o 太陽の位置に応じて大気拡散された太陽の色(sunlight)を求める式
o 太陽の位置に応じて空の色の分布(skylight)を計算する式
o 空気遠近感(aerial perspective)を計算する式

の 3 つで成り立っています。
最初の sunlight では、たとえば日が沈むときには太陽が赤くなるようなことがシミュレートされます。
skylight では、空の色の分布をシミュレートします。
aerial perspective では、物体との距離に応じた大気散乱による遠近感効果をシミュレートします。

今回は上の 2 つを実装しました。とりあえずはまず太陽の色と半球上の空の色の分布が
分かればよかったので。

シミュレーションをコントロールするパラメータは、それほど多くありません。

o 観測点の緯度、経度
o 観測点が基準とする子午線(15 度単位。日本だと明石天文台のある 135 度)
o 日時(1 – 365 日)
o 時刻(0 – 24 時)
o 濁度(turbidity) : 低いほど晴れ、高いほど霧や霞の度合いが高くなる

程度になります。

論文には、観測点の緯度経度と時刻から、太陽の位置を計算する式も載っています。

http://www1.kaiho.mlit.go.jp/KOHO/automail/sun_form3.htm
これと、論文にある計算式で求まった太陽位置の出没時刻が合うかどうか調べて見ましたが、
大体合っているようでした。
(というか同じ計算式をもし使っているんだったら、一致しないと自分の実装がおかしいかも…)

さて、計算はスペクトルで計算されるので、これを視覚化するには RGB に変換し、
また skylight の分布はダイナミックレンジも高いのでトーンマップを行う必要があります。

今回は RGB 変換後のトーンマップには、
RGB のうち値が大きいもので RGB それぞれを割るという適当な処理にしました。

色の変化を視覚化して見る分にはこれでよかったのですが、
実際にはちゃんとしたトーンマップを考える必要がありますね。

そのほかの大気シミュレーションの物理モデル

今回実装した論文は、daylight とタイトルに名前がある通り、
主に日中の空の色の表現にフォーカスを置いていますので、
夜の空の色のシミュレーションはできません。
これを補完するものとして、夜のシミュレーションや、
また日の出/日暮れをより正確にシミュレーションしようというモデルもあります。

Henrik Wann Jensen, Fredo Durand, Michael M. Stark, Simon
Premoze, Julie Dorsey and Peter Shirley,
A Physically-Based Night Sky Model“,
Siggraph 2001
http://graphics.stanford.edu/~henrik/papers/nightsky/

Jörg Haber, Marcus Magnor, Hans-Peter Seidel
Physically based Simulation of Twilight
Phenomena
“,
ACM Trans. on Graphics, 2005.
http://www.mpi-inf.mpg.de/departments/irg3/dtd/

ところで、このような物理ベースの手法を使うとなると、単位に非常に気を使います。
今回は初期実装ですので、うまく行っている感じが出ればそれでいいのですが、
レンダラに組み込むときにはうまく単位を合わせてきちんと検証しなければと思います。

参考文献

http://www.asahi-net.or.jp/~cg1y-aytk/ao/index.html
http://www.weather-photography.com/gallery.php?cat=optics
どちらも各種大気現象の写真を見ることができます。

Advertisements