このページは未完成です。
このページでは、Disney Principled BRDFについて紹介します。
SIGGRAPH 2012においてDisneyによりDisney principled BRDF [Burley2012]が紹介されました。シュガーラッシュ(原題:Wreck-It Ralph)を始めとする映画制作に実際に用いられており、アーティストによる直感的な制御が可能なようにパラメターが設定されています。Disneyによる資料には同BRDFのコンセプトについては記述されているものの、BRDFの全体像が示されていませんでした。同じくDisneyにより提供されているBRDF Explorer [Disney2012]というツールに同BRDFの実装があるので、そこから全体像を書き出してみます。
Disney principled BRDFは幅広い材質の表現をカバーするために、アーティストが調整可能なパラメターとして次の11種類が提供されています。
$ \baseColor $ のみが色を表すパラメターで、それ以外は全てスカラーです。
Disney principled BRDFは複数のBRDFによる複合BRDFとなっており、次に示すように主に5種類のBRDFに分けて考えることができると思います。
\begin{eqnarray*}
f_r(\vomega_i, \vomega_o) &=& \Brc{\lerp\Prt{{f_\mathrm{diffuse}(\vomega_i, \vomega_o),\; f_\mathrm{subsurface}(\vomega_i, \vomega_o),\; \subsurface}} + f_\mathrm{sheen}(\vomega_i, \vomega_o)} (1 - \metallic) + \vphantom{0} \\
&& f_\mathrm{specular}(\vomega_i, \vomega_o) + f_\mathrm{clearcoat}(\vomega_i, \vomega_o)
\end{eqnarray*}
ここで、$ \lerp $ は線形補間関数であり、1つ目と2つ目の引数の要素を3つ目の引数(基本的には $ [0, 1] $)の数値によって割合を変えて補間します。次に各要素BRDFについて示します。
\begin{eqnarray*}
f_\mathrm{diffuse}(\vomega_i, \vomega_o) &=& \frac{\baseColor}{\pi} \cdot \FTSchlick(\vomega_i, F_{\mathrm{D90}}(\theta_d)) \; \FTSchlick(\vomega_o, F_{\mathrm{D90}}(\theta_d)) \\
f_\mathrm{subsurface}(\vomega_i, \vomega_o) &=& \frac{\baseColor}{\pi} \cdot 1.25 \cdot \Brc{\FTSchlick(\vomega_i, F_{\mathrm{SS90}}(\theta_d)) \; \FTSchlick(\vomega_o, F_{\mathrm{SS90}}(\theta_d)) \Prt{\frac{1}{\cos \theta_i + \cos \theta_o} - 0.5} + 0.5} \\
f_\mathrm{sheen}(\vomega_i, \vomega_o) &=& \sheen \cdot \rho_\mathrm{sheen} \cdot (1 - \vomega \cdot \vec{h})^5 \\
f_\mathrm{specular}(\vomega_i, \vomega_o) &=& \frac{\FRSchlick(\vomega, F_{\mathrm{S0}}) \, D_{\mathrm{GGXaniso}}(\vec{h}, \alpha_\mathrm{specular, x}, \alpha_\mathrm{specular, y}) \, G_{\mathrm{GGXaniso}}(\vomega_i, \vomega_o, \alpha_\mathrm{specular, x}, \alpha_\mathrm{specular, y})}{4 \cos \theta_i \cos \theta_o} \\
f_\mathrm{clearcoat}(\vomega_i, \vomega_o) &=& 0.25 \cdot \clearcoat \cdot \frac{\FRSchlick(\vomega, 0.04) \, D_{\mathrm{Berry}}(\vec{h}, \alpha_\mathrm{clearcoat}) \, G_{\mathrm{GGX}}(\vomega_i, \vomega_o, 0.25)}{4 \cos \theta_i \cos \theta_o} \\
\end{eqnarray*}
$ \theta_d $ はハーフベクトル $ \vec{h} $ とベクトル $ \vomega_i $ もしくは $ \vomega_o $ のなす角度です。
その他の各要素の定義は以下のようになっています。
\begin{eqnarray*}
\FTSchlick(\vomega, F_{90}) &=& 1 + (F_{90} - 1) (1 - \vomega \cdot \vec{n})^5 \\
\FRSchlick(\vomega, F_{0}) &=& F_{0} + (1 - F_{0}) (1 - \vomega \cdot \vec{h})^5 \\
F_{\mathrm{D90}}(\theta_d) &=& 0.5 + 2 \cdot \roughness \cdot \cos^2 \theta_d \\
F_{\mathrm{SS90}}(\theta_d) &=& \roughness \cdot \cos^2 \theta_d \\
\rho_\mathrm{sheen} &=& \lerp(1,\; \rho_\mathrm{tint},\; \sheenTint) \\
\rho_\mathrm{specular} &=& \lerp(1,\; \rho_\mathrm{tint},\; \specularTint) \\
\rho_\mathrm{tint} &=& \frac{\baseColor}{\calcLuminance(\baseColor)} \\
F_{\mathrm{S0}} &=& \lerp(0.08 \cdot \specular \cdot \rho_\mathrm{specular},\; \baseColor,\; \metallic) \\
\alpha_\mathrm{specular, x} &=& \max(0.001, \roughness^2 \; / \; \aspectW) \\
\alpha_\mathrm{specular, y} &=& \max(0.001, \roughness^2 \cdot \aspectW) \\
\aspectW &=& \sqrt{1 - 0.9 \cdot \anisotropic} \\
\alpha_\mathrm{clearcoat} &=& \lerp(0.1,\; 0.001,\; \clearcoatGloss)
\end{eqnarray*}
$ \calcLuminance(\mathrm{color}) $ は $ \mathrm{color} $ の輝度値を求める関数です。シアンの色の単語はDisney principled BRDFのパラメターです。$ \lerp $ の1, 2個目の一方の引数いずれかが色を表していて、もう一方がスカラーの数値となっている場合、その数値は実際には全要素同じ値の色として扱います。
「Real Shading in Unreal Engine 4」(SIGGRAPH 2013) [Karis2013]より。
UE4のPBRモデルで採用されたBRDFはDisney principled BRDFのサブセットとなっており、次に示す4つのパラメターを持ちます。
BRDFの全体像は次のように2つのBRDFから構成されます。 \begin{eqnarray*} f_r(\vomega_i, \vomega_o) &=& f_\mathrm{diffuse}(\vomega_i, \vomega_o)(1 - \metallic) + f_\mathrm{specular}(\vomega_i, \vomega_o) \end{eqnarray*} 各要素BRDFは次のように表されます。 \begin{eqnarray*} f_\mathrm{diffuse}(\vomega_i, \vomega_o) &=& \frac{\baseColor}{\pi} \\ f_\mathrm{specular}(\vomega_i, \vomega_o) &=& \frac{F_r(\vomega, F_{\mathrm{S0}}) \, D_{\mathrm{GGX}}(\vec{h}, \alpha) \, G_{\mathrm{GGX}'}(\vomega_i, \vomega_o, k)}{4 \cos \theta_i \cos \theta_o} \\ \end{eqnarray*} その他の各要素の定義は以下のようになっています。 \begin{eqnarray*} F_r(\vomega, F_{0}) &=& \begin{cases} F_{0} + (1 - F_{0}) (1 - \vomega \cdot \vec{h})^5 & \mbox{Schlick} \\ F_{0} + (1 - F_{0}) 2^{(-5.55473(\vomega \cdot \vec{h}) - 6.98316)(\vomega \cdot \vec{h})} & \mbox{Spherical Gaussian} \end{cases} \\ F_{\mathrm{S0}} &=& \lerp(0.08 \cdot \specular,\; \baseColor,\; \metallic) \\ \alpha &=& \roughness^2 \\ G_{\mathrm{GGX}'}(\vomega_i, \vomega_o, k) &=& G_{\mathrm{GGX1}'}(\vomega_i, k) \; G_{\mathrm{GGX1}'}(\vomega_o, k) \\ G_{\mathrm{GGX1}'}(\vomega, k) &=& \frac{\vec{n} \cdot \vomega}{(\vec{n} \cdot \vomega)(1 - k) + k} \\ k &=& \frac{\alpha}{2} \end{eqnarray*}
「Moving Frostbite to Physically Based Rendering 3.0」(SIGGRAPH 2014) [Lagarde2014]より。
Frostbite 3.0のPBRモデルで採用されたBRDFはDisney principled BRDFのサブセットとなっており、次に示す4つのパラメターを持ちます。
BRDFの全体像は次のように2つのBRDFから構成されます。 \begin{eqnarray*} f_r(\vomega_i, \vomega_o) &=& f_\mathrm{diffuse}(\vomega_i, \vomega_o)(1 - \MetalMask) + f_\mathrm{specular}(\vomega_i, \vomega_o) \end{eqnarray*} 各要素BRDFは次のように表されます。 \begin{eqnarray*} f_\mathrm{diffuse}(\vomega_i, \vomega_o) &=& \frac{\BaseColor}{\pi} \cdot \FTSchlick(\vomega_i, F_{\mathrm{D90}}(\theta_d)) \; \FTSchlick(\vomega_o, F_{\mathrm{D90}}(\theta_d)) \cdot \lerp\Prt{1, \frac{1}{1.51}, \roughnessW} \\ f_\mathrm{specular}(\vomega_i, \vomega_o) &=& \frac{F_r(\vomega, F_{\mathrm{S0}}) \, D_{\mathrm{GGX}}(\vec{h}, \alpha) \, G_{\mathrm{GGX}''}(\vomega_i, \vomega_o, \alpha)}{4 \cos \theta_i \cos \theta_o} \\ \end{eqnarray*} その他の各要素の定義は以下のようになっています。 \begin{eqnarray*} \FTSchlick(\vomega, F_{90}) &=& 1 + (F_{90} - 1) (1 - \vomega \cdot \vec{n})^5 \\ \FRSchlick(\vomega, F_{0}) &=& F_{0} + (1 - F_{0}) (1 - \vomega \cdot \vec{h})^5 \\ F_{\mathrm{D90}}(\theta_d) &=& 0.5 \cdot \roughnessW + 2 \cdot \roughnessW \cdot \cos^2 \theta_d \\ F_{\mathrm{S0}} &=& \lerp(0.16 \cdot \Reflectance^2,\; \BaseColor,\; \MetalMask) \\ \alpha &=& {\roughnessW}^2 \\ \roughnessW &=& 1 - \Smoothness \\ G_{\mathrm{GGX}''}(\vomega_i, \vomega_o, \alpha) &=& \frac{\chi^+(\vomega_o \cdot \Vec{h}) \chi^+(\vomega_i \cdot \Vec{h})}{1 + \Lambda(\vomega_i, \alpha) + \Lambda(\vomega_o, \alpha)} \\ \Lambda(\vomega, \alpha) &=& \frac{-1 + \sqrt{1 + \alpha^2 \tan^2(\theta)}}{2} = \frac{-1 + \sqrt{1 + \frac{\alpha^2(1 - (\vomega \cdot \Vec{n})^2)}{(\vomega \cdot \Vec{n})^2}}}{2} \end{eqnarray*}
このページは未完成です。