表面が粗い物体のディフューズライティングで起こる現象 : Retro-Reflection (再帰性反射)

概要

  • この記事では 表面が粗い物体のディフューズライティングにおいて起こる Retro-Reflection (再帰性反射)という現象について書きます.

実世界のディフューズライティング結果の実測値

  • 下図の左側が表面が滑らかなマテリアルのディフューズライティング結果の実測値で, 下図の右側が表面が粗いマテリアルのディフューズライティング結果の実測値です.


  • 上図のグラフについては横軸が法線とハーフベクトルの角度で, 縦軸がディフューズライティング結果の実測値です.
  • 上図の右側の右端を見ると, 表面が粗いものについては法線とハーフベクトルの角度が 90 度に近づくと, ディフューズライティング結果が強くなる現象が起きています.
  • これを Retro-Reflection (再帰性反射)と言います.
  • これが起こる理由については, 下図のように表面が粗いときのマイクロファセットがお互いに光を反射して, 視線方向にライトを跳ね返すからだと言われています.

  • 別の説明もあったので, 下に書きます.
  • 表面がとても粗くて法線の散らばりがほぼ一様な場合, その表面に当たって跳ね返った光は一様に散らばります.
  • その結果, ランバートによるディフューズシェーディングには従わずに, 全体的にフラットな見た目になります.
  • このような現象を起こす材質としては 埃, 表面が粗い粘土, 磨かれていない石, コンクリート, 満月などです.
  • 元の説明は下図です.

Oren-Nayar のディフューズシェーディングモデル

  • Oren-Nayar のディフューズシェーディングモデルではこの Retro-Reflection を考慮したシェーディングモデルです.
  • 下図は Oren-Nayer シェーディング結果で, 一番左は表面が滑らかなもので結果はランバート反射と一緒ですが, 右側にいき表面が粗くなるにつれてRetro-Reflection (再帰性反射)が起きて球の縁が明るくなっています.

  • 下図が Oren-Nayar の数式です.

  • ただ計算式が複雑なので, 現状ではこのままゲーム向けにリアルタイムに使うのはあまり向いていないと思います.
  • またフレネルなどは考慮されていないので, スペキュラライティングとのエネルギー保存則などは満たしていないです.

参考文献