Radiative Transfer方程式の拡散近似
はじめに
BSSRDFモデル や subsurface scattering の理論的背景には, Radiative Transfer方程式の拡散近似があります[JMLH01]. ただし[JMLH01]ではこのことを軽く触れているのみで, 詳細は[Ish78]へ委ねられています. 一方で, Radiation Hydrodynamicsの本[Cas04]を見ると, この話題はモーメント定式化[Tho81]を用いてわかりやすく整理されています. そこで, この記事では [Tho81, Cas04]を参考にしてRadiative Transfer方程式のモーメント定式化を行い, [JMLH01]にある拡散方程式を求めます.
Radiative Transfer方程式
位置 , 時刻 で方向 へ向かう光線の放射輝度を, と書きます. このとき, 媒質内を進行する光線の放射輝度の変化は, Radiative Transfer方程式
によって与えられます. ここで は単位球面 上の積分を表します. そして ] は光速, ], ], は媒質の散乱係数, 吸収係数, 消散係数です. は散乱の位相関数で,
と規格化されているとします. また散乱は軸対称 の場合に限るとして, その異方性因子を
と定義しておきます[JMLH01].
なお, [JMLH01]にある Radiative Transfer方程式は放射輝度の時間変化を無視しているのですが, この記事では残して導出を進めます. ほかの分野と比較したくなった時に便利だからです.
Radiative Transfer方程式(\ref{eq:radiative_transfer})は, 放射輝度 に関する積分微分方程式となっていることに加えて, 位置 , 時間 , 方向 の6つの独立変数を持っています. 従って簡単には解けません. そこで次節では, Radiative Transfer方程式を方向 に依存しない方程式群へ展開する, モーメント定式化を導入します.
モーメント定式化
モーメント展開
単位球面上に値をとる関数 はモーメント展開によって,
と展開できます[Tho81]. この式の第1項, 第2項, は球面調和関数展開の 0次, 1次, に対応しています. 展開の各項に現れる量 , を一般的に表すために, 関数の 次のモーメントをと導入します[JAM+10]. はテンソル積です.
これを使うと, 放射輝度 は
と展開されます. ここで の 0次のモーメントを scalar irradiance , 1次のモーメントを vector irradiance と書きました[JMLH01]:
後のために, この記事では, 2次のモーメントも tensor irradiance
と書いておきます. また, 自己放射 の0次と1次のモーメントも
と書いておきます.
Radiative Transfer方程式のモーメント定式化
それでは, (\ref{eq:define_moment})を使って Radiative Transfer方程式の0次と1次のモーメント式を求めていきます.
0次のモーメント式
Radiative Transfer方程式(\ref{eq:radiative_transfer})の0次のモーメントをとると,
そして下かっこで示した式の整理を行うと,となります.
1次のモーメント式
同様に, Radiative Transfer方程式(\ref{eq:radiative_transfer})の1次のモーメントをとると,
そして下かっこで示した式の整理を行うと,となります.ここで としました.
Radiative Transfer方程式の拡散近似
前節で得た 0次のモーメント式には1次の量 が, 1次のモーメント式には2次の量 が表れます. このままではモーメント式の階層が無限に続いてしまうので, 放射輝度のモーメント展開(\ref{eq:moment_expansion})を1次で打ち切る近似[JMLH01]を行います
この近似は, 拡散近似と呼ばれています[Cas04]. これを, 1次のモーメント式(\ref{eq:rte_1st_moment})の第2項へ適用すると, 下記が得られます.
詳細
さらに, 平均自由行程 のあいだで の時間変化が無視できるくらい小さい とすれば, 1次のモーメント式 (\ref{eq:rte_1st_moment}) はとなります. これを変形してと書き, 0次のモーメント式 (\ref{eq:rte_0th_moment}) へ代入すればが得られます. 同様にして の時間変化も無視でき, 媒質が一様である , と仮定すれば,
となります. これで, 文献[Ish78, JMLH01, JAM+10]の拡散方程式が求まりました.
まとめ
この記事では, 放射輝度の低次近似(\ref{eq:moment_expansion_1st_approximation})を取ることで, Radiative Transfer方程式(\ref{eq:radiative_transfer})から拡散方程式(\ref{eq:isotropic_diffusion_equation})が得られることを確認しました. ここで書いた内容が, Radiative Transfer方程式の拡散近似を用いた文献[JMLH01, JAM+10]などを読む際の助けになれば幸いです.
付録
この記事内で使った式を挙げます.
位相関数 の1次のモーメント
の1次のモーメントをとると,
放射輝度 の0次と1次のモーメント
これらは, が に作用しないことから得られます.
の0次と1次のモーメント
(\ref{eq:pL_0th_moment}): の0次のモーメントを取ると
(\ref{eq:pL_1st_moment}): の1次のモーメントを取るととなります.
参考文献
光子の集団としての光線について
これは レイトレ合宿7(https://sites.google.com/site/raytracingcamp7/ )のアドベントカレンダーの記事として作成しました .
はじめに
パストレーシングにおいて, 光は輝度 を運ぶ光線として表され, その光散乱をRendering方程式
ならびに Volume Rendering 方程式に基づいて計算することで, 写実的な映像を作り出すことができます. これらの基礎となるものは Radiative Transfer方程式であり[Arvo1996], 更にそれはBoltzmann方程式の一種であることが知られています[Cercignani1988]. Boltzmann方程式とは希薄気体の運動方程式です. その運動は, 相空間分布関数として表現した粒子の集団の時間変化として表現されるのですが, それならその分布関数と光線の概念は何らかの関係で結びついているはずです.
この記事では, Boltzmann方程式とRendering方程式の関係を考えるための準備として, 光子の集団を表す分布関数 と, 輝度 を運ぶ光線との間の対応関係について考えます.
相空間分布関数
いろいろな運動量を持って動き回る点粒子の集団を考えます. このとき, 位置 , 時間 において, 運動量が である粒子数の密度を, 相空間分布関数 として表現します. この関数は, 運動量で積分すれば粒子数密度
を, 相空間体積要素で積分すれば, 粒子数
を与えるように規格化されているとします.
ここで, の単位は なので, 分布関数を無次元にするために, プランク定数 ] を使って を掛けました.
光線中の光子の数
光線を一本の光のビームと考えて, それを構成する光子の分布関数が で与えられたとします. 光は振動の方向に応じて2つの偏光状態を取ることができるので, これを2つの異なる状態と数えて, 分布関数は
と規格化されているとします.
(\ref{eq:number_density})より, この式は(光子の個数密度)(空間体積要素)という意味を持っているので, 光子のエネルギー から, 領域 内の放射エネルギー]を,
と計算できるはずです.
そして, この量を次のように書き換えます.光のビームが, 微小立体角 内の方向 へ光速 で進み, 面積 , 法線 の微小面を通過するとします(図). このとき, 相空間体積素片 は, の間にビームが掃き進んだ体積として, と書けます. さらに運動量体積要素 も, 極座標表示を使って とします. そうすると, 放射エネルギーは
となります.
de Broglieの関係, および特殊相対性理論におけるエネルギーと運動量の関係によれば, 振動数が である光子のエネルギー には,
という関係があります. 従って , そして
と書けば, 放射エネルギーは
と得られます. ここで導入した分光放射輝度
によって, 光のビームが運ぶ輝度と, 光子の分布関数の関係がわかりました.
黒体輻射
(\ref{eq:spectral_radiance}) により, 光子の分布関数を与えれば, その分光放射輝度を求めることができます. 温度 で熱平衡状態にある光子の分布関数, Planck分布
を(\ref{eq:spectral_radiance})へ代入すれば, 分光放射輝度はただちに
と黒体輻射の式として求まります. ここで, はボルツマン定数です.
さいごに
この記事では, パストレーシングにおける光線を光子の集団によるビームと考えて, 放射エネルギーと分光放射輝度を導入(\ref{eq:radiant_energy})し, 光子の分布関数との対応関係(\ref{eq:spectral_radiance})を求めました. この内容は, 主に[藤田1990]をもとにしています. 興味のある方は, そちらも併せて参考にしてください.
マイクロファセット法線分布関数を作ってみる
これは レイトレ Advent Calendar 2018 - Qiita の記事として作成しました .
はじめに
マイクロファセットモデルには, 法線分布関数というものがあります[Heitz2014].
"GGX"と唱えれば, いい感じにラフな見た目を作り出してくれるアレです.
この関数は, 入射光がどのくらいの範囲に散乱されるかを表す, 単位立体角当たりの(規格化された)面積分布を表しています.
マイクロファセット法線とハーフベクトルが等しいという仮定から, これは, 物体表面の微細構造による散乱の統計的な結果を, 鏡面で出来た3次元形状の面積分布に置き換えていると見てもいいのではないでしょうか.
この見かたが正しければ, 適当な形状の鏡を持ってきて, 単位立体角当たりの面積分布を作ることで, それに対応する法線分布関数が求まるはずです.
この機会にちょっと試してみます.
マイクロファセット分布関数を作ってみる
話を簡単にするために, 3次元形状は回転体に限るとしておきます.
法線 をもつ微小面 ] に対して, 方向 から光のビームを打ち込むことを考えます.
次に, 光の当たった微小面 の位置を決めます.光は, 角度 に応じて回転軸から距離 だけずれた場所に当たるとし, さらに形状が を使って と書けるとします. その上で, 形状の傾きはその位置の傾斜角に等しい
また, マイクロファセットの法線 がハーフベクトル と一致することから, 方向 に向かって反射した光の広がる微小立体角を と表せるため,
と書き直すことができます. ここで, は負の値を取ることがあるため, 絶対値を取るようにしました*1. 式(3)と(4)から, 単位立体角当たりの面積は
と得られます. この を法線分布関数 に対応するものとみなして, その規格化について考えます. 法線分布関数の規格化条件は
この名前を"全断面積"としたのは, より, この量が入射光からマイクロファセットを眺めたときの断面積を表しているためです. これを規格化係数に用いることで, 法線分布関数を
回転楕円体のマイクロファセット法線分布関数
以上の議論が正しければ, [TR1975] と同様にして, 回転楕円体からGGX分布が得られるはずです.
はじめに, 長半径を, 短半径を とする回転楕円体
さいごに
この記事では, 鏡面を持つ回転体形状の, 単位立体角当たりの面積分布を考察することで, 法線分布関数を定義してみました. その一例として回転楕円体を考えたとき, GGX分布関数が得られることがわかりました.
微分散乱断面積との関連
この記事で行った光反射の考察はラザフォード散乱(https://en.wikipedia.org/wiki/Rutherford_scattering )を参考にしました. そして法線分布関数 と, 微分散乱断面積 は,
参考文献
[Heitz2014] Eric Heitz. Understanding the masking-shadowing function in microfacet-based brdfs. Journal of Computer Graphics Techniques (JCGT), 3(2):48–107, June 2014.
[TR1975] T. S. Trowbridge and K. P. Reitz. Average irregularity representation of a rough surface for ray reflection. J. Opt. Soc. Am., 65(5):531–536, May 1975.
*1:いま, 面積を求める計算を行っているからです.