このページではDirectional ライトによる shadows について詳しく説明します。
注意: モバイルプラットフォームにおけるDirectionalライトによるリアルタイムシャドウは いつも 1つのシャドウカスケードを使い,かつ Hard Shadows です。
Directional ライトは多くの場合,屋外のゲームで主光線 (日光や月光) として使用されます。 特に一人称視点および三人称視点のゲームで,表示距離が大きい場合があり,シャドウを微調整して,状況に対して,画質とパフォーマンスの最適なバランスを得る必要がある場合が多くあります。
三人称視点のゲームで見た目のよい影の作成から始めましょう。
ここでは,表示距離は,およそ 50 ゲーム単位であるため,_Shadow Distance_が Quality Settings で 50 に設定しています。 また, Shadow Cascades を 4, Shadow Resolution を High,ライトとして, Soft Shadows を使用しています。
U同じライト設定を使用して, Shadow Type から Hard Shadows に切り替える場合,明るいエリアから影のエリアへの移行は Hard で,100% 影,または100% 明るいかのいずれかになります。 Hard shadows は,高速でレンダリングされますが,見た目が現実的でなくなります。
Directional ライトの場合,Unity はいわゆる Cascaded Shadow Maps (別名 Parallel Split Shadow Maps )を使用できます。これは,特に長い表示距離の場合に,非常に質が優れた影を提供します。 カスケード シャドウは,表示エリアを徐々に大きい部分に分割し,それぞれで同じサイズのシャドウを使用することで,機能します。 この結果,ビューワに近いオブジェクトは,遠くにあるオブジェクトよりもシャドウ マップ ピクセルが多くなります。
下の画像では,シャドウ ピクセルがよりよく見えるようになるため,Hard shadows を使用します。
カスケード シャドウ マップを使用していないため,シャドウ ディスタンス全体 (この場合は,まだ 50 単位) がシャドウ テクスチャによって均一に覆われる必要があります。 ハード シャドウは,カスケードなしで次のように見えます。
シャドウ テクスチャのピクセルは,どこでの同じサイズで,遠くにあると見た目はよいですが,近くに来るに連れ,画質は下がります。 シャドウ マップは,表示エリア全体を覆い,視覚化すると,次のように見えます。
2 つのシャドウ カスケードが使用されると,シャドウ ディスタンス全体がビューワ近くだと小さな塊に,遠くだと大きな塊に分割されます。 カスケードが 2 つの場合,ハード シャドウは次のように見えます。
パフォーマンスと引き換えに,近づくにつれ,シャドウの解像度が上がります。
最後に,4 つのカスケードを使用すると,シャドウ ディスタンスは,次第に 4 つの大きな部分に分割されます。 カスケードが 4 つの場合,ハード シャドウは次のように見えます。
Shadow Distance は,Directional ライトのシャドウの画質およびパフォーマンスの両方にとって非常に重要です。 シャドウ カスケード カウントの数同様,シャドウ ディスタンスは,Quality Settings で設定でき,少ないハードウェアのパフォーマンスで,簡単にシャドウを縮小できます。
Shadow Distance の端でシャドウがフェードアウトし,そこから先では,オブジェクトにシャドウは投影されません。 ほとんどの場合,ゲーム内の一定の距離を超えたシャドウは目立たなくなります!
シャドウ カスケードがない場合,20 単位に設定されたハード シャドウとシャドウ ディスタンスは,下の写真のようになります。 シャドウは遠くではフェードアウトしますが,同時にシャドウの画質はカスケードなしで,距離が 50 単位の場合よりもはるかに上がります。
一方,シャドウ ディスタンスが高すぎると,シャドウの見た目は完全に悪くなります。 距離を 100 に設定すると,パフォーマンスと画質の両方が下がり,意味がなくなります。50 メートルより遠くなると,シーン内にオブジェクトはありません。
カスケードのあるシャドウ マップは距離と共によりよく拡大します。 例えば,カメラの前で 300 単位をカバーする 4 つのカスケード ソフト シャドウは下の写真のように見えます。 このページの上にある写真よりも悪くなりますが,シャドーイング距離を 6x に増やすと,あまり悪くはなりません (当然,このシーンでは,シャドウ ディスタンスを高くしても意味はありません)。