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

物理ベースシェーディング (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ファイル形式が増えている:
 glTF 2.0形式
 FBX形式
 Stingray PBSシェーダー方式 - Stingrayゲームエンジンで使われていたシェーダーのパラメータ
 Autodesk Standard Surfaceシェーダー方式 - Arnold 5以降で使われているStandard Surfaceシェーダーのパラメータ。Maya 2020.3以降対応。
 Wavefront OBJ+MTL形式のPBR拡張

旧来のシェーディングモデルとの違い

拡散反射および鏡面反射 
マイクロファセット (微細表面) 理論導入前のシェーディングモデルは、経験則に頼っていた。特に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となる。

異方性反射 
1992年、経験則に基づく高速な異方性鏡面反射に対応するWard BRDFが登場するも、グレージング角でのエネルギーの保存に問題があったほか、バイアス無しのサンプリングも不可能となっていた。1997年にはPhongローブを用いてエネルギーを保存しながら異方性反射を行うLafortuneモデルが登場するも、フィッティング向けでありアーティスト向けではないという問題が存在した。

2000年、これらの問題を解決するためのAshikhmin-Shirleyモデルが登場するも、シャドウイング項に不連続性が存在した。2007年、その不連続性の問題を解決するAshikhmin-Premozeモデルが登場した。

2010年、Kurtらによって前述のBeckmann分布関数に異方性が導入され、2012年、「Disney 原則BRDF」で前述のGTR分布関数に異方性が導入された。

クロス (Sheen) 
1992年、Westinらはモンテカルロ法を用いてマイクロスケールジオメトリの散乱から球面調和関数 (SH) ベースのBRDFへとフィッティングする手法を開発し、その手法をベルベットや織物へと導入した。

2000年、Ashikhminらはガウス分布ベースのマイクロファセットBRDFモデルの生成手法を開発し、その手法をベルベットやサテンへと導入した。

2012年、「Disney 原則BRDF」で布地向けとして追加のSchlick Fresnelローブによるsheenパラメータが導入されるも、前方散乱のみであり後方散乱の欠いたものとなっていた。

2017年、ソニー・ピクチャーズ・イメージワークスは乗正弦波を用いて後方散乱に対応するCharlie sheenモデルを開発するも、逆に前方散乱はほとんど無いものとなっていた。

2022年、Disneyらはそれらの問題を解決するLTCベースのsheenモデルを開発した。

表面下散乱 

表面下散乱では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のレンダリングでは昔より可視光の電磁スペクトルを考慮した物理的なスペクトラルレンダリングが考案されMaxwell Renderなどの一部のレンダラーに実装されていたものの、多数の固定波長によるスペクトラルレンダリングでは速度の問題が存在する一方、各単一波長でのモンテカルロレイトレーシングによるスペクトラルレンダリングでは色ノイズの問題が存在しており、一般的なレンダリングの主流は長らく非物理的な光の三原色（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」はBRDF（反射）のみとなっていたが、「Disney 原則BSDF」でBTDF（透過）が加わってBSDFとなり、また各種拡張でEDF（放射）やVDF（ボリューム）も追加されていった。

「Disney 原則BRDF」には、ベースカラー (アルベド)、メタルネス (金属度)、ラフネス (粗さ)、スペキュラレベル (鏡面反射量) だけでなく、表面下 (サブサーフィス)や異方性 (アニソトロピック)ややクリア塗装 (クリアコート)も含まれている。しかし、物理ベースシェーディングの実装によっては、それらの幾つかが省略されているものもある。

Disney 原則BRDFのパラメータ 
ディズニーの「Disney 原則BRDF」にあるパラメータは以下となっている。

 メタルネス (金属さ、金属度、メタリック)
 メタルネスパラメータは誘電体 (非金属)か導体 (金属)かを指定する。中間を指定すると、誘電体と導体がブレンド (ミックス)される。
 誘電体では、光が入射すると正反射光と屈折光に分かれ、屈折光が表面下で散乱・吸収され散乱光 (拡散反射光を含む) となったり、透過・吸収されて透過光となる。導体では、光が入射すると一部の光が屈折して吸収され、それ以外の光が正反射される。
 ベースカラー (アルベド)
 ベースカラーパラメータは、誘電体の拡散反射色および導体の正反射色を指定する。
 ラフネス (粗さ、粗度)
 ラフネスパラメータは、微細表面 (マイクロファセット) 理論に基づくマイクロスケールでの表面の粗さを指定する (なお、メソスケールの粗さについては法線マップで再現する必要がある)。
 ラフネスが高いほど、正反射光、屈折光および散乱光が表面で拡散することとなる。なお、誘電体か導体かに関わらず全てのマテリアルはフレネル反射を持つが、ラフネスが高くなるほどフレネル反射は小さくなる。
 一部のPBS実装では、ラフネス (粗さ)の代わりにグロシネス (光沢度、滑らかさ)で実装されている (GGX/GTR鏡面反射モデルにおいては、ラフネス = 1.0 - グロシネス)。
 スペキュラレベル (鏡面反射量、単にスペキュラとも書かれる)
 スペキュラレベルパラメータは、誘電体の鏡面反射率を0.08 (8%) で割って指定する。スペキュラレベルは屈折率 (IOR) から算出することもできる: (((ior-1)/(ior+1))**2)/0.08 。
 スペキュラレベルの標準値は0.5 (= IOR 1.5) となっている。glTF形式ではKHR_materials_specular拡張で対応しているものの、標準値は1.0となっている。
 スペキュラティント (鏡面反射の色味)
 スペキュラティントパラメータは、誘電体の正反射色をどれだけベースカラーに近づけるかを指定する (なお、導体の正反射色はベースカラーと同等)。なお、スペキュラティントは、フルネル反射の反射色に影響を及ぼさない。
 glTF形式のKHR_materials_specular拡張では色味ではなくスペキュラカラー (鏡面反射色) となっている。
 サブサーフィス (表面下)
 サブサーフィスパラメータは、誘電体において、表面下で散乱された散乱光が拡散反射形に近いか表面下散乱形に近いかを指定する。
 「Disney 原則BRDF」において表面下散乱は、Hanrahan-Krueger BSDFにインスパイアされた薄い散乱層向けの近似モデルを採用している。一方、Disney BSDFでは、従来の薄い散乱層向けの表面下散乱は、サブサーフィスパラメータからThinサーフィスBSDFのフラットネス (平坦さ) パラメータへと変更され、SolidサーフィスBSDFのサブサーフィスには、より正確な表面下散乱として、独自の拡散プロファイルによる近似 (Christensen-Burley方式)、もしくは曲率の高いサーフィスでも問題の無いPath-traced subsurface scattering (ランダムウォーク方式) が導入された。
 フラットネスパラメータには、LightWave、MODOなどが対応している。ランダムウォーク方式の表面下散乱には、ArnoldやBlender 2.80以降などが対応している。
 アニソトロピック (異方性)
 アニソトロピックパラメータは正反射の異方性の度合いを指定する。正反射の異方性は繊維や溝などの平行的な構造より生じるため、ブラッシングされた金属、布地、髪などのマテリアルで使用される。
 glTF形式では標準で対応しておらず、KHR_materials_anisotropy拡張への対応が必要となる。
 Sheen (ツヤ)
 シーンパラメータは、誘電体において、ラフネスパラメータで再現しきれない追加のフレネル反射の反射率を指定する。このパラメータと下のシーンティントパラメータは透過性繊維が含まれている布地などに必要となる。glTF形式では標準で対応しておらず、KHR_materials_sheen拡張への対応が必要となる。
 SheenTint (ツヤ色味)
 シーンティントパラメータは、誘電体において、追加のフレネル反射をどれだけベースカラーに近づけるかを指定する。
 クリアコート (クリア塗装)
 クリアコートパラメータは、レイヤー合成されるクリア塗装マテリアルの合成強度を、0.25で割って指定する。なお、「Disney 原則BRDF」では屈折率 1.5のポリウレタンによるクリア塗装を前提としている。glTF形式では標準で対応しておらず、KHR_materials_clearcoat拡張への対応が必要となる。また「Disney 原則BRDF」ではクリアコートにGTR分布関数を用いていたものの、2023年現在はクリアコートにGGX分布関数を使うのが一般的となっている。
 クリアコートグロス (クリア塗装の滑らかさ、クリア塗装の光沢度)
 クリアコートグロスパラメータは、クリアコートの滑らかさを指定する。
 glTF形式のKHR_materials_clearcoat拡張など一部のPBS実装ではクリアコートグロスの代わりにクリアコートラフネス (クリア塗装の粗さ) で実装されている (クリアコートラフネス = 1.0 - クリアコートグロス)。

RenderMan拡張のパラメータ 
ディズニー子会社のピクサーがRenderManのPxrDisneyシェーダーで実装していた拡張パラメータには以下がある。

 サブサーフィスカラー (表面下の色) 
 サブサーフィスカラーパラメータは、誘電体の表面下散乱に用いられる表面下の色を指定する。
 RenderMan、Blender、Houdini、Arnold、LightWaveなどが対応している。
 エミットカラー (放射色、エミッションカラー、ルミナスカラー、発光色) 
 エミットカラーパラメータは、発光における放射色を指定する。
 RenderMan、Arnold、Houdini、LightWaveなどが対応している。

Disney BSDFの追加パラメータ 
Disney BSDFは基本的にDisney BRDFに透過 (拡散透過およびスペキュラ透過) とボリュームを足したものとなっている。Disney BSDFでは屈折率をスペキュラレベルではなくIORで直接指定する。Disney BSDFには中身が詰まったソリッドサーフィスBSDFと薄肉のThinサーフィスBSDFがあり、それぞれパラメータが一部異なっている。

ディズニーのDisney BSDFの資料にある拡張パラメータには以下がある。なお、ThinサーフィスBSDFのフラットネス (平坦さ)については、上記のサブサーフィスの項を参照。

 スキャッターディスタンス (散乱距離、サブサーフィスラジアス、表面下の半径、サブサーフィスディスタンス、表面下の距離)
 ソリッドサーフィスBSDF向け。スキャッターディスタンスパラメータは、誘電体の表面下散乱において、それぞれの色の光線毎の表面下における平均距離を指定する。
 Disney BSDF由来であり、Blender、Houdini、Arnold、LightWaveなどが対応している。
 トランスミッタンスカラー (トランスミッションカラー、透過色)
 トランスミッタンスカラーは、誘電体の体積吸収 (ボリュームアブソープション) において、吸収された光の色合いを指定する。
 Disney BSDF由来であり、Houdini、Arnold、LightWaveなどが対応している。
 アットディスタンス (トランスミッタンスディスタンス、トランスミッションデプス、透過距離)
 アットディスタンスパラメータは、誘電体の体積吸収 (ボリュームアブソープション) において、吸収された光が透過色に達するまでの距離を指定する。
 Disney BSDF由来であり、Houdini、Arnold、LightWaveなどが対応している。
 specTrans (スペキュラ透過、トランスパレンシー、透明度、トランスミッションファクター、透過率)
 specTransパラメータは誘電体においてスペキュラ透過 (屈折) のミックス割合を指定する。glTF形式ではKHR_materials_transmission拡張によって対応している (ベンダー拡張ADOBE_materials_thin_transparencyの後継)。
 diffTrans (拡散透過、Translucency、半透明度)
 ThinサーフィスBSDF向け。diffTransパラメータは誘電体の薄いサーフィスにおいて、散乱による拡散反射と拡散透過の割合を0～2で指定する。
 Enterprise PBR拡張 (後述) では値の範囲が0〜1となっている。
 Index of Refraction (ior、屈折率)
 表面の屈折率を直接指定する。
 Enterprise PBR拡張 (後述) 及びglTF形式のKHR_materials_transmission拡張及びKHR_materials_ior拡張では標準値がポリウレタンの屈折率と同等の1.5となっている。glTF形式のベンダー拡張ADOBE_materials_thin_transparencyでは標準値が水の屈折率と同等の1.33となっていた。

Pixarパストレース表面下散乱拡張のパラメータ 
Disney子会社のPixarはパストレース表面下散乱に以下のパラメータを導入した。
 サブサーフィスアニソトロピー (表面下異方性、ディレクショナリティー、方向性)
 表面下散乱の異方性を指定する。異方性は特にバックライトのシーンの薄い部位で違いが大きくなる。リアルな肌の表現には約0.8を指定する。
 Arnold、RenderMan、Blender 3.0以降のCyclesなどが対応している。
 ブリード (滲み)
 非指数関数モデルの表面下散乱における光滲みを指定する。RenderManなどが対応している。

Enterprise PBRの追加パラメータ 

Dassault SystèmesのEnterprise PBRは、glTF形式の次世代PBRマテリアルの元になる予定となっている 。Enterprise PBRではスペキュラレベルと屈折率 (IOR)の両方のパラメータに対応している。またEnterprise PBRでは表面下散乱と体積吸収をまとめて扱っており、表面下散乱と体積吸収の比率はサブサーフィスカラーにより指定する。

Enterprise PBRで拡張されたパラメータには以下がある。
 Sheenカラー (ツヤ色)
 Sheenラフネス (ツヤの粗さ)
 フレークカバレッジ (フレーク範囲)
 フレークがどれだけ覆うのかを指定する。
 フレークカラー (フレーク色)
 フレークの色。
 フレークラフネス (フレークの粗さ)
 フレークの向きの分布の粗さを指定する。
 フレークサイズ (フレークの大きさ)
 フレークの直径をミリメートル (mm)で指定する。
 フリップフロップエフェクト (フリップフロップ効果)
 フレークのフリップフロップ効果を有効にするかどうかを0か1で指定する。
 フリップフロップカラー (フリップフロップ色)
 フレークのフリップフロップ効果が有効な場合の第二フレークカラー。
 クリアコートノーマル（クリアコート法線）
 クリアコートの法線を指定する。
 エミッションバリュー (放射量)
 エミッションバリューパラメータは、発光における放射量をlm/m2 (単位面積当たりの放射量)又はlm (全面積での放射量)で指定する。
 エミッションモード (放射モード) 
 発光における放出量が単位面積当たり（lm/m2）か全面積（lm）かを指定する。
 エネルギーノーマライゼーション (エネルギー正規化)
 エネルギーノーマライゼーションパラメータは、発光における放射色の正規化を行うかを二値で指定する。
 Thin Walled (薄肉)
 Thin Walledパラメータはマテリアルが薄肉かどうかを二値で指定する。マテリアルが薄肉でない場合、表面下散乱が有効となる。glTF形式のKHR_materials_volume拡張ではthicknessFactor (厚み因数) が0の時にThin Walledとなる。
 アテニュエーションカラー (減衰色)
 誘電体の体積吸収および表面下散乱において吸収・散乱された光の色合いを指定する。glTF形式ではKHR_materials_volumeで対応している。
 アテニュエーションディスタンス (減衰距離)
 誘電体の体積吸収および表面下散乱における吸収・散乱された光が減衰色に達するまでの距離。glTF形式ではKHR_materials_volumeで対応している。
 ディスプレイスメント (変位)
 ディスパージョン (分散、トランスミッションディスパージョン、透過分散)
 光の屈折で生じる分散に関するパラメータをアッベ数で指定する。Arnoldが対応している。HoudiniやOctaneも分散に対応しているが、これらはアッベ数の代わりに分散係数で指定を行う。

Autodesk Standard Surfaceの追加パラメータ 

Autodesk Standard SurfaceシェーダーのパラメータはFBX形式に新たに導入されている。これらパラメータはArnold 5以降に実装されているStandard Surfaceシェーダーが基となっている。このシェーダーモデルでは単純なクリアコートの代わりに汎用なコートが導入されている。
 コートカラー（コート色）
 コートの色を指定する。
 コートアニソトロピー（コート異方性）
 コートの異方性を指定する。
 コートローテーション（コート回転）
 コートの異方性の回転を指定する。
 コートIOR（コート屈折率）
 コートの屈折率を指定する。
 コートアフェクトカラー（コート影響色）
 コートアフェクトラフネス（コート影響粗さ）
 オパシティ (不透明度、カットアウトオパシティ)
 オパシティは表面の不透明度を指定する。細かな穴のある布などを表現する時などに使われる。物理的に正しい不透明度を実装した実装系も存在する。
 Thin Film Thickness (薄膜の厚み)
 表面上の薄膜の厚みをナノメートルで指定する。薄膜は分散した屈折光の内部反射により玉虫色 (イリデスンス) となる (薄膜干渉/薄膜光学)。薄膜の厚みへと対応するものには、ArnoldやRenderManがある。
 glTF形式ではKHR_materials_iridescence拡張のiridescenceThicknessMaximumで対応している（テクスチャを使う場合はiridescenceThicknessMinimumの指定も必要となる）。

Adobe Standard Materialの追加パラメータ 
Adobe Standard Material は Substance 3D Stager などで使われている。
 Sheenオパシティ (ツヤ不透明度)
 Sheenの不透明度を指定する。
 スキャッタリングディスタンススケール（散乱距離スケール）
 表面下散乱の散乱距離の各色のスケーリングを指定する。
 レッドシフト（赤方偏移）
 表面下散乱の赤方偏移の度合いを指定する。肌に向くとされる。
 レイリースキャッタリング（レイリー散乱）
 表面下散乱のレイリー散乱の度合いを指定する。ミルク、石、空気などに向くとされる。
 コートオパシティ (コート不透明度)
 コートの不透明度を指定する。
 コートスペキュラレベル（コート鏡面反射量）
 コートの鏡面反射量を指定する。
 コートノーマルスケール（コート法線スケール）
 コートの法線の強さを指定する。

OpenPBR拡張のパラメータ 

MaterialXのサブプロジェクトであり、Adobe Standard Material と Autodesk Standard Surface を組み合わせたものとなる予定。

対応ソフトウェア

オフスクリーンレンダラー 
 RenderManのPxrDisneyシェーダー (なお、Uberシェーダーは既にPxrSurfaceシェーダーに移行済み)
 Blender 2.79以降のCyclesのPrincipled Node (透過はDisney BSDFと非互換の形で実装)
 MODO 11.2以降のPrincipledシェーダー
 3ds Max 2018及びMaya 2018以降に搭載のArnold 5以降のStandard Surface (「Disney 原則BRDF」のスーパーセット)
 Houdini 16以降のMantraのPrincipled Shader VOPノード/Principled Shader SHOPノード (「Disney 原則BRDF」のスーパーセット)
 LightWave 2018以降のPrincipled BSDF
 appleseedのDisney BRDF

リアルタイムレンダラー 
 Blender 2.8以降のEeveeのPrincipled Node (一部未実装)
 Godot 3.0以降

スキン (肌) 
スキンシェーダーとは、肌の皮脂膜、表皮 、真皮 、皮下組織の各層の反射・散乱に対応するシェーダーのことである。

表皮は角質層と「生きている表皮」に分けることができる。表皮の光の吸収率はメラノソームによって合成された各種メラニン（ユーメラニン及びフェオメラニン）の濃度によって主に決定される。食べて吸収したカロテノイド（β-カロテンなど）も表皮で光で吸収を行うが、外観への影響は少ないとされる。

真皮は真皮乳頭層と真皮網状層に分けることができる。真皮の光の吸収率は酸化および脱酸化されたヘモグロビンの濃度によって主に決定される。また真皮のエラスチン（弾性線維）と親和性の高いビリルビンも真皮の色に影響を与えうる（黄疸）ほか、カロテノイドや水も少量の影響を与えるとされる。

かつては一部のレンダラーが標準でこれらの層に対応していたものの、その後、汎用の方式に置き換えられていっていった。

スキンシェーダーの実装 
 ArnoldのSkinシェーダー - Standard Surfaceに置き換えられて、廃止予定となっている。
 RenderManのPxrSkinシェーダー - レイヤリング表面下散乱マテリアルのPxrLMSubsurfaceに置き換えられ、RenderMan 21でPxrLM系シェーダーがPxrLayerSurfaceシェーダーに置き換えられた。PxrSkin及びPxrLM系シェーダーはRenderMan 22で廃止された。
 V-RayのVRaySkinMtl - V-Ray NextでVRayFastSSS2及びVRayALSurfaceMtlに置き換えられた。

層化 (レイヤー) 

層化 (レイヤー) はベースマテリアルに薄膜マテリアルなどを足す時に使われる。層化には、非物理的ではあるものの、層同士の線形合成 (lerp) が用いられてきた。その後、より物理的な層化モデルも登場したが、計算が複雑であるため、あまり用いられていない。

物理的な層化に対応するもの 
 RenderMan 24以降のMaterialX LamaのLamaLayerのRough Coatingモード

ヘア・ファー (髪・毛) 
ヘアシェーダーの鏡面反射では、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モデルが登場した。

また、ファー向けのシェーダーモデルも開発された。動物の毛は人毛と異なりメデュラ（毛髄質）が目立つため、それを考慮したYan et al.の論文が2015年に登場し、2017年にはそれを高速化するためのファーモデルが登場した。

しかしながらMarschner反射モデル以降に存在する縦方向と方位角の反射の分離は物理的ではなく、2022年にはそれらを統合して扱うMicrofacet Hairモデル（Huangモデル）が登場した。

パラメータ 
物理ベースより前の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]

各ソフトウェアの実装

Microfacet Hairモデル対応のもの 
 Blender 4.0以降のPrincipled Hair BSDF - Huangモデルに対応。なお2.8以降はChiangモデルにも対応している。

Microfacet Hairモデル未対応のもの 
 RenderManのPxrMarschnerHair - 拡散反射にZinkeモデルを採用している (古いKajiya-Kay拡散モデルへの切り替えも可能)。物理ベースの髪色指定にはPxrHairColorノードが必要。
 Arnold 5以降のStandard Hairシェーダー - 鏡面反射にd'Eonモデル、拡散反射にZinkeモデルを採用している。
 V-Ray NextのVRayHairNextMtl - Chiang et al.及びYan et al.の論文を参照して実装された。

ボリューム (体積)

歴史 
ボリュームシェーダーでは簡易的なHenyey-Greenstein位相関数が長らく用いられてきた。1993年、Henyey-Greenstein位相関数を単純化したSchlick位相関数が登場した。Henyey-Greenstein位相関数とSchlick位相関数ではパラメータが異なるため、パラメータの変換が必要となる。

また、1987年のNishita, et al.の論文において、極小粒子向けのレイリー散乱理論に基づくRayleigh位相関数、小さな粒子向けのミー・ローレンツ理論 (ミー散乱) の近似であるMie-Hazy位相関数及びMie-Murky位相関数が示された。これら位相関数は計算の容易な位相関数のフィッティング先に使われており、例えばmental rayではこれらの位相関数に相当するパラメータ値を提示していた。

その後、雲の散乱において雨滴粒径分布 (DSD) 毎のミー・ローレンツ位相関数の事前計算が行われるようになったものの、ミー・ローレンツ位相関数にはサンプリングが難しいという問題があり、2017年にはミー・ローレンツ位相関数の回折ピークを切り落とすという手法が登場した。

2023年にはミー散乱の近似をより正しくしたHG-Draine blend位相関数が登場した。

ボリュームの実装

ミー・ローレンツ位相関数対応 
 Ocean

HG-Draine blend位相関数対応

スカイ (空) 
当初、輝度のみの解析的なスカイモデルとして、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によって多重散乱や地表面アルベドに対応する4次元LUTベースのPrecomputed Atmospheric Scatteringが登場したものの高い計算量となっていた。2009年、惑星の影を無視することによって3次元LUTに収めたElekモデルが登場したものの水平線でのアーティファクトの問題があり、2013年にはその問題を軽減したYusovモデルが登場したものの大気の濃い場合にはまだ問題が残っていた。またこれらは他の既存技術と組み合わせてもソフトなボリュームシャドウに未対応という問題も抱えていた。2020年、Epic Gamesに所属するSébastien Hillaireはこれの問題を解決して動的に変化しやすくした「A Scalable and Production Ready Sky and Atmosphere Rendering Technique」を公開した。

スカイモデルにおけるパラメータ 

実装によりスカイモデルの正確さやパラメータが異なる。

 太陽の方向
 太陽の方向をベクトルで指定するもの (Blenderなど) や、地平座標 (方位角/仰角) で指定するもの (Arnoldなど) がある。シーンの地理座標 (緯度/経度) と日時と北方向補正で指定できるレンダラーもある (OctaneやMODOなど)。
 太陽の大きさ
 太陽の大きさを指定する。角直径で指定するもの (Blenderなど) や半径で指定するもの (Octaneなど) がある。
 高度 (Altitude)
 標高 (平均海面からの高度) を指定する。
 空気 (Air)
 レイリー散乱を引き起こす空気分子の密度を指定する。
 ダスト (ちり、濁度、Haze)
 ミー散乱を引き起こす空気中の粉塵や霧などの大気エアロゾル粒子の密度を指定する。
 解析的モデルでは濁度 (Turbidity)を指定していたが、物理的モデルではダスト密度又はHaze係数を指定する。
 オゾン
 減衰を引き起こすオゾン層のオゾン分子の密度を指定する。
 地表面アルベド
 地表面反射により大気へと影響を与える地表面の色を指定する。

スカイモデルの実装 
 シミュレーションベースのスカイモデルに対応するもの
 Octane Render 4以降のPlanetary Environment及びOctane Daylight - Nishitaスカイモデルに対応している。
 Blender 2.9以降のSky Textureノード - Nishitaスカイモデル (1993年版)を単純化したスカイモデルに対応している。なお旧来のHosek-Wilkieスカイモデル及びPreethamスカイモデルにも引き続き対応している。
 NishitaAtmos.osl - 無料のNishitaスカイモデル実装。OSLシェーダー対応のレンダラーで使用可能。
 

 解析的スカイモデルにのみ対応するもの
 Corona Renderer 6以降 - PRG Clearスカイモデル（旧Improvedスカイモデル）が搭載されている。
 V-Ray 5以降のVRaySky - Corona Rendererと同じPRG Clearスカイモデルが搭載されている。なお旧来のHosek-Wilkieスカイモデル、Preethamスカイモデル及びCIEスカイモデルにも引き続き対応している。
 Redshift 3.5.14以降 - PRG Clearスカイモデルが搭載されている。
 ArnoldのPhysical Sky - Hosek-Wilkieスカイモデルをベースとしている。
 RenderManのPxrEnvDayLight - Preethamスカイモデルをベースとしている。

 リアルタイムレンダラー
 UnityのHDRPのPhysically Based Sky - Precomputed Atmospheric Scatteringを採用している。
 Unreal Engine - 「A Scalable and Production Ready Sky and Atmosphere Rendering Technique」が基となっている。
 Precomputed Atmospheric Scattering - 同名の論文の新実装。BSDライセンス。
 Unreal Engine Sky Atmosphere Rendering Technique - 「A Scalable and Production Ready Sky and Atmosphere Rendering Technique」の実装。MITライセンス。

関連項目 
  - 各マテリアルの屈折率 (IOR) の一覧。

注釈

出典

外部リンク 
 The Comprehensive PBR Guide by Allegorithmic - vol. 1 Allegorithmic
 『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版 小林信行訳
 The Comprehensive PBR Guide by Allegorithmic - vol. 2 Allegorithmic
 『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR textures 』私家訳版 小林信行訳
 Physically-Based Material, where are we? Unity Technologies
 Pixar’s Foundation for Materials Pixar
 Revisiting Physically Based Shading at Imageworks Imageworks

3DCG