セルフシャドウを修正する

Self Shadow Correction セクションのパラメータを使用して、レイキャスティング時に影を落とす Spot Light で発生するセルフシャドウの問題を修正することができます。

注:

Light Controlウィンドウ(Multi-listerのライトをダブルクリックすると開く)のSelf Shadow Correctionパラメータを表示するには、TypeSpotに設定し、Renderer Shadowsオンに切り替える必要があります。

Spot Lightはシャドウマップ(またはデプスマップ)を使用してサーフェスが作成する影を計算します。サーフェスがSpot Lightで照らされていれば、シャドウマップは照らされているサーフェスから始まり、ライトの外へ広がって行きます。このシャドウマップ内にあるすべてのサーフェスは、影の中に入ってしまうことになります。

光で照らされ、影を落としているサーフェスには問題が起きる場合があります。シャドウマップの解像度は固定されているので、サーフェスを描写するには十分滑らかでないことがあるためです。この場合、シャドウマップが実際にサーフェスと交差することがあります。これは、光で照らされたサーフェスが部分的にそのサーフェス自体の影の中に入ってしまうことを意味します。この結果、サーフェスに暗いモアレ状の模様が現れます。

この問題を解決するには、Min Depthパラメータを小さな値に設定します。これにより、レンダラがシャドウマップを計算する前に、影を落としているサーフェスを一時的にライトの方に向かって移動させるので、サーフェスが自分の影の中に入ることはなくなります。

Min Depthを使用する場合に問題になるのは、「小さすぎる値」や「大きすぎる値」というのはどのような値かを知ることが難しいということです。Min Depthの値が小さすぎると、サーフェスは自分の影の中に入ってしまいます。逆にMin Depthの値が大きすぎると、本来影に入るはずの他のサーフェスが影の中に入らないということか起こります。また、Min Depthの値はワールド座標空間単位であるため、値がシーンのスケールに左右されるという問題もあります。Min Depthは、モーションブラーにも誤った影響を与えることがあります。

セルフシャドウの問題を解決するには、Blend Offsetを使用するのがより適切な方法です。Min Depthが影を落としているサーフェス全体を等しい量だけ移動させるのに対して、Blend Offsetはシャドウマップのオリジナルの点が正しいと仮定して、サーフェスの異なった点を異なった量だけ移動させます。

セルフシャドウとモーションブラーがかかったオブジェクトがいっしょになると、問題がより複雑になります。レンダラは実際のカメラのシャッターと露出時間をシミュレートして、モーション ブラーを計算します。モーションブラーがかかったオブジェクトは、フレームごとにシャッターが開閉する間に数回レンダリングされます。ただし、シャドウマップはシャッターの中間地点で計算されるだけです。オブジェクトがSpot Lightから高速で遠ざかると、モーションブラーのある部分については、完全に自分の影に入っているように見えることがあります。