CG

基礎からはじめる物理ベースレンダリング


はじめに

物理ベースレンダリングを勉強しようと資料を探してみると,いきなりレンダリング方程式や BRDF の解説があったり,金属か非金属か,表面は荒いかどうかといった材質の話だったりといった印象でした.極端な話,鏡面反射にクック・トランスの反射モデルを使えばいいよねという感じでした.ところが,資料を見ていくうちに,放射輝度(Radiance),放射照度(Irradiance)や,BSSDF とか様々な用語が出て来るわけです.そこで,光とは何なのか,光の特性はどのようなものか,放射エネルギーに関する基本知識,光が物体表面にぶつかったときに発生する物理現象を必要なものだけ選んでまとめてみました.わかりやすいように図も多く入れたつもりです.今回の目標はレンダリング方程式です.この内容は主にグラフィック関係のプログラマに向けて書いてあります.


物理ベースレンダリング

物理ベースレンダリング(Physically-based rendering:PBR)とは物体表面における光の反射や媒質内における散乱などの物理現象、光源からシーンを経てカメラに入射する光の伝搬などを計測して数式でモデル化したものを用いてレンダリングすることです。物理ベースレンダリングに使用されるモデルは様々で、物理現象を詳細に表現したモデルほど現実と見分けがつかないほどの映像を作成することが可能ですが、計算にとても時間がかかります。

物理ベースレンダリングで使用するモデルを理解するために、光に関する物理学の基礎を知る必要があります。


光は電磁波の一種です.電磁波は電場と磁場の変化によって作られる波のことで,光のエネルギーを放出または伝達します.この現象を放射といいます.太陽や電球などの光源から電磁波が発生し,大気中で散乱や吸収されながら直進し,物体表面にぶつかって反射が起こり,私たちの目に届きます.

光は媒質によって伝播されます.媒質となる物体を媒体といいます.


吸収と散乱

散乱とは光が微小の粒子にぶつかったときに,直進する方向を変えることです.方向は媒体の材質に応じて変化します.

吸収とは光のエネルギーが物質との相互作用によって,他の形のエネルギー(主に熱エネルギー)に変わることです.

媒体の厚さは吸収や散乱される度合いに大きく影響します。


光の特性


直進性

光は電磁波の一種なので、障害物がなく均一な物体の中を通る限りは直進します。光の速度は1秒間に30万kmという速さです。


反射性

光は鏡や研磨された金属の表面や白いものの表面で反射します(鏡面反射)。このとき,反射の法則により,完全に平坦な表面上においては、入ってきた光と反射する光の角度が等しくなります(完全反射)。しかし、表面に凹凸がある場合はいろんな方向に反射されます.これを乱反射といいます.


屈折性

光は通り抜ける物体によって速度が変わります。そのため、密度の違う物質の境界では光が折れ曲がって進むように見えます。これを屈折と呼びます。


吸収性

物質には特定の波長の光を吸収する性質があります。たとえば、赤いものは、白色光があたると赤以外の波長の光を吸収して赤を反射させるために人間の目には赤く見えます。また、明るい色ほど吸収せず、逆に黒はすべての光を吸収します。

光が吸収されると多くの場合、そのエネルギーは熱に変わります。変化した量に応じて光の強さは減衰し、光の色はその波長に応じて吸収された光量だけ変化しますが、光線の方向は変わりません。


光のエネルギー

太陽や照明の光が物体の表面に当たると光の特性により、反射されたり、屈折したり、吸収されたりします。光は何度も反射や屈折を繰り返して、私たちの眼に色として視覚されます。色は人間の視覚が作りだす心理的な量で、物理的な量のことではないそうです。光のもつ物理的なエネルギーは光学において放射量といいます。

人間の眼は光の波長に応じて感度が異なり、波長の違いは色として知覚されます。人間の眼を通した光の量を測光量といい、測光学(Photometry)の扱いになります。

物体の表面はそれ自身が発光することがあります。この場合は太陽や照明の光が当たって反射していなくても物体の表面から光が放出されます。


光線

光線がある表面に当たると以下のいずれか、もしくは両方が発生します。


  1. 光線が表面で反射し、異なる方向へ進んでいきます。これは反射の法則に従えば反射角は入射角に等しくなります

  2. 光線は表面で速度が変わり、屈折して一方の媒体からもう一方の媒体へと通り抜けます。

つまり、光線はある表面に当たると、反射する方向と屈折する方向の2つに分かれることになります。

tuto-pbr-ray.png

反射や屈折した光は、最終的にいずれかの媒体によって吸収されます。


反射光

物体表面に当たる光線は入射光(Incident light)、その当たる角度は入射角(Angle of Incidence)といいます。また,光線がある表面に当たって反射された光線は反射光(Reflected Light)、その角度は反射角(Angle of Reflection)といいます。

tuto-pbr-incident-reflected.jpg

Wes McDermott「The Comprehensive PBR Guide by Allegorithmic - vol. 1 Light and Matter : The theory of Physically-Based Rendering and Shading」©Allegorithmic


鏡面反射光

物体表面に当たって反射された光は鏡面反射光と呼びます。鏡面反射する光の方向は物体表面の凹凸によって変化します.もし完全に平坦で凸凹のない表面にぶつかると,反射した光線の角度と入射角は同じになります.これを反射の法則といいます.通常,物体表面には多少凹凸があるため,反射する光の方向は鏡面反射方向に拡散し,反射した光はぼやけて見えます.一方,物体表面がなめらかなときは収束して,反射した光は鮮明になります

tuto-pbr-reflection.jpg

Wes McDermott「The Comprehensive PBR Guide by Allegorithmic - vol. 1 Light and Matter : The theory of Physically-Based Rendering and Shading」©Allegorithmic


拡散反射光

光線はある媒体から別の媒体に入ってくることがあります.このとき媒体と別の媒体の境界で屈折します.屈折して別の媒体に入った光はその媒体の内部で何度も散乱されたり,吸収されてしまいます.このとき吸収されずに散乱された光がまた元の媒体に出射されることがあります(媒体の境界でまた屈折します)。これを拡散反射と呼びます。つまり、拡散反射光とは屈折した光のことになります。

媒体から別の媒体に入射した光が元の媒体に戻ってくるときに,別の媒体から出射される位置は,入射した位置とは限りません.これが表面下散乱という物理現象を起こしています.例えば,人間の皮膚内では光が進めば吸収されていきますので,皮膚内で進む距離が長くなると光が弱くなっていきます.光源に向かって手をかざしてみると皮膚の薄いところがより透けて見えます.これは皮膚内に入射した光が外に出射されるまでに皮膚内を進んだ距離が短いためで,この距離はその媒体の厚さに影響を受けると言えます.

tuto-pbr-diffuse-specular.jpg

Wes McDermott「The Comprehensive PBR Guide by Allegorithmic - vol. 1 Light and Matter : The theory of Physically-Based Rendering and Shading」©Allegorithmic


微小面

光線が物体表面にぶつかって反射する方向は,物体表面の凹凸に依存します.粗い物体表面を拡大して見てみると,そこには肉眼では確認できないほど小さな凹凸が見られます.この小さな凹凸は微小面(microfacet)と呼ばれる小さい面が集まっているものとして考え,微小面の傾きから物体表面の粗さを計算します.各微小面は完全鏡面反射すると想定します.微小面により光が物体表面に到達する直前や,光が物体表面で反射した直後に,反射点の近傍の物体表面によって遮られるという現象が起きます.この現象をローカルオクリュージョンといいます.ローカルオクリュージョンには,セルフシャドウイングとセルフマスキングがあります.セルフシャドウイングは光が物体表面に到達するまでの間に物体表面によって遮られる現象のことで,セルフマスキングは光が物体表面で反射された後に物体表面から遠ざかる間に遮られる現象のことです.

tuto-pbr-local-occlusion.jpg

Wes McDermott「The Comprehensive PBR Guide by Allegorithmic - vol. 1 Light and Matter : The theory of Physically-Based Rendering and Shading」©Allegorithmic

微小面は光の向きと視線の向きのちょうど中間の方向に向かって光を反射すれば,その微小面から反射された光が見えるということになりますが,ローカルオクリュージョンによって光が遮られる場合もあります.物体表面が粗く凹凸があるということは,微小面の傾きがばらばらであり,これによって光が拡散します.

tuto-pbr-microfacet.jpg

Wes McDermott「The Comprehensive PBR Guide by Allegorithmic - vol. 1 Light and Matter : The theory of Physically-Based Rendering and Shading」©Allegorithmic


記号一覧

ここで利用する記号と意味の表です.

記号
説明

$x$
位置

$x'$
入射光の位置

$\vec{n}$
xにおける法線(常に正規化されている)

$\vec{\omega}$
方向(表面から離れる方向)

$\vec{\omega}'$
放射輝度(radiance)の入射方向(表面から離れる方向)

$d\vec{\omega}$
立体角の微分

$(\theta,\phi)$
極座標系における方向

$L$
放射輝度

$L(x,\vec{\omega})$
位置xにおける$\vec{\omega}$方向の放射輝度

$L(x,\vec{\omega}')$
位置xに$\vec{\omega}$方向から入射する放射輝度

$L(x' \rightarrow x)$
位置x'からx方向に出射される放射輝度

$L_{e}$
放射された(emitted)放射輝度

$L_{r}$
反射された(reflected)放射輝度

$L_{i}$
入射する(incident)放射輝度

$\Phi$
放射束(flux)

$E$
放射照度(irradiance)

$f_{r}$
双方向反射率分布関数(BRDF)

$f_{d}$
拡散(diffuse)BRDF

$f_{s}$
鏡面(specular)BRDF

$\rho$
反射率(reflectance)

$\Omega$
方向を表す半球(hemisphere)

$\eta$
屈折率(index of refraction)


放射束

光の基本単位は光子(photon)です。放射エネルギー(radiant energy)$ Q $ は、光子が集まったエネルギーです。このエネルギーを単位時間あたりで表したものを放射束(Flux)といいます。$ \Phi $ で表記します。

$$

\Phi = \frac{\Delta Q}{\Delta d} = \frac{dQ}{dt}

$$


放射照度(Irradiacne)

放射照度 $ E $ は単位面積あたりの放射束のことです.ある面積 $ A $ に到達する放射束を $ \Phi $ とすると、放射照度 $ E $ は次のようになります。

$$

E = \frac{\Phi}{A}

$$

ある位置 x に入ってくる放射照度は次のようになります。

$$

E(x) = \frac{d \Phi}{dA}

$$

$dA$ は単位面積で,位置 x の法線方向に垂直な微小面の面積のことです.

tuto-pbr-irradiance.png

放射照度は入ってくる放射束のことですが、物体表面から出ていく放射束のことを放射発散度(radiant exitance)と呼び、$ M $ と記述します。また、放射発散度はラジオシティ(radiocity)$ B $ としても知られています。


立体角

立体角(solid angle)は、方向と光線の角度的な「大きさ」を表します。立体角の単位はステラジアン(sr)です.立体角は平面角を3次元に拡張したものと考えることができます.平面角 $\theta$ は,円上に張られた弧の長さ $l$ を円の半径 $r$ で割ったものです.

$$

\theta = \frac{l}{r}

$$

tuto-pbr-radian.png

これを3次元で考えると,半径 $r$ の球面上の面積 $A$ に対応する立体角 $\omega$ は $\omega = A/r^2$ です.球の面積は $4 \pi r^2$ ですから,球全体の立体角は $4 \pi$ ステラジアンになります.

tuto-pbr-solid-angle.png

この方向と大きさは、球面座標($ \theta, \phi $)を用いて表現することができます。ここで,点< $r,\theta,\phi$ >における微小表面積を考えてみます.

tuto-pbr-solid-angle-polar.png

極角 $\theta$ における円(点< $r,\theta, \phi$ >を通る x-y 平面に平行な円:図の赤い円)の半径は $r\sin\theta$ ですので,この円上の方位角方向の微小弧長 a は $r \sin \theta d\phi$ となります.そして,極角方向の微小弧長 b は $r d\theta$ となります.

tuto-pbr-solid-angle-area.png

最終的に球面上の点< $r,\theta,\phi$ >における微小表面積は次のようになります.

\begin{align}

dA &= ab \\
&= r \sin \theta d\phi \times r d \theta \\
&= r^2 \sin \theta d\theta d\phi
\end{align}

半径 $r$ の球面上の面積 $A$ に対する立体角 $\omega$ は,$\omega = A/r^2$ でしたので,微小立体角は次のようになります.

\begin{align}

d\vec{\omega} &= \frac{dA}{r^2} \\
&= \frac{r^2 \sin \theta d\theta d\phi}{r^2} \\
&= \sin \theta d \theta d \phi
\end{align}


放射強度

放射強度(radiant intensity)$ I $ は、単位立体角($ \omega $)あたりの放射束です。

$$

I(\vec{\omega}) = \frac{d \Phi}{d \vec{\omega}}

$$

放射強度は一定の方向に、どの程度の放射束が放出されているのかを表します。同じ 100W の電球でも、笠をつけて一定方向に光を集中させることによって、強い放射強度を得ることができます。


放射輝度

放射輝度(radiance)$ L $ は、単位立体角あたり、単位投影面積あたりの放射束のことです。単位投影面積 $\cos\theta dA$ とは,光が進む方向に直交する面へ単位面積を投影したもので,放射輝度はこの単位投影面積で放射強度を割った値になります.

tuto-pbr-radiance.png

$$

L(x,\vec{\omega}) = \frac{d^2 \Phi}{\cos \theta dA d \vec{\omega}}

$$

物体表面における入射してくる放射輝度がわかっていれば、半球面上のすべての方向 $\Omega$ と物体表面の領域 $A$ で積分することにより、放射束を計算することができます。

$$

\Phi = \int_{A} \int_{\Omega} L(x,\vec{\omega}')(\vec{\omega}' \cdot \vec{n}) d \vec{\omega}' dx

$$


放射照度と放射輝度の関係

ある領域 $A$ を通過する放射束 $\Phi$ があるとすると,ある領域の放射照度 $E$ は $\Phi/A$ となります.また同じ位置で,同じ放射束が通過する $\vec{\omega}$ 方向と直交する面の領域を考えると,この領域の面積 $A_{\omega}$ は $A \cos\theta$ となります.これはランバートのコサイン則として知られています.

tuto-pbr-lambert-cosine-law.png

よって,この領域における放射照度は次のようになります.

$$

E_{\vec{\omega}} = \frac{\Phi}{A_{\vec{\omega}}} = \frac{\Phi}{A \cos\theta}

$$

これに放射照度の関係を入れると次のようになります.

$$

E = E_{\vec{\omega}} \cos\theta

$$

点 x における放射照度は,半球面上のあらゆる方向から入射した放射輝度を足し合わせたものと考えられます.放射照度と放射輝度との関係により,放射輝度に入射角の余弦($ \cos\theta $)を掛けることで放射照度に変換することができます.入射角の余弦は,法線ベクトルと入射方向の単位ベクトルとの内積 $ \vec{\omega}' \cdot \vec{n} $ で求められ,一般的にコサイン項と呼ばれています.これらをまとめると次のようになります.

$$

E(x) = \int_{\Omega} L_{i}(x,\vec{\omega}') (\vec{\omega}' \cdot \vec{n}) d\vec{\omega}'

$$


双方向散乱面反射率分布関数

光がある媒体から別の媒体へ屈折して入射し,内部で散乱して光が入射した位置とは違う場所から出射していくことで,表面下散乱の物理現象が発生します.これは皮膚などの半透明(translucent)な材質でよく起こる現象です.この散乱は、双方向散乱面反射率分布関数(bidirectional scattering surface reflectance distribution function:BSSRDF)で表すことができます.

tuto-pbr-bssrdf.png

BSSRDF $S$ は、位置 $x$ において $\vec{\omega}$ 方向に反射された放射輝度の微分 $dL_{r}$ を,位置 $x'$ に方向 $\vec{\omega}$ から入射する放射束の微分 $d\Phi_{i}$ で表せます.

$$

S(x,\vec{\omega},x',\vec{\omega}') = \frac{dL_{r}(x,\vec{\omega})}{d\Phi_{i}(x',\vec{\omega}')}

$$


双方向反射率分布関数

BSSRDF では入射する位置と出射する位置を別々に考えた関数ですが,入射する位置と出射する位置が同じだと想定して,BSSRDF を単純化したのが双方向反射率分布関数(bidirectional reflectance distribution function:BRDF)です.

tuto-pbr-brdf.png

BRDF $f_{r}$ は,反射される放射輝度と放射照度の関係を以下のように定義しています.

$$

f_{r}(x,\vec{\omega}',\vec{\omega}) = \frac{dL_{r}(x,\vec{\omega})}{dE_{i}(x,\vec{\omega}')} = \frac{dL_{r}(x,\vec{\omega})}{L_{i}(x,\vec{\omega}')(\vec{\omega}' \cdot \vec{n}) d \vec{\omega}'}

$$

BRDF は,点 $x$ に $\vec{\omega}'$ 方向から入射した光のどれだけが,$\vec{\omega}$ 方向に反射されるかを表す割合です.一般的に反射の特徴は,「物体表面の材質」と「光の当たり方」の2つで決まってきます.「物体表面の材質」の部分は BRDF,「光の当たり方」の部分はコサイン項で定義します.

物体表面上のある位置に入射する放射輝度がわかっていれば,それがあらゆる方向に反射していく放射輝度を計算することができます.これは,入射する放射輝度 $L_{i}$ を積分することによって求められます.

$$

L_{r}(x,\vec{\omega}) = \int_{\Omega}f_{r}(x,\vec{\omega}',\vec{\omega})dE(x,\vec{\omega}') = \int_{\Omega}f_{r}(x,\vec{\omega}',\vec{\omega})L_{i}(x,\vec{\omega}')(\vec{\omega}' \cdot \vec{n}) d \vec{\omega}

$$

BRDF には2つの物理的に重要な性質があります.


相反性

光が進む方向に依存しないというヘルムホルツ(Helmholtz)の相反性(reciprocity)の法則を満たしている必要があります.つまり,光が入射する方向と出射する方向が入れ替わっても BRDF の結果は変わらないことを意味しています.

$$

f_{r}(x,\vec{\omega}',\vec{\omega}) = f_{r}(x,\vec{\omega},\vec{\omega}')

$$


エネルギー保存則

物体表面は,それが受けた以上の光を反射することはできず,以下の式を満たさなければなりません.

$$

\int_{\Omega} f_{r}(x,\vec{\omega}',\vec{\omega})(\vec{\omega}' \cdot \vec{n}) d \vec{\omega}' \leq 1, \forall \vec{\omega}

$$


反射率

物体表面に入射する放射束と反射される放射束の比のことで,物体表面の反射率(reflectance)$ \rho $ で表します.

$$

\rho(x) = \frac{d\Phi_{r}(x)}{d\Phi_{i}(x)}

$$

物理法則に基づく場合,この値は0~1の範囲でなければなりません.


BRDF と反射モデル

BRDF は光のエネルギーを用いて厳密に定義する物理量です.このBRDFを用いて実際に反射される放射輝度を計算できるようにしたものが反射モデルです.BRDFが放射照度と放射輝度の比と定義されていること,放射照度が法線と光源方向のなす角の余弦に依存していることから,反射される放射輝度は BRDF に余弦項 $\cos\theta$ を掛けたもので,この形が一般的な反射モデルです.

光反射の過程は物理的に複雑で,物体表面の反射特性を詳細にモデル化した反射モデルほど複雑で,計算する時間も多くなっていきます.


正規化 BRDF

BRDFの性質であるエネルギー保存則は,ある位置 $x$ において放出される放射輝度が入射される放射輝度(放射照度)を超えてはいけないことでした.BRDFに基づいた反射モデルよりも以前によく使われていたランバート反射モデルやフォン反射モデルなどはエネルギー保存則を満たしていません.そこで,それらの反射モデルを正規化することで,エネルギー保存則を満たし,BRDF に基づいた反射モデルとして使用することができます.

例えば,BRDFに基づいていないランバート反射モデルは次のようになっています($\rho_{d}$ は拡散反射率).

$$

L_{lambert} = \rho_{d} \cos\theta

$$

これを BRDF とコサイン項に分けると BRDF は $\rho_{d}$ となります.エネルギー保存則を考慮すると次の式を満たさなければなりません.

$$

\int_{\Omega} \rho_{d} \cos\theta d\vec{\omega} \leq 1

$$

$\cos\theta$ の半球積分は $\pi$ なので(詳細は拡散反射のところで説明),拡散反射率 $\rho_{d}$ を 1 とすると,結果は $\pi$ となり明らかに 1 を超えてしまいます.そこで,拡散反射率を $\pi$ で割ることでエネルギー保存則を満たすことになります.

$$

\int_{\Omega} \frac{\rho_{d}}{\pi} \cos\theta d\vec{\omega} \leq 1

$$

つまり,エネルギー保存則を満たしたランバート反射の BRDF は $\frac{\rho_{d}}{\pi}$ となり,この BRDF は正規化されていることになります.


拡散反射

物体表面に光がぶつかると,光の一部は屈折して物体の中に入ってから物体表面に放出されることがあります.このとき,BRDF では入射した光と同じ位置から物体表面に放出されるとします.放出される光の方向は不規則なため,全方向に放出されると考えることもできます.

tuto-pbr-diffuse-brdf.png

ランバート反射(Lambertian diffuse reflection)では入射光の向きにかかわらず,反射輝度はすべての方向に対して一定になります.ランバート反射を引き起こす物体表面をランバート面といいます.

tuto-pbr-lambert-brdf.png

$$

L_{r}(x,\vec{\omega}) = f_{r,d} \int_{\Omega} dE_{i}(x,\vec{\omega}') = f_{r,d}(x) E_{i}(x)

$$

この関係を用いて,ランバート面の拡散反射率 $\rho_{d}$ を求めると,以下のようになります.

\begin{align}

\rho_{d}(x) &= \frac{d\Phi_{r}(x)}{d\Phi_{l}(x)} = \frac{L_{r}(x) dA \int_{\Omega} (\vec{\omega} \cdot \vec{n}) d\vec{\omega}}{E_{i}(x) dA} \\
L_{r}(x) &= f_{r,d} E(x) \\
\rho_{d}(x) &= f_{r,d}(x) \int_{\Omega}(\vec{n} \cdot \vec{\omega}') = \pi f_{r,d}(x)
\end{align}

この $\rho_{d}$ をディフューズアルベド(diffuse albedo),単にアルベドともいいます.

整理すると,ランバート反射の BRDF $f_{r,d}$ は次のようになります.

$$

f_{r,d}(x) = \frac{\rho_{d}(x)}{\pi}

$$


cosΘの半球積分

ランバート反射面ではすべての方向に一様に反射しますので,微小立体角あたりの放射光は $\cos \theta$ に比例します.半球上のすべての方向に反射する光の総量は $\cos \theta$ を積分することで求められ,次のようになります.

$$

\int_{\Omega}(\vec{n} \cdot \vec{\omega}') d\vec{\omega} = \pi

$$

つまり,$\cos\theta$ を半球積分すると $\pi$ になります.この計算は次のようになっています.

法線ベクトルと入射ベクトルの内積はコサイン項と同じです.

$$

(\vec{n} \cdot \vec{\omega}') = \cos \theta

$$

半球の積分は球面座標系の積分に書き直せます.

$$

\int_{\Omega} f(\theta,\phi) d\vec{\omega}' = \int_{0}^{2\pi} \int_{0}^{\pi/2} f(\theta,\phi) \sin\theta d\theta d\phi

$$

整理すると

\begin{align}

\int_{\Omega}(\vec{n} \cdot \vec{\omega}) d\vec{\omega}' &= \int_{0}^{2\pi} \int_{0}^{\frac{\pi}{2}} \cos\theta \sin\theta d\theta d\phi \\
&= \int_{0}^{2\pi} d\phi \int_{0}^{\pi/2} \cos\theta \sin\theta d\theta \\
&= 2\pi \int_{0}^{2\pi} \cos\theta \sin\theta d\theta \\
2倍角の公式:\sin2\theta = 2\sin\theta\cos\theta \\
&= 2\pi \int_{0}^{2\pi} \frac{\sin2\theta}{2} d\theta \\
&= \pi \int_{0}^{2\pi} \sin2\theta d\theta \\
t = 2\theta, \frac{dt}{d\theta} = 2, d\theta = \frac{1}{2}dt \\
&= \pi \int_{0}^{\pi} \sin t \frac{1}{2} dt \\
&= \pi \frac{1}{2} [-\cos t]_ {0}^{\pi} \\
&= \pi \frac{1}{2}(-\cos \pi - (-(\cos 0)) \\
&= \pi \frac{1}{2}(1+1) = \pi \frac{1}{2}(2) \\
&= \pi
\end{align}


鏡面反射

鏡面反射は入射光を鏡面反射方向に反射します.

tuto-pbr-specular-reflection.png

通常,物体表面にはある程度の粗さがあるため,鏡面反射方向だけでなく,鏡面反射方向に若干拡散します.この部分を光沢といいます.

tuto-pbr-glossy-reflection.png

次の図は物体表面の粗さと光沢の関係を表しています.右にいくほど表面は粗くなり,光沢部分が広がって鏡面反射した光(ハイライト)がぼやけていきます.

tuto-pbr-specular-roughness.png

また,たとえば金属のような鏡面反射率が高いものは周囲の景色が映りこんで見えます.このときの映り込んだ景色も表面の粗さによって見え方が変わってきます.

tuto-pbr-specular.png

鏡面反射によって反射された放射輝度は次のようになります.

$$

L_{r}(x,\vec{\omega_{s}}) = \rho_{s}(x) L_{i}(x,\vec{\omega}')

$$

完全な鏡面反射における反射方向 $\vec{\omega}_{s}$ は,次のようになります.

$$

\vec{\omega}_{s} = 2(\vec{\omega}' \cdot \vec{n})\vec{n} - \vec{\omega}'

$$


反射と屈折

光が物体表面にぶつかると光は反射光と屈折光にわかれますが,このとき,屈折する方向はスネルの法則で求められます.また,入射光が反射光と屈折光にどれくらい分配されるかはフレネルの方程式で求められます.

tuto-pbr-refraction.png

屈折する方向はスネルの法則で求められ,入射光が反射光と屈折光にどれくらい分配されるかはフレネルの方程式で求められます.


フレネルの方程式

屈折率 $\eta_{1}$ の媒質中の光線が,屈折率 $\eta_{2}$ の物質にぶつかるとき,光の反射量は以下のように計算することができます.

\begin{align}

\rho_{\parallel} &= \frac{\eta_{2} \cos \theta_{1} - \eta_{1} \cos \theta_{2}}{\eta_{2} \cos \theta_{1} + \eta_{1} \cos \theta_{2}} \\
\rho_{\perp} &= \frac{\eta_{1} \cos \theta_{1} - \eta_{2} \cos \theta_{2}}{\eta_{1} \cos \theta_{1} + \eta_{2} \cos \theta_{2}}
\end{align}

フレネルの方程式は偏光された光を対象としています.偏光とは特定の方向に振動している光のことです.普通の光は,あらゆる方向に振動している光が混ざっています.

$\rho_{\parallel}$ は入射面に対して平行な電界を有する光の反射係数(reflection coefficient)であり,$\rho_{\perp}$ は直交するそれになります.

物質ごとの屈折率(index of refracction)は計測されて,書籍やインターネット上で見つけることができます.

偏光されていない光に対しては鏡面反射率(reflectance)は以下のようになります.

F_{r}(\theta) = \frac{1}{2} (\rho_{\parallel}^2 + \rho_{\perp}^2) = \frac{d\Phi_{r}}{d\Phi_{i}}

フレネルの反射係数は Shlick の近似式がよく使われます.

F_{r}(\theta) \approx F_{0} + (1-F_{0})(1-\cos\theta)^5

$F_{0}$ は,垂直入射におけるフレネル反射係数です.

F_{0} = \frac{(\eta_{1} - \eta_{2})^2}{(\eta_{1} + \eta_{2})^2}


屈折

光がある媒質を透過する速度を $v$ とするとき,真空中の光速 $c$ と媒質中の光速との比は

\eta = \frac{c}{v}

となります.この $\eta$ がその媒質の屈折率です.

入射角と屈折角の関係は,屈折前の媒質の屈折率 $\eta_{1}$ と,屈折後の媒質の屈折率 $\eta_{2}$ からスネルの法則(Snell's law)を用いて計算することができます.

\eta_{1} \sin\theta_{1} = \eta_{2} \sin\theta_{2}

$\theta_{2}$ は屈折角です.

tuto-pbr-refraction-list.jpg


スネルの法則

tuto-pbr-refraction-boundary.jpg

$PQ$ を媒質の境界として,媒質1内の点$A$から境界$PQ$上の点$O$に達して屈折し,媒質2内の点$B$に進むとします.

媒質1での光速を $v_{1}$,媒質2での光速を $v_{2}$,真空中の光速を $c$ とすれば

\begin{align}

\eta_{1} &= \frac{c}{v_{1}} \\[2ex]
\eta_{2} &= \frac{c}{v_{2}}
\end{align}

となります.

点$A$と点$B$から境界$PQ$に下ろした垂線の足を $H_{1}, H_{2}$ としたとき

\begin{align}

H_{1}H_{2} &= l \\[2ex]
AH_{1} &= a \\[2ex]
BH_{2} &= b
\end{align}

と定義します.

点$H_{1}$から点$O$までの距離を$x$として,この$x$を求めて点$O$の位置を特定します.

$AO$間を光が進むのにかかる時間は

t_{AO} = \frac{AO}{v_{1}} = \frac{\eta_{1}}{c}AO

また,$OB$間を光が進むのにかかる時間は

t_{OB} = \frac{OB}{v_{2}} = \frac{\eta_{2}}{c}OB

となります.したがって,光が$AOB$間を進むのにかかる時間は次のようになります.

t = t_{AO} + t_{OB} = \frac{1}{c}(\eta_{1}AO + \eta_{2}OB)

$AO$ と $OB$ はピタゴラスの定理から

\begin{align}

AO &= \sqrt{x^2+a^2} \\[2ex]
OB &= \sqrt{(l-x)^2+b^2}
\end{align}

だとわかります.整理すると次のようになります.

t = \frac{1}{c}(\eta_{1}\sqrt{x^2+a^2} + \eta_{2}\sqrt{(l-x)^2+b^2} \tag{1}

フェルマーの原理によると,「光が媒質中を進む経路は,その間を進行するのにかかる時間が最小となる経路である」といえます.

すなわち,光は$AOB$間を進むのにかかる時間$t$が最小となる経路を通ると考え,さきほどの式(1)の$t$が最小となるのは

\frac{dt}{dx} = 0

を満たすときです.式(1)を代入すると次のようになります.

\frac{dt}{dx} = \frac{d}{dx} \left\{ \frac{1}{c}(

\eta_{1}\sqrt{x^2+a^2} +
\eta_{2}\sqrt{(l-x)^2+b^2}
)
\right\} = 0

1/c は定数なので外に出せます.

\frac{dt}{dx} = \frac{1}{c} \left(

\eta_{1}\sqrt{x^2+a^2} +
\eta_{2}\sqrt{(l-x)^2+b^2}
\right)' = 0

和の微分ですので,$\eta_{1}$と$\eta_{2}$のある項をそれぞれ$x$で微分して足し合わせます.

\begin{align}

\eta_{1}\sqrt{x^2+a^2}'
&= \eta_{1} \frac{(x^2+a^2)'}{2\sqrt{x^2+a^2}} \\[2ex]
&= \eta_{1} \frac{2x}{2\sqrt{x^2+a^2}} \\[2ex]
&= \eta_{1} \frac{x}{\sqrt{x^2+a^2}} \\[2ex]
\eta_{2}\sqrt{(l-x)^2+b^2}'
&= \eta_{2} \frac{((l-x)^2+b^2)'}{2\sqrt{(l-x)^2+b^2}} \\[2ex]
&= \eta_{2} \frac{(l^2-2lx+x^2+b^2)'}{2\sqrt{(l-x)^2+b^2}} \\[2ex]
&= \eta_{2} \frac{-2(l-x)}{2\sqrt{(l-x)^2+b^2}} \\[2ex]
&= \eta_{2} \frac{-(l-x)}{\sqrt{(l-x)^2+b^2}}
\end{align}

整理すると

\frac{\eta_{1}}{c} \frac{

x
}{
\sqrt{
x^2 + a^2
}
} -
\frac{\eta_{2}}{c} \frac{
l-x
}{
\sqrt{
(l-x)^2 + b^2
}
} = 0
\tag{2}

図から $\sin\theta_{1}, \sin\theta_{2}$ を定義すると

\begin{align}

\sin\theta_{1} &= \frac{H_{1}O}{AO} = \frac{x}{\sqrt{x^2+a^2}} \\[2ex]
\sin\theta_{2} &= \frac{H_{2}O}{OB} = \frac{l-x}{\sqrt{(l-x)^2+b^2}}
\end{align}

となりますので,先ほどの式(2)を書き換えて移項し,$c$ を両辺にかけて消すと

\eta_{1}\sin\theta_{1} = \eta_{2}\sin\theta_{2}

となります.これがスネルの法則の式です.


全反射

スネルの法則の式を変形して,

\sin\theta_{2} = \frac{\eta_{1}}{\eta_{2}} \sin\theta_{a} \tag{3}

とするとき,$\eta_{1} < \eta_{2}$ ならば,$\eta_{1}/\eta_{2} < 1$ となります.また,$0 < \sin\theta_{1} < 1$ であり,上記の式(3)から $\sin\theta_{2}$ は

0 < \sin\theta_{2} < 1

となりますから,式(3) を満たす屈折角 $\theta_{2}$ が必ず存在することになります.

逆に,$\eta_{1} > \eta_{2}$ の場合は,$\eta_{1}/\eta_{2} > 1$ なので,式(3) において,$\sin\theta_{1}$ が大きいと,$\sin\theta_{2} > 1$ となり解が得られない場合があります.入射角$\theta_{1}$ を次第に大きくしていくとき,

\sin\theta_{2} = 1

すなわち,屈折角 $\theta_{2}$ が $90^\circ$ となり,屈折光が発生しなくなる限界の入射角を $\theta_{c}$ とすれば,

\sin^{-1} \frac{\eta_{2}}{\eta_{1}}

と表せます.下図のように入射角が$\theta_{c}$を超えると全部の光を反射します.これを全反射といいます.

また,この屈折光が発生しなくなる限界の入射角$\theta_{c}$を全反射の臨界角といいます.

tuto-pbr-full-refraction.jpg


屈折光の方向

屈折光の方向はスネルの法則を使って求めることができます.

入射ベクトルと法線ベクトルを含む面があるとし,その面上で法線ベクトルと直交している単位ベクトルを$\vec{v}$とします.

tuto-pbr-refraction-v.jpg

この単位ベクトルと屈折ベクトル $\vec{\omega}_{r}$ の関係を表すと次のようになります.

\vec{\omega}_{r} =  -\vec{v} \sin\theta_{2} -\vec{n} \cos\theta_{2}

入射ベクトルと法線ベクトルを使って,$\vec{v}$の関係を表すと

\vec{v} \sin\theta_{1} = \vec{\omega} - (\vec{\omega} \cdot \vec{n}) \vec{n}

これを先ほどの式に代入すると

\vec{\omega}_{r} = -\frac{

\vec{\omega} - (\vec{\omega} \cdot \vec{n}) \vec{n}
}{
\sin\theta_{1}
} \sin\theta_{2}
-\vec{n} \cos\theta_{2}

スネルの法則を使って$\sin\theta_{1}$を書き換えると

\begin{align}

\vec{\omega}_{r} &= -\frac{
\vec{\omega} - (\vec{\omega} \cdot \vec{n}) \vec{n}
}{
\frac{\eta_{2}}{\eta_{1}} \sin\theta_{2}
} \sin\theta_{2}
-\vec{n} \cos\theta_{2} \\[2ex]
&= -\frac{\eta_{1}}{\eta_{2}} \left(
\vec{\omega} - (\vec{\omega} \cdot \vec{n}) \vec{n}
\right)
-\vec{n} \cos\theta_{2}
\end{align}

次に $\cos\theta_{2}$ を変形していきます.まず $\cos^2\theta = 1-sin^2\theta$ を使って

\vec{\omega}_{r} = 

-\frac{\eta_{1}}{\eta_{2}} \left(
\vec{\omega} - (\vec{\omega} \cdot \vec{n}) \vec{n}
\right)
-\vec{n} \sqrt{
1-\sin^2\theta_{2}
}

スネルの法則を使って $\sin^2\theta_{2}$ を $\sin^2\theta_{1}$ に変えます.

\vec{\omega}_{r} = 

-\frac{\eta_{1}}{\eta_{2}} \left(
\vec{\omega} - (\vec{\omega} \cdot \vec{n}) \vec{n}
\right)
-\vec{n} \sqrt{
1-\left(
\frac{\eta_{1}}{\eta_{2}}
\right)^2 \sin^2\theta_{1}
}

そして,$\sin^2\theta_{1}$ を $1-\cos^2\theta_{1}$ に置き換えます.

\vec{\omega}_{r} = 

-\frac{\eta_{1}}{\eta_{2}} \left(
\vec{\omega} - (\vec{\omega} \cdot \vec{n}) \vec{n}
\right)
-\vec{n} \sqrt{
1-\left(
\frac{\eta_{1}}{\eta_{2}}
\right)^2 (1-\cos^2\theta_{1})
}

$\cos\theta_{1}$ は入射ベクトルと法線ベクトルの内積で求まります.

\cos\theta_{1} = \vec{\omega} \cdot \vec{n}

これを代入すると

\vec{\omega}_{r} = 

-\frac{\eta_{1}}{\eta_{2}} \left(
\vec{\omega} - (\vec{\omega} \cdot \vec{n}) \vec{n}
\right)
-\vec{n} \sqrt{
1-\left(
\frac{\eta_{1}}{\eta_{2}}
\right)^2 (1-(\vec{\omega} \cdot \vec{n})^2)
}

となります.これが屈折光の方向を計算する式です.


屈折光の量

屈折光が運ぶ光の量は $1-F_{r}$ になります.


様々な BRDF モデル

拡散反射や鏡面反射など各反射に適した BRDF が提唱されています.

tuto-pbr-brdf-models.png

五反田義治「本当のHDR表現へ~アーティストにも知ってほしいリフレクタンスの基礎~」©tri-Ace, 2009


マイクロファセット BRDF

鏡面反射の BRDF としてクック・トランスのマイクロファセット BRDF は物理ベースの BRDF としてよく使われています.

この BRDF は次のように定義されています.

$$

f_{r} = \frac{DGF}{4 \cos\theta_{i} \cos\theta_{r}}

$$

D はマイクロファセット分布関数,G は幾何減衰項,F はフレネルです.

ここでは記号を次のように定義します.

記号
説明

$n$
法線ベクトル

$l$
ライトベクトル

$v$
視線ベクトル

$h$
ライトベクトルと視線ベクトルの中間ベクトル

$\alpha$
ラフネスの2乗

これらの記号を使って,先ほどの式を整理すると次のようになります.

$$

f_{r} = \frac{D(h) G(l,v,h) F(v,h)}{4(n \cdot l)(n \cdot v)}

$$


マイクロファセット分布関数

法線を中心とした半球内の任意の方向を向いた微小面の分布関数です.微小面がどれだけ任意の方向を向いているかを表します.この任意の方向は入射方向の逆ベクトルと,出射方向のベクトルの中間ベクトルが使われます.マイクロファセット分布関数も様々な関数が提唱されていますが,よく使われるものは GGX(Throwbridge-Reiz) です.GGX はエネルギー保存が考慮されているNDF(Normal Distribution Function)です.

$$

D_{GGX}(h) = \frac{\alpha^2}{\pi((n \cdot h)^2(\alpha^2-1)+1)^2}

$$

tuto-pbr-cook-torrance-D.jpg


幾何減衰項

幾何減衰項(Geometry Attenuation Factor)は,微小面によるローカルオクリュージョンでの隠蔽減衰を表したものです.よく使われるのは Smith モデルに,Schlick の近似式を使ったものです.

\begin{align}

k &= \frac{\alpha}{2} \\
G_{Schlick}(v) &= \frac{n \cdot v}{(n \cdot v)(1-k) + k} \\
G_{Smith}(l,v,h) &= G_{Schlick}(l) G_{Schlick}(v)
\end{align}

tuto-pbr-cook-torrance-G.jpg


フレネル

フレネルは Schlick の近似式を使います.

$$

F_{Schlick}(v,h) = F_{0} + (1-F_{0})(1- v \cdot h)^5

$$

tuto-pbr-cook-torrance-F.jpg


"4" か "π" か

Walterらの論文「Microfacet Models for Refraction through Rough Surface」によればマイクロファセット BRDF は以下のように定義されています.

$$

f_{r} = \frac{DGF}{4 \cos\theta_{i} \cos\theta_{r}}

$$

クック・トランスの論文「A Reflectance Model for Computer Graphics」では BRDF は次のように定義されています.

$$

f_{r} = \frac{F}{\pi}\frac{DG}{\cos\theta_{i} \cos\theta_{r}}

$$

クック・トランスの BRDF としてどちらともよく使われているみたいなのでややこしいですが,基本的に Walter らのマイクロファセット BRDF を使うことで問題なさそうです.後者の式はよくみるとフレネルを $\pi$ で割っているように見えます.論文によると,フレネル項は計測されたデータやSchlick近似の場合,垂直方向に入射してきたときの反射率になるので,ランバート反射のように反射率を $\pi$ で割ります.では,前者の方はというと,これも論文によれば,マイクロファセット分布関数Dの正規化が後者のときとは異なっているからです(例えば同じ Beckmann でも前者と後者の論文では数式が違う).


レンダリング方程式

点 $x$ から $\vec{\omega}$ 方向に出射される(outgoing)放射輝度 $L_{o}$ は,放射される(emitted)放射輝度 $L_{e}$ と,反射される(reflected)放射輝度 $L_{r}$ の和です.

$$

L_{o}(x,\vec{\omega}) = L_{e}(x,\vec{\omega}) + L_{r}(x,\vec{\omega})

$$

点 $x$ における放射照度と,$\vec{\omega}$' 方向にどれだけ反射するかを表す BRDF を用いて,$\vec{\omega}$ 方向に反射される放射輝度 $L_{r}(x,\vec{\omega})$ を書き直すと次のようになります.

$$

L_{o}(x,\vec{\omega}) = L_{e}(x,\vec{\omega}) + \int_{\Omega} f_{r}(x,\vec{\omega}',\vec{\omega}) L_{i}(x,\vec{\omega}') (\vec{\omega}' \cdot \vec{n}) d\vec{\omega}

$$

これがレンダリング方程式です.

tuto-pbr-rendering-equation.png

レンダリング方程式の反射成分を見てみると,BRDF,放射輝度,コサイン項の3つのパラメータで成り立っていることがわかります.

tuto-pbr-rendering-equation-reflection.png


拡散反射と鏡面反射のレンダリング方程式

これまでのまとめで,拡散反射と鏡面反射を考慮したレンダリング方程式を作ってみます.自己放射はしないとします.単純に拡散反射と鏡面反射を足すと次のようになります.

\begin{align}

L_{r}(x,\vec{\omega}') &= f_{d}(x,\vec{\omega}',\vec{\omega}) L_{i}(x,\vec{\omega}') (\vec{\omega}' \cdot \vec{n}) + f_{s}(x,\vec{\omega}',\vec{\omega}) L_{i}(x,\vec{\omega}') (\vec{\omega}' \cdot \vec{n}) \\
&= (f_{d}(x,\vec{\omega}',\vec{\omega}) + f_{s}(x,\vec{\omega}',\vec{\omega})) L_{i}(x,\vec{\omega}') (\vec{\omega}' \cdot \vec{n})
\end{align}

しかし,これではエネルギー保存則が満たされていません.放射照度のうち鏡面反射される量がどれくらいかは鏡面反射率 $F_{r}$ で表せられ,フレネルの方程式から求まります.また,拡散反射は屈折光によって起きますので,放射照度のうち屈折光が運ぶ光の量 $1−Fr$ が拡散反射される量になります.鏡面反射率 $F_{r}$ を使ってエネルギー保存則を満たすようにすると,次のようになります.

$$

L_{r}(x,\vec{\omega}') = (f_{d}(x,\vec{\omega}',\vec{\omega})(1-F_{r}) + f_{s}(x,\vec{\omega}',\vec{\omega}) F_{r}) L_{i}(x,\vec{\omega}') (\vec{\omega}' \cdot \vec{n})

$$

鏡面反射率を求めるのは簡単ではないので,思い切って拡散反射成分と鏡面反射成分の割合をパラメータ化します.つまり $F_{r} = k$ とし,以下のようにします.

$$

L_{r}(x,\vec{\omega}') = (f_{d}(x,\vec{\omega}',\vec{\omega})(1-k) + f_{s}(x,\vec{\omega}',\vec{\omega}) k) L_{i}(x,\vec{\omega}') (\vec{\omega}' \cdot \vec{n})

$$

この $k$ はメタルネスとかメタリックと呼ばれるパラメータです.金属か非金属かで直感的に操作することができます.また,マイクロファセット BRDF にはラフネスという物体表面の粗さを表すパラメータがあります.このメタルネスとラフネスは物理ベースレンダリングにおいて,とても重要なパラメータになっています.アンリアルエンジン4などで扱っている物理ベースのマテリアルには必ずあるパラメータです.

最終的なレンダリング方程式は次のようになります.

$$

L_{r}(x,\vec{\omega}') = \int_{\Omega}(f_{d}(x,\vec{\omega}',\vec{\omega})(1-k) + f_{s}(x,\vec{\omega}',\vec{\omega}) k) L_{i}(x,\vec{\omega}') (\vec{\omega}' \cdot \vec{n}) d\vec{\omega}

$$


最後に

光の基本から始まり,放射照度,放射輝度といった光の物理的なエネルギー,光の反射特性,BRDF,そして,レンダリング方程式と説明してきました.物理ベースレンダリングとは結局のところ,物体の表面に当たった放射エネルギー(放射照度)が,ある方向(カメラや目)に向かって反射する放射エネルギー(放射輝度)を計算するときに,相反性とエネルギー保存則を満たした BRDF の反射モデルを使っていることということになるでしょうか.ただし,この2つの物理的性質を満たしていても,物理的に正しいというわけではありません.

少しでも誰かの参考になれば幸いです.


実装編

物理ベースレンダリングを実装するための解説記事を書きました.興味があれば以下からどうぞ.

基礎からはじめる物理ベースレンダリング(実装編)



参考文献


  • Robert L. Cook, Kenneth E. Torrance「A Reflection Model for Computer Graphics」,1982

  • Bruce Walter, Stephen R. Marschner, Hongsong Li, Kenneth E. Torrance「Microfacet Models for Refraction through Rough Surfaces」,2007

  • Brian Karis「Real Shading in Unreal Engine 4」,2013

  • Wes McDermott「The Comprehensive PBR Guide by Allegorithmic - vol. 1 Light and Matter : The theory of Physically-Based Rendering and Shading」, Web: https://www.allegorithmic.com/pbr-guide

  • Wes McDermott「The Comprehensive PBR Guide by Allegorithmic - vol. 2 Light and Matter : Practical guidelines for creating PBR textures」, Web: https://www.allegorithmic.com/pbr-guide

  • Wes McDermott著,小林信行訳「総合PBRガイド by Allegorithmic - vol. 1 光と物質:物理ベースレンダリングとシェーディングの理論」, 2015,< https://www.slideshare.net/nyaakobayashi/pbr-guide-vol1jp >(2017年6月29日閲覧)

  • Wes McDermott著,小林信行訳「総合PBRガイド by Allegorithmic - vol. 2 光と物質:PBRのテクスチャを作成するための実用的なガイドライン」, 2015,< https://www.slideshare.net/nyaakobayashi/70100srgb180255 >(2017年6月29日閲覧)

  • Henrik Wann Jenson著,苗村健訳「フォトンマッピングー実写に迫るコンピュータグラフィックス」オーム社,2002

  • 倉地紀子「CG Magic:レンダリング」オーム社,2007

  • CG-ARTS協会「コンピュータグラフィックス」CG-ARTS協会,2015

  • CG-ARTS協会「ディジタル画像処理」CG-ARTS協会,2015

  • 「ニュートン別冊「光は電磁波」を実感 光とは何か?」ニュートンプレス,2007

  • Eric Lengyel著,狩野智英訳「ゲームプログラミングのための3Dグラフィックス数学」ボーンデジタル社,2006

  • 西川善司「ゲーム制作者になるための3Dグラフィックス技術」インプレスジャパン,2009

  • 向川康博「反射・散乱の計測とモデル化」『コンピュータビジョン最先端ガイド4』アドコム・メディア,2011,p.121

  • Eugene Hecht著,尾崎義治・朝倉利光訳「ヘクト 光学Ⅰー基礎と幾何光学ー」丸善出版,2010

  • CGWORLD,永田豊志「CG&映像しくみ事典」ワークスコーポレーション,2009

  • JEREMY BIRN著,株式会社Bスプラウト訳「ライティング&レンダリング」ボーンデジタル,2014

  • 山本醍田他「Computer Graphics Gems JP 2015 コンピュータグラフィックス技術の最前線」ボーンデジタル,2015

  • pnlybubbles「物理ベースレンダリング1」< http://qiita.com/pnlybubbles/items/416a3273cd245d1a1c04 >(2017年6月29日閲覧)

  • shikihuiku「物理ベースレンダリング(1)」< https://shikihuiku.wordpress.com/2012/07/03/%E7%89%A9%E7%90%86%E3%83%99%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B01/ >(2017年6月29日閲覧)

  • shocker「放射輝度 (Radiance)」< http://rayspace.xyz/CG/contents/radiance.html >(2017年6月29日閲覧)

  • Ushio「レイトレーシングにおける放射輝度って結局何なのか?」< http://qiita.com/Ushio/items/e2752fa10e093a1b4cdd >(2017年7月1日閲覧)

  • hole「物理ベースレンダラedupt解説」< http://www.slideshare.net/h013/edupt-kaisetsu-22852235 >(2017年6月29日閲覧)

  • hole「双方向パストレーシングレンダラedubpt解説」< http://www.slideshare.net/h013/edubpt-v100 >(2017年6月29日閲覧)

  • A.R Khadka「BSDF」< https://anishrkhadkablog.wordpress.com/tag/bsdf/ >(2017年6月30日閲覧)

  • 五反田義治「本当のHDR表現へ~アーティストにも知ってほしいリフレクタンスの基礎~」< http://research.tri-ace.com/Data/BasicOfReflectance.ppt >(2017年7月1日閲覧)

  • 床井浩平「ゲームグラフィックス特論 第6回陰影付け」< http://www.wakayama-u.ac.jp/~tokoi/lecture/gg/ggnote06.pdf >(2017年7月1日閲覧)

  • 床井浩平「ゲームグラフィックス特論 第9回高度な陰影付け」< http://www.wakayama-u.ac.jp/~tokoi/lecture/gg/ggnote09.pdf >(2017年7月1日閲覧)

  • 山口裕也「FINAL FANTASY 零式 HD にみる新しいHDリマスター~GPU最適化編~」

  • 堀内敏行「光技術入門」東京電機大学出版局,2014

  • Naty Hoffman「Background: Physics and Math of Shading」2013