物理ベースシェーディング

物理ベースシェーディング (Physically-based shading、PBS) とは、物理法則をベースとしたシェーディングのことであり、物理ベースレンダリング (PBR) において使われている。PBSシェーディングモデルとしては、メタルネス (金属さ) ワークフローで有名な「Disney 原則BRDF」が代表的だが、それを拡張した「Disney BSDF」もある。これらをベースとしたシェーダーは、PBRシェーダーとも呼ばれている。
物理ベースシェーディングは、写実的レンダリングだけでなく、非写実的レンダリング (NPR) にも使われている。
歴史.
2003年、三菱電機の研究拠点の一つ Mitsubishi Electric Research Laboratories (MERL) は、幅広いマテリアルの測定を行ってデータベース化したMERL BRDF Databaseを発表した。
その後、ウォルト・ディズニー・アニメーション・スタジオは、BRDF Explorerを開発し、そのツールとMERL BRDF Databaseのデータを用いて新たなシェーディングモデルの開発を行い、2012年、SIGGRAPH 2012 Courseの「Physically-Based Shading at Disney」の中で、「Disney “principled” BRDF」(Disney 原則BRDF) を発表した。
2015年、DisneyはDisney BRDFに鏡面反射BSDF (反射+透過)とより正確な表面下散乱を統合したDisney BSDFを発表した。
概要.
物理ベースレンダリングにおいては、基本的にエネルギー保存の法則を守る必要がある。PBSのシェーダーモデルは、パラメータを変更してもエネルギーが保存されるようになっている。なお、光の相反性については、透過を実装するために使われるBTDFに相反性が無いとされる。
PBS対応の3Dファイル形式.
物理ベースシェーディングのパラメーターに対応する3Dファイル形式が増えている:
旧来のシェーディングモデルとの違い.
拡散反射および鏡面反射.
マイクロファセット (微細表面) 理論導入前のシェーディングモデルは、経験則に頼っていた。特にGPUによる固定パイプラインにおいて、拡散反射は完全拡散反射を前提とするランバート反射モデルのみであり、鏡面反射は経験則ののみであった。
マイクロファセット理論導入後、シェーディングモデルは「表面の粗さに対応する拡散反射モデル」 (オーレン・ネイヤー反射モデル等) と「表面の粗さに対応する鏡面反射モデル」 (Cook-Torranceモデル (Beckmann分布関数ベース)、Walterモデル (GGX分布関数ベース)等) の合成となった。しかし、拡散反射のオーレン・ネイヤー反射モデルがフレネル反射に未対応であったり、拡散反射のオーレン・ネイヤー反射モデルと鏡面反射の反射モデルでラフネス相当のパラメータの範囲が異なっていたりなど、問題が多かった。
2012年、「Disney 原則BRDF」が登場し、独自の拡散反射モデル (Disney diffuse BRDF)と、GTR分布関数 (GGX分布関数を拡張したもの) ベースの鏡面反射モデルの合成により、両反射モデルのラフネスパラメータが統合された。また、メタルネス (金属さ) が導入され、光の透過や表面下散乱 (含拡散反射) のほぼ起きない「導体 (金属) 」と、金属光沢 (鏡面反射色のある強い鏡面反射) の起きない「誘電体 (非金属)」が別扱いされるようになった。また、影響の大きな色である導体の鏡面反射色および誘電体の拡散反射色が基本色 (ベースカラー)として同一に扱われるようになった。
2014年、マイクロファセット理論におけるフレネル反射の計算に、屈折率1.2〜2.2を近似した従来のに代わって、正確なGulbrandsenのが登場したものの、Gulbrandsenのフレネル方程式はRGBレンダリングにおいて近似となり、Schlickの近似式よりも正確では無いものとなっていた。2019年、LucusFilm の Naty Hoffman によってそれらよりも正確な F82パラメータ（82度における反射率）の導入が提案されたものの、F82パラメータはエネルギーの保存に問題が存在した。2021年、「Adobe Standard Material」が登場し、そこにはその改良版である F82-tint（82度における色合い）が導入された。
2015年、「Disney 原則BSDF」が登場し、鏡面反射における多重散乱効果を手動で補正するためのSheenコンポーネントが導入された。2016年、従来の単一散乱のみの鏡面反射モデルに代わって、多重散乱をシミュレーションする鏡面反射モデルの Multiscatter GGX が登場したものの、この手法は計算の正確な代わりに速度の遅いものとなっていた。その後、Multiscatter GGX を近似やルックアップテーブルなどによって高速化したモデルが多数登場していく。2017年には相反性を維持したまま高速化する Kulla and Conty の手法が登場し、2019年には相反性が崩れるもののサンプリングを最適化した Emmanuel の手法が登場する。またリアルタイムで多重散乱を再現するための手法も多数登場した。
なお、拡散反射は表面下散乱の近似だとされているが、表面下散乱の距離が0に近い場合、一般的な拡散反射モデルに使われている完全拡散反射 (ランバート反射) とはならず、Chandrasekhar BRDFとなる。
表面下散乱.
表面下散乱では1993年、BRDFを表面下散乱へと近似したHanrahan-Krueger BRDFが登場した。
2001年、医療物理学向けの手法の応用により、双極子 (Dipole) モデルを用いたBSSRDFベースのレンダリング手法が確立されたものの、多重散乱部分は近似となっていた。
2015年、拡散モデル向けに単一散乱および多重散乱の両方を同時に近似したChristensen-Burley拡散プロファイルが登場し、この拡散プロファイルは同年のDisney BSDFでも採用された。
しかし、拡散モデルは平らな表面を前提としているために曲率の高い表面でアーティファクトが多く、Disney BSDFでは正確でアーティファクトの少ないPath-traced subsurface scattering (ランダムウォーク方式) も検討された。2014年には原子力学で使われていたゼロ分散なDwivediサンプリングをランダムウォーク方式の表面下散乱に使うことが提案されており、2016年にはその改良版が登場し、多くのレンダラーがランダムウォーク方式に対応していった。
2017年、Disney子会社のPixarはPath-traced subsurface scatteringの新たなモデルを公開した。このPixarの論文では異方性に加えてランベルト・ベールの法則よりも正確な非指数関数モデルが導入された。
リアルタイム表面下散乱.
リアルタイムにおける表面下散乱の表現では当初、擬似的なHalf-Lambertシェーダーが使われていた。その後、Wrapped Diffuseシェーダーにルックアップテーブルでカラーシフトを加える手法、深度マップを用いた吸収の近似、テクスチャ空間でのガウシアンぼかしによる拡散の近似が登場した。
2009年、テクスチャ空間の代わりにスクリーン空間でぼかし処理を行うScreen Space Subsurface Scattering (SSSSS)が登場した。2012年にはスクリーン空間でのぼかし処理を2つの畳み込みまで減らして高速化したSeparable Subsurface Scattering (SSSS)が登場した。Disney BSDF登場後は、ガウシアン拡散プロファイルの代わりにChristensen-Burley拡散プロファイルが使われるようにもなった。
また、表面下散乱の透過のために、焼き付けたThicknessマップも使われるようになった。
透過・半透明.
レイトレーシング導入前の透過には、2次元的なアルファブレンドが用いられていた。
レイトレーシング導入後、屈折の再現が可能となった。また、ランベルト・ベールの法則に基づく指数関数的減衰の再現により、半透明における、より正しい体積吸収 (ボリュームアブソープション) の再現が可能となった (なお、ランベルト・ベールの法則は関与媒体が無相関の場合のみ正確となる)。
また、位相関数を用いたボリュームレンダリングも行われるようになった (#ボリューム (体積)も参照)。
薄いサーフィスにおいては、「表面下散乱による拡散透過」が導入されたほか、屈折にもマイクロファセット理論が導入され、粗い (ラフネスの高い) 表面により拡散された拡散透過および鏡面透過の再現が可能となった。
電磁スペクトル.
3DCGのレンダリングでは昔より可視光の電磁スペクトルを考慮した物理的なスペクトラルレンダリングが考案され一部のレンダラーに実装されていたものの、多数の固定波長でのスペクトラルレンダリングでは速度の問題が存在し、また単一波長でのモンテカルロレイトレーシングによるスペクトラルレンダリングでは色ノイズの問題が存在しており、一般的なレンダリングの主流は長らく非物理的な光の三原色（RGB、赤-緑-青）を使ったRGBレンダリングに留まっていた。しかしながらRGBレンダリングには反射を繰り返すごとに色がズレていく、（メタメリズム）の再現が出来ない、光の分散や干渉や蛍光（増白も含む）が近似計算になるなどの問題が存在していた。
2014年に代表波長スペクトラルサンプリング (Hero Wavelength Spectral Sampling) が登場すると、四波長や八波長での処理でよりノイズの少ないスペクトラルレンダリングが可能となった。
アップサンプリング.
スペクトラルレンダリングでRGB値指定のマテリアルや光源を扱うためにはスペクトルの再構築（通称アップサンプリング）が必要となる。
アップサンプリングの手法は古くより存在していたものの、1935年のMacAdam法はスペクトル形状を箱型として扱っており非常に荒いものとなっていた。滑らかなアップサンプリング法としては1989年にGlassnerによって平滑化関数の線形結合を使用する手法が登場したものの、実際の物質の反射率曲線は滑らかではないという問題が存在しており、1990年にはvan Trigtによって最小勾配二乗法を使用する手法が登場した。しかしながら、これらにはどちらも負の反射率が算出されうるという問題が存在していた。
その後、1999年にSmitsによってスペクトルを10個の箱型にした実用的なアップサンプリング法が登場し広く使われることとなった。しかしながら、この手法は狭色域のsRGB色空間でしか正しく動作しないという問題を抱えていた。この問題を解決する手法はいくつか提案されているものの、2021年現在もプロダクションレンダラーのManukaではこの手法の変種が使われており、そこでは広色域もsRGB色空間へと変換された後でアップサンプリングされている。
また各スペクトルの反射率は光が増幅しないよう 1.0 を超えることが出来ないが、それによって指定されたRGB色の彩度が高い場合に明るさを再現できないケースが存在し、2019年にはその問題を解決するために蛍光を考慮した蛍光アップサンプリング法が登場した。
Disney 原則BRDF.
「Disney 原則BRDF」には、ベースカラー (アルベド)、メタルネス (金属度)、ラフネス (粗さ)、スペキュラレベル (鏡面反射量) だけでなく、表面下 (サブサーフィス)や異方性 (アニソトロピック)ややクリア塗装 (クリアコート)も含まれている。しかし、物理ベースシェーディングの実装によっては、それらの幾つかが省略されているものもある。
元資料のパラメータ.
ディズニーの元資料の「Disney 原則BRDF」にあるパラメータは以下となっている。
RenderMan拡張のパラメータ.
ディズニー子会社のピクサーがRenderManのPxrDisneyシェーダーで実装していた拡張パラメータには以下がある。
Disney BSDF拡張のパラメータ.
Disney BSDFは基本的にDisney BRDFに透過 (拡散透過およびスペキュラ透過) とボリュームを足したものとなっている。Disney BSDFでは屈折率をスペキュラレベルではなくIORで直接指定する。
ディズニーのDisney BSDFの資料にある拡張パラメータには以下がある。なお、フラットネス (平坦さ)については、上記のサブサーフィスの項を参照。
Pixarパストレース表面下散乱拡張のパラメータ.
Disney子会社のPixarはパストレース表面下散乱に以下のパラメータを導入した。
Enterprise PBR拡張のパラメータ.
Dassault SystèmesのEnterprise PBRは、glTF形式の次世代PBRマテリアルの元になる予定となっている 。Enterprise PBRではスペキュラレベルと屈折率 (IOR)の両方のパラメータに対応している。またEnterprise PBRでは表面下散乱と体積吸収をまとめて扱っており、表面下散乱と体積吸収の比率はサブサーフィスカラーにより指定する。
Enterprise PBRで拡張されたパラメータには以下がある。
Autodesk Standard Surface拡張のパラメータ.
Autodesk Standard SurfaceシェーダーのパラメータはFBX形式に新たに導入されている。これらパラメータはArnold 5以降に実装されているStandard Surfaceシェーダーが基となっている。このシェーダーモデルでは単純なクリアコートの代わりに汎用なコートが導入されている。
Adobe Standard Material拡張のパラメータ.
Adobe Standard Material は Substance 3D Stager などで使われている。
スキン (肌).
スキンシェーダーとは、肌の皮脂膜、表皮 、真皮 、皮下組織の各層の反射・散乱に対応するシェーダーのことである。
表皮は角質層と「生きている表皮」に分けることができる。表皮の光の吸収率はメラノソームによって合成された各種メラニン（ユーメラニン及びフェオメラニン）の濃度によって主に決定される。食べて吸収したカロテノイド（β-カロテンなど）も表皮で光で吸収を行うが、外観への影響は少ないとされる。
真皮は真皮乳頭層と真皮網状層に分けることができる。真皮の光の吸収率は酸化および脱酸化されたヘモグロビンの濃度によって主に決定される。また真皮のエラスチン（弾性線維）と親和性の高いビリルビンも真皮の色に影響を与えうる（黄疸）ほか、カロテノイドや水も少量の影響を与えるとされる。
かつては一部のレンダラーが標準でこれらの層に対応していたものの、その後、汎用の方式に置き換えられていっていった。
層化 (レイヤー).
層化 (レイヤー) はベースマテリアルに薄膜マテリアルなどを足す時に使われる。層化には、非物理的ではあるものの、層同士の線形合成 (lerp) が用いられてきた。その後、より物理的な層化モデルも登場したが、計算が複雑であるため、あまり用いられていない。
ヘア・ファー (髪・毛).
ヘアシェーダーの鏡面反射では、1989年に登場したKajiya-Kayモデルで異方性反射が導入され、2003年に登場したMarschner反射モデルで縦方向と方位角の反射が分離され、その後、2011年のd'Eon et al.の論文でMarschner反射モデルが改良されて「エネルギー保存の法則」を満たすようになった。
ヘアシェーダーの拡散反射では、Marschnerベースの反射モデルに近接場の問題があり、1989年に登場したKajiya-Kayモデルの拡散反射が長らく使われていた。2007年に近接場散乱モデルのZinkeモデルが登場した。
2016年、Walt Disney Animation Studiosは、鏡面反射のd'Eonモデルと拡散反射のZinkeモデルをベースに改良したChiang et al.の論文を公表した。
また、ファー向けのシェーダーモデルも開発された。動物の毛は人毛と異なりメデュラ（毛髄質)が目立つため、それを考慮したYan et al.の論文が2015年に登場し、2017年にはそれを高速化するためのファーモデルが登場した。
しかしながらMarschner反射モデル以降に存在する縦方向と方位角の反射の分離は物理的ではなく、2022年にはそれらを統合して扱うMicrofacet Hairモデルが登場した。
パラメータ.
物理ベースより前のMarschner鏡面反射モデルでは、一次鏡面反射 (Primary Specular; R (反射))、二次鏡面反射 (Secondary Specular; TRT (透過-反射-透過))、透過鏡面反射 (Transmit Specular; TT (透過-透過))のそれぞれに反射色や鏡面反射の角度シフトを指定していた。また、これらとは別に拡散反射色を指定することもあった。
物理ベースの後は反射パスを分けずに、髪色および角度シフトの指定を単一で行うようになった。また、髪色は基本色だけでなくメラニン色素ベースの指定も可能となった。d’Eon et al. (2014)の論文では、メラニン色素とRGB吸収係数との関係に以下を提示している (定数はそれぞれの吸収断面積を表す):
 RGB吸収係数 = ユーメラニン濃度 * [0.419, 0.697, 1.37] + フェオメラニン濃度 * [0.187, 0.4, 1.05]
ボリューム (体積).
ボリュームシェーダーでは簡易的なHenyey-Greenstein位相関数が長らく用いられてきた。1993年、Henyey-Greenstein位相関数を単純化したSchlick位相関数が登場した。Henyey-Greenstein位相関数とSchlick位相関数ではパラメータが異なるため、パラメータの変換が必要となる。
また、1987年のNishita, et al.の論文において、極小粒子向けのレイリー散乱理論に基づくRayleigh位相関数、小さな粒子向けのミー・ローレンツ理論 (ミー散乱) の近似であるMie-Hazy位相関数及びMie-Murky位相関数が示された。これら位相関数は計算の容易な位相関数のフィッティング先に使われており、例えばmental rayではこれらの位相関数に相当するパラメータ値を提示していた。
その後、雲の散乱において雨滴粒径分布 (DSD) 毎のミー・ローレンツ位相関数の事前計算が行われるようになったものの、ミー・ローレンツ位相関数にはサンプリングが難しいという問題があり、ミー・ローレンツ位相関数の回折ピークを切り落とすという手法が登場した。
スカイ (空).
当初、輝度のみの解析的なスカイモデルとして、1993年にPerezスカイモデルが登場し、1994年にそれを少し変更したCIEスカイモデルが登場した。しかし、これらのモデルはパラメータが多く使い難い上、輝度のみにしか対応していないため色が無く、レンダリングには適さないものであった。
一方、色のあるものとしてはシミュレーションベースのスカイモデルが登場した。1993年には大気の散乱をベースとするNishitaスカイモデル (1993年版) が登場したものの単一散乱のみの考慮となっており、1996年には大気の多重散乱を考慮するNishitaスカイモデル (1996年版) が登場した。2005年にはHaberらによって大気の異方性散乱、湿度や温度による大気の屈折率、オゾン層の吸収が導入され、その後も関与粒子の分布を考慮した晴天モデルのKutz (2012)や、季節や地理を考慮したモデルのGuimera, Gutierrez and Jarabo (2018)などが登場したものの高度なスカイモデルは速度が遅く、シミュレーションベースのスカイモデルでは高速なNishitaスカイモデルが多くのソフトウェアで採用されていった。
また解析的なスカイモデルでも、1999年に色へと対応するPreethamスカイモデルが登場し、レンダリングに広く使われるようになった。このPreethamスカイモデルは、Perezの解析的なスカイモデルをベースに、Nishitaのシミュレーション的なスカイモデルの生成結果を当て嵌めた上でパラメータを単純化したものであり、色に対応しながらもシンプルであるため広く使われたものの、夕焼けや濃い濁度に弱く、2012年にはそれらを改善して地表面アルベドにも対応させたHosek-Wilkieスカイモデルが登場した。しかしながら既存の解析的なスカイモデルは水平線より上の太陽しか考慮されていないものとなっており、2021年には水平線より下の太陽などにも対応したPRG Clearスカイモデルが登場した。
ゲーム向けでは事前計算によって正確性と速度を向上させたルックアップテーブル (LUT) ベースのスカイモデルも登場した。2005年にはGPU Gems 2においてNishitaスカイモデル (1993年版)をベースとしたGPUによるリアルタイム大気散乱が登場したものの単一散乱のみとなっており、2008年にはBrunetonとNeyretによって多重散乱や地表面アルベドに対応する4D LUTベースのPrecomputed Atmospheric Scatteringが登場したものの高い計算量となっていた。2009年、惑星の影を無視することによって3D LUTに収めたElekモデルが登場したものの水平線でのアーティファクトの問題があり、2013年にはその問題を軽減したYusovモデルが登場したものの、大気の濃い場合にはまだ問題が残っていた。またこれらは他の既存技術と組み合わせてもソフトなボリュームシャドウに未対応という問題も抱えていた。その後、2020年にはこれらの問題を解決するUnreal Engineスカイモデルの技術が「A Scalable and Production Ready Sky and Atmosphere Rendering Technique」として公開された。
スカイモデルにおけるパラメータ.
実装によりスカイモデルの正確さやパラメータが異なる。