鏡面反射 BRDF (双方向反射率分布関数)のチュートリアル

このチュートリアルでは、standard_surface シェーダ内にあるさまざまな鏡面反射光設定について確認します。

BRDF

双方向反射率分布関数(BRDF)は、サーフェスの反射特性を記述するものです。サーフェスの法線に対して、ある方向から入射/放射して別の方向に反射する量を指定します。

物理的に説得力のある BRDF の主な特性は、入射方向と反射方向の間の対称性(ヘルムホルツの相反性)と、入射光の特定方向への合計反射力は、入射光のエネルギー以下になる(エネルギー保存)というものです。

注:

鏡面反射 BRDF モデルはビューに依存し、グレージング角度で異方性とフレネル効果を考慮することができます。Arnold は、Cook-Torrance BRDF を使用します。

サーフェスに当たる光線は入射光と呼ばれ、入射光が当たる角度は入射角と呼ばれます(下図参照)。反射される光のエネルギーはサーフェスの入射光以下でなければなりません(光を「加える」ことはできません)。サーフェス上で、光線は反射または屈折し、最終的にはいずれかの媒質に吸収されるようにすることができます。

入射角、入射光、反射光

法線での反射率

フレネル効果は、最初にこの効果を説明したフランスの物理学者、Augustin-Jean Fresnel にちなんで命名されました。この効果は、サーフェス上での反射の強さは視野角によって決まることを示しています。視射角で見ると、サーフェス上の反射の量が増えます。

standard_surface シェーダの specular_ior が 1 を超える場合、オブジェクトの反射率はビューに依存し、フレネルの式に従って変化します。standard_surface シェーダはフレネルの式に対する Schlick の近似式を使用し、マテリアルの IOR を使用することでコントロールできます。小さい値の場合、マテリアルはプラスチックなどの完全誘電体のような振る舞いをします。値が大きくなると、マテリアルはほぼ完全な導体(金属面)になります。

フレネルは何らかの形ですべてのマテリアルに存在します。最も一般的な例はガラスと水です。以下の例は、木製テーブルのフレネル効果を示しています。 カメラの視野角が浅くなるにしたがって、テーブル上の反射が強くなっています。

|

ビュー方向に応じた鏡面反射光 BRDF の変化

下の例では、IOR を使用して立方体に standard_surface シェーダが割り当てられています。フレネル効果が表示されます。光沢のある鏡面反射光は、カメラの視野角が浅くなると明るくなります。

マイクロファセット サーフェス

Cook-Torrance は、マイクロファセット モデルに基づくマイクロファセット BRDF です(例については、『Microfacet Models for Refraction through Rough Surfaces』(Walter、Marschner、Li、および Torrance、Eurographics 刊、2007 年)を参照してください)。

これらのモデルでは、サーフェスは完全にスムーズなわけではなく、多数の非常に小さいファセットによって構成され、各ファセットは完全な鏡面反射光を持つものとみなされています。

これらのマイクロファセットには、近似化するスムーズなサーフェスの法線の周囲に分布する法線があります。スムーズなサーフェス法線に対してマイクロファセットの法線が異なる度合いは、サーフェスの粗さによって決まります。

以下のアニメーションは、サーフェスの粗さが鏡面反射に与える影響を示しています。

下の例では、サーフェスが「でこぼこ」だったり「粗い」場合に、鏡面反射が伸びていることが確認できます。

異方性と粗さ

異方性マテリアルの例として、アスファルト コンクリートを使用します。この効果は、濡れた道路のサーフェスではっきりと表れます。濡れたサーフェスは、拡散反射が暗く表示され、鏡面反射が明るく表示されます。サーフェスから距離がある場合は、異方性反射の伸びが、地面の上でさらにはっきりと分かります。しかし、近付くと、視野角の変化によって反射の伸びは小さくなります。異方性反射ハイライトのサイズは、視野角によって異なります。

乾いた道路の拡散反射光サーフェスと濡れた道路の異方性反射サーフェス

下のアニメーション サンプルは、異方性(0, 0.5, 1)を使用したときの specular_roughness の効果を示しています。効果を示すために、粗さの値は 0 から 1 へとアニメートされています。

0 0.5 1

異方性の例

以下のイメージは、床の表面に異方性 マテリアルを使用した場合としない場合のレンダリングの差を示しています。どちらのシェーダもspecular_roughness が 0.2 に設定されています。

床シェーダの anisotropy: 0 床シェーダの anisotropy: 0.8