表面が粗い物体のディフューズライティングで起こる現象 : Retro-Reflection (再帰性反射)
概要
- この記事では 表面が粗い物体のディフューズライティングにおいて起こる Retro-Reflection (再帰性反射)という現象について書きます.
実世界のディフューズライティング結果の実測値
- 下図の左側が表面が滑らかなマテリアルのディフューズライティング結果の実測値で, 下図の右側が表面が粗いマテリアルのディフューズライティング結果の実測値です.
- 上図のグラフについては横軸が法線とハーフベクトルの角度で, 縦軸がディフューズライティング結果の実測値です.
- 上図の右側の右端を見ると, 表面が粗いものについては法線とハーフベクトルの角度が 90 度に近づくと, ディフューズライティング結果が強くなる現象が起きています.
- これを Retro-Reflection (再帰性反射)と言います.
- これが起こる理由については, 下図のように表面が粗いときのマイクロファセットがお互いに光を反射して, 視線方向にライトを跳ね返すからだと言われています.
Oren-Nayar のディフューズシェーディングモデル
- Oren-Nayar のディフューズシェーディングモデルではこの Retro-Reflection を考慮したシェーディングモデルです.
- 下図は Oren-Nayer シェーディング結果で, 一番左は表面が滑らかなもので結果はランバート反射と一緒ですが, 右側にいき表面が粗くなるにつれてRetro-Reflection (再帰性反射)が起きて球の縁が明るくなっています.
- 下図が Oren-Nayar の数式です.
- ただ計算式が複雑なので, 現状ではこのままゲーム向けにリアルタイムに使うのはあまり向いていないと思います.
- またフレネルなどは考慮されていないので, スペキュラライティングとのエネルギー保存則などは満たしていないです.