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

物理ベースシェーディング  とは、物理法則をベースとしたシェーディングのことであり、物理ベースレンダリング  において使われている。PBSシェーディングモデルとしては、メタルネス  ワークフローで有名な「Disney 原則BRDF」が代表的だが、それを拡張した「Disney BSDF」もある。これらをベースとしたシェーダーは、PBRシェーダーとも呼ばれている。

物理ベースシェーディングは、写実的レンダリングだけでなく、非写実的レンダリング  にも使われている。

1. 歴史
-----

2003年、三菱電機の研究拠点の一つ Mitsubishi Electric Research Laboratories  は、幅広いマテリアルの測定を行ってデータベース化したMERL BRDF Database[1]を発表した。

その後、ウォルト・ディズニー・アニメーション・スタジオは、BRDF Explorer[2]を開発し、そのツールとMERL BRDF Databaseのデータを用いて新たなシェーディングモデルの開発を行い、2012年、SIGGRAPH 2012 Courseの「Physically-Based Shading at Disney」の中で、「Disney “principled” BRDF」 を発表した。

2015年、DisneyはDisney BRDFに鏡面反射BSDF とより正確な表面下散乱を統合したDisney BSDFを発表した。

2. 概要
-----

物理ベースレンダリングにおいては、基本的にエネルギー保存の法則を守る必要がある。PBSのシェーダーモデルは、パラメータを変更してもエネルギーが保存されるようになっている。なお、光の相反性については、透過を実装するために使われるBTDFに相反性が無いとされる。

3. PBS対応の3Dファイル形式
-----------------

物理ベースシェーディングのパラメーターに対応する3Dファイル形式が増えている:

glTF 2.0形式
FBX形式
Stingray PBSシェーダー方式 - Stingrayゲームエンジンで使われていたシェーダーのパラメータ
Autodesk Standard Surfaceシェーダー方式 - Arnold 5以降で使われているStandard Surfaceシェーダーのパラメータ。Maya 2020.3以降対応。
Wavefront OBJ+MTL形式のPBR拡張

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

4.1. 拡散反射および鏡面反射
----------------

マイクロファセット  理論導入前のシェーディングモデルは、経験則に頼っていた。特にGPUによる固定パイプラインにおいて、拡散反射は完全拡散反射を前提とするランバート反射モデルのみであり、鏡面反射は経験則のBlinn-Phongの反射モデルのみであった。

マイクロファセット理論導入後、シェーディングモデルは「表面の粗さに対応する拡散反射モデル」  と「表面の粗さに対応する鏡面反射モデル」 、Walterモデル 等) の合成となった。しかし、拡散反射のオーレン・ネイヤー反射モデルがフレネル反射に未対応であったり、拡散反射のオーレン・ネイヤー反射モデルと鏡面反射の反射モデルでラフネス相当のパラメータの範囲が異なっていたりなど、問題が多かった。

2012年、「Disney 原則BRDF」が登場し、独自の拡散反射モデル と、GTR分布関数  ベースの鏡面反射モデルの合成により、両反射モデルのラフネスパラメータが統合された。また、メタルネス  が導入され、光の透過や表面下散乱  のほぼ起きない「導体  」と、金属光沢  の起きない「誘電体 」が別扱いされるようになった。また、影響の大きな色である導体の鏡面反射色および誘電体の拡散反射色が基本色 として同一に扱われるようになった。

2014年、マイクロファセット理論におけるフレネル反射の計算に、屈折率1.2〜2.2を近似した従来のSchlickの近似式に代わって、正確なGulbrandsenのフレネル方程式が登場したものの、Gulbrandsenのフレネル方程式はRGBレンダリングにおいて近似となり、Schlickの近似式よりも正確では無いものとなっていた。2019年、LucusFilm の Naty Hoffman によってそれらよりも正確な F82パラメータの導入が提案されたものの、F82パラメータはエネルギーの保存に問題が存在した。2021年、「Adobe Standard Material」が登場し、そこにはその改良版である F82-tintが導入された。

2015年、「Disney 原則BSDF」が登場し、鏡面反射における多重散乱効果を手動で補正するためのSheenコンポーネントが導入された。2016年、従来の単一散乱のみの鏡面反射モデルに代わって、多重散乱をシミュレーションする鏡面反射モデルの Multiscatter GGX が登場したものの、この手法は計算の正確な代わりに速度の遅いものとなっていた。その後、Multiscatter GGX を近似やルックアップテーブルなどによって高速化したモデルが多数登場していく。2017年には相反性を維持したまま高速化する Kulla and Conty の手法が登場し、2019年には相反性が崩れるもののサンプリングを最適化した Emmanuel の手法が登場する。またリアルタイムで多重散乱を再現するための手法も多数登場した。

なお、拡散反射は表面下散乱の近似だとされているが、表面下散乱の距離が0に近い場合、一般的な拡散反射モデルに使われている完全拡散反射  とはならず、Chandrasekhar BRDFとなる。

4.2. 異方性反射
----------

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

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

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

4.3. クロス 
----------------

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

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

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

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

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

4.4. 表面下散乱
----------

表面下散乱では1993年、BRDFを表面下散乱へと近似したHanrahan-Krueger BRDFが登場した。

2001年、医療物理学向けの手法の応用により、双極子  モデルを用いたBSSRDFベースのレンダリング手法が確立されたものの、多重散乱部分は近似となっていた。

2015年、拡散モデル向けに単一散乱および多重散乱の両方を同時に近似したChristensen-Burley拡散プロファイルが登場し、この拡散プロファイルは同年のDisney BSDFでも採用された。

しかし、拡散モデルは平らな表面を前提としているために曲率の高い表面でアーティファクトが多く、Disney BSDFでは正確でアーティファクトの少ないPath-traced subsurface scattering  も検討された。2014年には原子力学で使われていたゼロ分散なDwivediサンプリングをランダムウォーク方式の表面下散乱に使うことが提案されており、2016年にはその改良版が登場し、多くのレンダラーがランダムウォーク方式に対応していった。

2017年、Disney子会社のPixarはPath-traced subsurface scatteringの新たなモデルを公開した。このPixarの論文では異方性に加えてランベルト・ベールの法則よりも正確な非指数関数モデルが導入された。

4.4.1. リアルタイム表面下散乱
------------------

リアルタイムにおける表面下散乱の表現では当初、擬似的なHalf-Lambertシェーダーが使われていた。その後、Wrapped Diffuseシェーダーにルックアップテーブルでカラーシフトを加える手法、深度マップを用いた吸収の近似、テクスチャ空間でのガウシアンぼかしによる拡散の近似が登場した。

2009年、テクスチャ空間の代わりにスクリーン空間でぼかし処理を行うScreen Space Subsurface Scattering が登場した。2012年にはスクリーン空間でのぼかし処理を2つの畳み込みまで減らして高速化したSeparable Subsurface Scattering が登場した。Disney BSDF登場後は、ガウシアン拡散プロファイルの代わりにChristensen-Burley拡散プロファイルが使われるようにもなった。

また、表面下散乱の透過のために、焼き付けたThicknessマップも使われるようになった。

4.5. 透過・半透明
-----------

レイトレーシング導入前の透過には、2次元的なアルファブレンドが用いられていた。

レイトレーシング導入後、屈折の再現が可能となった。また、ランベルト・ベールの法則に基づく指数関数的減衰の再現により、半透明における、より正しい体積吸収  の再現が可能となった 。

また、位相関数を用いたボリュームレンダリングも行われるようになった も参照)。

薄いサーフィスにおいては、「表面下散乱による拡散透過」が導入されたほか、屈折にもマイクロファセット理論が導入され、粗い  表面により拡散された拡散透過および鏡面透過の再現が可能となった。

4.6. 電磁スペクトル
------------

3DCGのレンダリングでは昔より可視光の電磁スペクトルを考慮した物理的なスペクトラルレンダリングが考案されMaxwell Renderなどの一部のレンダラーに実装されていたものの、多数の固定波長によるスペクトラルレンダリングでは速度の問題が存在する一方、各単一波長でのモンテカルロレイトレーシングによるスペクトラルレンダリングでは色ノイズの問題が存在しており、一般的なレンダリングの主流は長らく非物理的な光の三原色によるRGBレンダリングに留まっていた。しかしながらRGBレンダリングには反射を繰り返すごとに色がズレていく、条件等色の再現が出来ない、光の分散や干渉や蛍光が近似計算になるなどの問題が存在していた。

2014年に代表波長スペクトラルサンプリング  が登場すると、四波長ないし八波長での処理により、よりノイズの少ないスペクトラルレンダリングが可能となった。

4.6.1. スペクトラルアップサンプリング
----------------------

スペクトラルレンダリングでRGB値指定のマテリアルや光源を扱うためにはスペクトルの再構築が必要となる。

アップサンプリングの手法は古くより存在していたものの、1935年のMacAdam法はスペクトル形状を箱型として扱っており非常に荒いものとなっていた。滑らかなアップサンプリング法としては1989年にGlassnerによって平滑化関数の線形結合を使用する手法が登場したものの、実際の物質の反射率曲線は滑らかではないという問題が存在しており、1990年にはvan Trigtによって最小勾配二乗法を使用する手法が登場した。しかしながら、これらにはどちらも負の反射率が算出されうるという問題が存在していた。

その後、1999年にSmitsによってスペクトルを10個の箱型にした実用的なアップサンプリング法が登場し広く使われることとなった。しかしながら、この手法は狭色域のsRGB色空間でしか正しく動作しないという問題を抱えていた。この問題を解決する手法はいくつか提案されているものの、2021年現在もプロダクションレンダラーのManukaではこの手法の変種が使われており、そこでは広色域もsRGB色空間へと変換された後でアップサンプリングされている。

また各スペクトルの反射率は光が増幅しないよう 1.0 を超えることが出来ないが、それによって指定されたRGB色の彩度が高い場合に明るさを再現できないケースが存在し、2019年にはその問題を解決するために蛍光を考慮した蛍光アップサンプリング法が登場した。

5. Disney 原則BRDF以降のパラメータ
------------------------

「Disney 原則BRDF」はBRDFのみとなっていたが、「Disney 原則BSDF」でBTDFが加わってBSDFとなり、また各種拡張でEDFやVDFも追加されていった。

「Disney 原則BRDF」には、ベースカラー 、メタルネス 、ラフネス 、スペキュラレベル  だけでなく、表面下 や異方性 やツヤ塗装やクリア塗装 も含まれている。しかし、物理ベースシェーディングの実装によっては、それらの幾つかが省略されているものもある。

5.1. Disney 原則BRDFのパラメータ
------------------------

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

メタルネス  メタルネスパラメータは誘電体 か導体 かを指定する。中間を指定すると、誘電体と導体がブレンド される。 誘電体では、光が入射すると正反射光と屈折光に分かれ、屈折光が表面下で散乱・吸収され散乱光  となったり、透過・吸収されて透過光となる。導体では、光が入射すると一部の光が屈折して吸収され、それ以外の光が正反射される。 ベースカラー  ベースカラーパラメータは、誘電体の拡散反射色および導体の正反射色を指定する。 ラフネス  ラフネスパラメータは、微細表面  理論に基づくマイクロスケールでの表面の粗さを指定する 。 ラフネスが高いほど、正反射光、屈折光および散乱光が表面で拡散することとなる。なお、誘電体か導体かに関わらず全てのマテリアルはフレネル反射を持つが、ラフネスが高くなるほどフレネル反射は小さくなる。 一部のPBS実装では、ラフネス の代わりにグロシネス で実装されている 。 スペキュラレベル  スペキュラレベルパラメータは、誘電体の鏡面反射率を0.08  で割って指定する。スペキュラレベルは屈折率  から算出することもできる: /)2)/0.08 。 スペキュラレベルの標準値は0.5  となっている。glTF形式ではKHR_materials_specular拡張で対応しているものの、標準値は1.0となっている。 スペキュラティント  スペキュラティントパラメータは、誘電体の正反射色をどれだけベースカラーに近づけるかを指定する 。なお、スペキュラティントは、フルネル反射の反射色に影響を及ぼさない。 glTF形式のKHR_materials_specular拡張では色味ではなくスペキュラカラー  となっている。 サブサーフィス 
サブサーフィスパラメータは、誘電体において、表面下で散乱された散乱光が拡散反射形に近いか表面下散乱形に近いかを指定する。 「Disney 原則BRDF」において表面下散乱は、Hanrahan-Krueger BSDFにインスパイアされた薄い散乱層向けの近似モデルを採用している。一方、Disney BSDFでは、従来の薄い散乱層向けの表面下散乱は、サブサーフィスパラメータからThinサーフィスBSDFのフラットネス  パラメータへと変更され、SolidサーフィスBSDFのサブサーフィスには、より正確な表面下散乱として、独自の拡散プロファイルによる近似 、もしくは曲率の高いサーフィスでも問題の無い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実装ではクリアコートグロスの代わりにクリアコートラフネス  で実装されている 。

5.2. RenderMan拡張のパラメータ
----------------------

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

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

5.3. 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拡張によって対応している 。 diffTrans  ThinサーフィスBSDF向け。diffTransパラメータは誘電体の薄いサーフィスにおいて、散乱による拡散反射と拡散透過の割合を0～2で指定する。 Enterprise PBR拡張  では値の範囲が0〜1となっている。 Index of Refraction  表面の屈折率を直接指定する。 Enterprise PBR拡張 
及びglTF形式のKHR_materials_transmission拡張及びKHR_materials_ior拡張では標準値がポリウレタンの屈折率と同等の1.5となっている。glTF形式のベンダー拡張ADOBE_materials_thin_transparencyでは標準値が水の屈折率と同等の1.33となっていた。

5.4. Pixarパストレース表面下散乱拡張のパラメータ
-----------------------------

Disney子会社のPixarはパストレース表面下散乱に以下のパラメータを導入した。

サブサーフィスアニソトロピー  表面下散乱の異方性を指定する。異方性は特にバックライトのシーンの薄い部位で違いが大きくなる。リアルな肌の表現には約0.8を指定する。 Arnold、RenderMan、Blender 3.0以降のCyclesなどが対応している。 ブリード  非指数関数モデルの表面下散乱における光滲みを指定する。RenderManなどが対応している。

5.5. Enterprise PBRの追加パラメータ
---------------------------

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

Enterprise PBRで拡張されたパラメータには以下がある。

Sheenカラー  Sheenラフネス  フレークカバレッジ  フレークがどれだけ覆うのかを指定する。 フレークカラー  フレークの色。 フレークラフネス  フレークの向きの分布の粗さを指定する。 フレークサイズ  フレークの直径をミリメートル で指定する。 フリップフロップエフェクト  フレークのフリップフロップ効果を有効にするかどうかを0か1で指定する。 フリップフロップカラー  フレークのフリップフロップ効果が有効な場合の第二フレークカラー。 クリアコートノーマル クリアコートの法線を指定する。 エミッションバリュー  エミッションバリューパラメータは、発光における放射量を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も分散に対応しているが、これらはアッベ数の代わりに分散係数で指定を行う。

5.6. Autodesk Standard Surfaceの追加パラメータ
--------------------------------------

Autodesk Standard SurfaceシェーダーのパラメータはFBX形式に新たに導入されている。これらパラメータはArnold 5以降に実装されているStandard Surfaceシェーダーが基となっている。このシェーダーモデルでは単純なクリアコートの代わりに汎用なコートが導入されている。

コートカラー コートの色を指定する。 コートアニソトロピー コートの異方性を指定する。 コートローテーション コートの異方性の回転を指定する。 コートIOR コートの屈折率を指定する。 コートアフェクトカラー コートアフェクトラフネス オパシティ  オパシティは表面の不透明度を指定する。細かな穴のある布などを表現する時などに使われる。物理的に正しい不透明度を実装した実装系も存在する。 Thin Film Thickness  表面上の薄膜の厚みをナノメートルで指定する。薄膜は分散した屈折光の内部反射により玉虫色  となる 。薄膜の厚みへと対応するものには、ArnoldやRenderManがある。 glTF形式ではKHR_materials_iridescence拡張のiridescenceThicknessMaximumで対応している。

5.7. Adobe Standard Materialの追加パラメータ
------------------------------------

Adobe Standard Material は Substance 3D Stager などで使われている。

Sheenオパシティ  Sheenの不透明度を指定する。 スキャッタリングディスタンススケール 表面下散乱の散乱距離の各色のスケーリングを指定する。 レッドシフト 表面下散乱の赤方偏移の度合いを指定する。肌に向くとされる。 レイリースキャッタリング 表面下散乱のレイリー散乱の度合いを指定する。ミルク、石、空気などに向くとされる。 コートオパシティ  コートの不透明度を指定する。 コートスペキュラレベル コートの鏡面反射量を指定する。 コートノーマルスケール コートの法線の強さを指定する。

5.8. OpenPBR拡張のパラメータ
--------------------

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

5.9. 対応ソフトウェア
-------------

5.9.1. オフスクリーンレンダラー
-------------------

RenderManのPxrDisneyシェーダー 
Blender 2.79以降のCyclesのPrincipled Node 
MODO 11.2以降のPrincipledシェーダー
3ds Max 2018及びMaya 2018以降に搭載のArnold 5以降のStandard Surface 
Houdini 16以降のMantraのPrincipled Shader VOPノード/Principled Shader SHOPノード 
LightWave 2018以降のPrincipled BSDF
appleseedのDisney BRDF

5.9.2. リアルタイムレンダラー
------------------

Blender 2.8以降のEeveeのPrincipled Node 
Godot 3.0以降

6. スキン 
----------

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

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

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

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

6.1. スキンシェーダーの実装
----------------

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

7. 層化 
------------

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

7.1. 物理的な層化に対応するもの
------------------

RenderMan 24以降のMaterialX LamaのLamaLayerのRough Coatingモード

8. ヘア・ファー 
---------------

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

8.1. パラメータ
----------

物理ベースより前のMarschner鏡面反射モデルでは、一次鏡面反射 )、二次鏡面反射 )、透過鏡面反射 )のそれぞれに反射色や鏡面反射の角度シフトを指定していた。また、これらとは別に拡散反射色を指定することもあった。

物理ベースの後は反射パスを分けずに、髪色および角度シフトの指定を単一で行うようになった。また、髪色は基本色だけでなくメラニン色素ベースの指定も可能となった。d’Eon et al. の論文では、メラニン色素とRGB吸収係数との関係に以下を提示している :

RGB吸収係数 = ユーメラニン濃度 * [0.419, 0.697, 1.37] + フェオメラニン濃度 * [0.187, 0.4, 1.05]

8.2. 各ソフトウェアの実装
---------------

8.2.1. Microfacet Hairモデル対応のもの
------------------------------

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

8.2.2. Microfacet Hairモデル未対応のもの
-------------------------------

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

9. ボリューム 
-------------

9.1. 歴史
-------

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

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

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

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

9.2. ボリュームの実装
-------------

9.2.1. ミー・ローレンツ位相関数対応
---------------------

Ocean

9.2.2. HG-Draine blend位相関数対応
----------------------------

10. スカイ 
-----------

当初、輝度のみの解析的なスカイモデルとして、1993年にPerezスカイモデルが登場し、1994年にそれを少し変更したCIEスカイモデルが登場した。しかし、これらのモデルはパラメータが多く使い難い上、輝度のみにしか対応していないため色が無く、レンダリングには適さないものであった。

一方、色のあるものとしてはシミュレーションベースのスカイモデルが登場した。1993年には大気の散乱をベースとするNishitaスカイモデル  が登場したものの単一散乱のみの考慮となっており、1996年には大気の多重散乱を考慮するNishitaスカイモデル  が登場した。2005年にはHaberらによって大気の異方性散乱、湿度や温度による大気の屈折率、オゾン層の吸収が導入され、その後も関与粒子の分布を考慮した晴天モデルのKutz や、季節や地理を考慮したモデルのGuimera, Gutierrez and Jarabo などが登場したものの高度なスカイモデルは速度が遅く、シミュレーションベースのスカイモデルでは高速なNishitaスカイモデルが多くのソフトウェアで採用されていった。

また解析的なスカイモデルでも、1999年に色へと対応するPreethamスカイモデルが登場し、レンダリングに広く使われるようになった。このPreethamスカイモデルは、Perezの解析的なスカイモデルをベースに、Nishitaのシミュレーション的なスカイモデルの生成結果を当て嵌めた上でパラメータを単純化したものであり、色に対応しながらもシンプルであるため広く使われたものの、夕焼けや濃い濁度に弱く、2012年にはそれらを改善して地表面アルベドにも対応させたHosek-Wilkieスカイモデルが登場した。しかしながら既存の解析的なスカイモデルは水平線より上の太陽しか考慮されていないものとなっており、2021年には水平線より下の太陽などにも対応したPRG Clearスカイモデルが登場した。

ゲーム向けでは事前計算によって正確性と速度を向上させたルックアップテーブル  ベースのスカイモデルも登場した。2005年にはGPU Gems 2においてNishitaスカイモデル をベースとした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」を公開した。

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

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

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

10.2. スカイモデルの実装
---------------

シミュレーションベースのスカイモデルに対応するもの
Octane Render 4以降のPlanetary Environment及びOctane Daylight - Nishitaスカイモデルに対応している。
Blender 2.9以降のSky Textureノード - Nishitaスカイモデル を単純化したスカイモデルに対応している。なお旧来のHosek-Wilkieスカイモデル及びPreethamスカイモデルにも引き続き対応している。
NishitaAtmos.osl - 無料のNishitaスカイモデル実装。OSLシェーダー対応のレンダラーで使用可能。 解析的スカイモデルにのみ対応するもの
Corona Renderer 6以降 - PRG Clearスカイモデルが搭載されている。
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ライセンス。

11. 関連項目
--------

屈折率の一覧 - 各マテリアルの屈折率  の一覧。

12. 注釈
------

13. 出典
------

14. 外部リンク
---------

[3] Allegorithmic
[4] 小林信行訳
[5] Allegorithmic
[6] 小林信行訳
[7] Unity Technologies
[8] Pixar
[9] Imageworks