クッキー
ディレクショナルライトの影

Unity のライトは、自身の一部分の上や、近くにあるオブジェクトへと を落とすことができます。シャドウにより、のっぺりとした見た目ではなく、深度の度合いとオブジェクトの位置やスケールによって生み出される「リアル感」をシーンで表現することができます。

オブジェクトが影を落しているシーン
オブジェクトが影を落しているシーン

シャドウはどのように動作するか

単純なケースとして、1つのライトがあるだけの単純なシーンをイメージしてください。ライトから発せられる光(光線)は、ライトから直線的に移動します。そして最終的にはシーン内にあるオブジェクトのどれかにぶつかります。光線がオブジェクトにぶつかったとき、さらにその先へ進んでいけるわけではなく、ぶつかった場所を明るくします(光は最初のオブジェクトで跳ね返らずに、通過することはありません)。つまりシャドウは、光線がオブジェクトによって遮られたことにより暗くなっている領域のことです。

別の見方として、光と同じ位置にカメラがあるのをイメージしてください。そうすると、影の部分は、カメラでは見ることのできない領域と同じになります。

同じシーンの光の視点
同じシーンの“光の視点”

実際にこれは、Unity が正確に光の影の位置を決定する方法として使われています。光は、ビューの位置から、シーンの内部を “レンダリング” するカメラと同じ原理を使用しています。シーンカメラで使用されるデプスバッファシステムは、光に最も近い面をトレースします。見通しのきく表面が照明を受けて明るくなりますが、他のすべては影となり暗くなります。この場合、デプスマップは Shadow Map として知られています(役に立つシャドウマッピングの詳細は Wikipedia を参照してください)。

Shadows を有効にする

インスペクターの Shadow TYPE プロパティーを持つ個々の光のためのシャドウを有効にすることができます。

Hard Shadows 設定はシャープな輪郭の影を生じます。ハードシャドウは日常生活の中ではほとんど発生しません(あなたは宇宙飛行士でない限り)。しかし、より現実的な Soft Shadows より少ない処理とオーバーヘッドが小さいので、多くの目的のために許容されます。Strength 設定は影がどの程度暗いかについて決定します。一般に、いくつかの光は大気によって散乱したり、他のオブジェクトから反射されるので、通常、影が最大強に設定されないようにするでしょう。Resolution プロパティーは、レンダリング解像度を上記のシャドウマップ“camera”に設定します。あなたが見つけた場合、あなたの影は非常に目に見えるエッジが、あなたは、この値を増やすことができますがあります。影が非常にクッキリとした端に見えるなら、この値を増やしたいかもしれません。near plane プロパティーは影をレンダリングするときに最も近い面距離を設定することができます。この距離よりもライトに近いオブジェクトは影を投影することはありません。

シーン内の各メッシュレンダラーCast Shadowsreceive Shadows と呼ぷプロパティーを持ち、必要に応じて有効にする必要があります。

Shadows Only は他の見えないオブジェクトによって影がキャストされる間、表面のいずれかの側に、影をキャストすることを可能にする Two Sided オプションもあります(すなわち、バックフェース・カリングはシャドウキャスティングのために無視されます)。

シャドウマッピングとバイアスプロパティー

影は与えられた光のための最後のシーンのレンダリング中に決定されます。シーンがメインビューカメラにレンダリングされると、ビュー内の各ピクセル位置は光の座標系に変換されます。光からのピクセルの距離は、シャドウマップに対応するピクセルと比較されます。ピクセルが、シャドウマップのピクセルよりも離れている場合、それはおそらく別のオブジェクトによって光から隠され、それは照明を得られません。

正常なシャドウ
正常なシャドウ

直接、光によって照らされる面は時々部分的に影があるように見えることがあります。シャドウマップで指定された距離に正確でなければならないピクセルは時々遠くにあるとみなされるためです(シャドウマップのために低解像度イメージを使用した結果。 またはシャドウ·フィルタリングを使用)。その結果、実際に照らす場合、“シャドウアクネ(Shadow acne)”として知られている視覚的な効果を与えます。

偽りのセルフシャドウのアーティファクトの形状をしたシャドウアクネ
偽りのセルフシャドウのアーティファクトの形状をしたシャドウアクネ

シャドウ・アクネを防ぐバイアス値を確保するために、境界線のピクセルは、必要とする比較をパスし、シャドウマップ内の距離に加えることができます。またはシャドウマップにレンダリング中に、オブジェクトは、その法線に沿って少し織り込むことができます。それがシャドウを有効にしているときこれらの値は ライトBiasNORMAL Bias プロパティーで設定されています。

バイアス値をあまり高く設定しないでください。しかし、影を投影するオブジェクトの近くにある影の領域で、時々誤って照らすことがあり、この効果は、“ピーター・パニング”として知られています。(つながりのない影がオブジェクトをピーターパンのように地面の上を飛んでいるように見せる、ということです)。

あまりにも高バイアスな値は影をオブジェクトから離してしまうことになる
あまりにも高バイアスな値は影をオブジェクトから“離してしまう”ことになる

同様に、ノーマル・バイアス値をあまり高く設定しないでください。また、影の形は、実際のオブジェクトより細くなります。

高すぎるノーマルバイアス値は、シャドウの形をとても薄くさせます
高すぎるノーマルバイアス値は、シャドウの形をとても薄くさせます

光のバイアス値は、シャドウ・アクネやピーターパニングいずれもが発生しないように微調整が必要な場合があります。計算するよりも目測で値をとる方が簡単です。

クッキー
ディレクショナルライトの影