スペクトルレンダリング(Spectral Rendering)

by syoyo

最近は Maxwellrender
がやっていることくらいはできなきゃまずいでしょ、
ということで、スペクトルレンダリングについて勉強しています。

スペクトルレンダリングについては、Sun
氏による博士論文が概観をつかむ
導入としてよいでしょう。

Yoilong Sun,
Ph.D. thesis in computer
science:
“A Spectrum-Based Framework for
Realistic Image
Synthesis”


http://www.cs.purdue.edu/homes/sun/

同氏は、composite model
と呼ばれるスペクトルの表現方法を提案しています。

通常スペクトルを表現する場合に考えられるアプローチとしては、

WinOSi
のように波長をある区間で一様に区切ってサンプルすることです。

たとえば 380 – 780 nm
の範囲の波長(だいたい人間の可視領域はここらへんにある)
を現したいときに、サンプル数を 10 としたら
(780 – 380) / 10
の区間ごとに区切って波長をサンプルします。

しかし、これだと実装は楽ですが、データサイズが冗長になってしまいますし、

シェーディングの計算量も分割数に応じて増えてしまいます。
また特定の波長に偏っている材質がある場合などに、
十分な精度を確保できないことがあります。

composite model では、
スペクトルをスパイク状のスペクトル分布となだらかなスペクトル分布に
分け、スパイク状はデルタ関数で、
なだらかな部分はフーリエ展開で表現することにより、
データサイズをコンパクトにしつつも精度を保つということを実現しています。

個人的には、フーリエ変換よりもやはり時代はウェーブレットなので、
ウェーブレットで
スペクトルを展開するのがよさそうだし、
実装も簡単になりそうな感じを受けています。

RGB ->
スペクトル変換

通常テクスチャなどは RGB
のフォーマットのほうが指定しやすいですから、レンダラ内部で
RGB からスペクトルへデータを変換しなくてはなりません。ある特定の
RGB 色を表現する
スペクトル分布はいろいろな組み合わせがあるため、一意には決定できません。

そのため何らかの近似手法が必要になります。

以下は RGB から スペクトルへ変換する手法で有名そうなものです。

Brian.Smits.: “An RGB-to-Spectrum
Conversion for Reflectance.”
Jouranal of Graphics Tools
4(4):11-22(1999).

http://www.cs.utah.edu/~bes/papers/color/

芳信孝宏,真鍋知久,金田和文,
山下英生
RGB画像からのスペクトル変換手法
Visual Computing / グラフィクスと CAD
合同シンポジウム 2003


http://www.eml.hiroshima-u.ac.jp/member/person/Yoshinobu.t/cgsinpojium2003.pdf

後者のほうがよりよい近似を生成するようです。

アートディレクション

G.I.
レンダラは物理的に正確であるべき、というレンダリストの観点からは、

スペクトルでレンダリングするのが自然ではありますが、
アーティストの観点からは RGB
ではなくてスペクトル空間で色調整
するのは直感的でないし、調整も困難な気がします。
そのため、レンダラをスペクトルに対応しても
そんな(調整が難しい)レンダラを使ってくれるのかなぁと思ってしまいます。

ジョージ(George Lucas) が、
「いやこれからはスペクトルだ、500 ± 10 nm
のスペクトル帯
が美しく表現できないようじゃないとオレはスペクタクルを感じない」

とか言ってくれるとスペクトル世代へのシフトが起きるとは思うのですが…

Advertisements