Unityでのシャドウ
シャドウ トラブルシューティング

Directional シャドウ詳細

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

このページではDirectional ライトによる shadows について詳しく説明します。

注意: モバイルプラットフォームにおけるDirectionalライトによるリアルタイムシャドウは いつも 1つのシャドウカスケードを使い,かつ Hard Shadows です。

Directional ライトは多くの場合,屋外のゲームで主光線 (日光や月光) として使用されます。 特に一人称視点および三人称視点のゲームで,表示距離が大きい場合があり,シャドウを微調整して,状況に対して,画質とパフォーマンスの最適なバランスを得る必要がある場合が多くあります。

三人称視点のゲームで見た目のよい影の作成から始めましょう。

ここの影はかなり見た目がいいです!
ここの影はかなり見た目がいいです!

ここでは,表示距離は,およそ 50 ゲーム単位であるため,_Shadow Distance_が Quality Settings で 50 に設定しています。 また, Shadow Cascades を 4, Shadow Resolution を High,ライトとして, Soft Shadows を使用しています。

Hard と Soft shadows 比較

U同じライト設定を使用して, Shadow Type から Hard Shadows に切り替える場合,明るいエリアから影のエリアへの移行は Hard で,100% 影,または100% 明るいかのいずれかになります。 Hard shadows は,高速でレンダリングされますが,見た目が現実的でなくなります。

距離が 50 で,4 つのカスケードのある Hard shadows
距離が 50 で,4 つのカスケードのある Hard shadows

Shadow Cascade count

Directional ライトの場合,Unity はいわゆる Cascaded Shadow Maps (別名 Parallel Split Shadow Maps )を使用できます。これは,特に長い表示距離の場合に,非常に質が優れた影を提供します。 カスケード シャドウは,表示エリアを徐々に大きい部分に分割し,それぞれで同じサイズのシャドウを使用することで,機能します。 この結果,ビューワに近いオブジェクトは,遠くにあるオブジェクトよりもシャドウ マップ ピクセルが多くなります。

下の画像では,シャドウ ピクセルがよりよく見えるようになるため,Hard shadows を使用します。

カスケード シャドウ マップを使用していないため,シャドウ ディスタンス全体 (この場合は,まだ 50 単位) がシャドウ テクスチャによって均一に覆われる必要があります。 ハード シャドウは,カスケードなしで次のように見えます。

距離が 50 で,カスケードなしのハード シャドウ。
距離が 50 で,カスケードなしのハード シャドウ。

シャドウ テクスチャのピクセルは,どこでの同じサイズで,遠くにあると見た目はよいですが,近くに来るに連れ,画質は下がります。 シャドウ マップは,表示エリア全体を覆い,視覚化すると,次のように見えます。

カスケードがないと,シャドウ テクスチャが表示エリアを均一に覆います。
カスケードがないと,シャドウ テクスチャが表示エリアを均一に覆います。

2 つのシャドウ カスケードが使用されると,シャドウ ディスタンス全体がビューワ近くだと小さな塊に,遠くだと大きな塊に分割されます。 カスケードが 2 つの場合,ハード シャドウは次のように見えます。

距離が 50 で,2 つのカスケードのあるハード シャドウ。
距離が 50 で,2 つのカスケードのあるハード シャドウ。

パフォーマンスと引き換えに,近づくにつれ,シャドウの解像度が上がります。

カスケードが 2 つの場合,2 つのシャドウ テクスチャは,表示エリアの異なるサイズの部分を覆います。
カスケードが 2 つの場合,2 つのシャドウ テクスチャは,表示エリアの異なるサイズの部分を覆います。

最後に,4 つのカスケードを使用すると,シャドウ ディスタンスは,次第に 4 つの大きな部分に分割されます。 カスケードが 4 つの場合,ハード シャドウは次のように見えます。

距離が 50 で,4 つのカスケードのあるハード シャドウ。 これはすでに見ました!
距離が 50 で,4 つのカスケードのあるハード シャドウ。 これはすでに見ました!
カスケードが 4 つの場合,4 つのシャドウ テクスチャは,表示エリアの異なるサイズの部分を覆います。
カスケードが 4 つの場合,4 つのシャドウ テクスチャは,表示エリアの異なるサイズの部分を覆います。

Shadow Distance は,Directional ライトのシャドウの画質およびパフォーマンスの両方にとって非常に重要です。 シャドウ カスケード カウントの数同様,シャドウ ディスタンスは,Quality Settings で設定でき,少ないハードウェアのパフォーマンスで,簡単にシャドウを縮小できます。

Shadow Distance の端でシャドウがフェードアウトし,そこから先では,オブジェクトにシャドウは投影されません。 ほとんどの場合,ゲーム内の一定の距離を超えたシャドウは目立たなくなります!

シャドウ カスケードがない場合,20 単位に設定されたハード シャドウとシャドウ ディスタンスは,下の写真のようになります。 シャドウは遠くではフェードアウトしますが,同時にシャドウの画質はカスケードなしで,距離が 50 単位の場合よりもはるかに上がります。

距離が 20 で,カスケードなしのハード シャドウ。
距離が 20 で,カスケードなしのハード シャドウ。

一方,シャドウ ディスタンスが高すぎると,シャドウの見た目は完全に悪くなります。 距離を 100 に設定すると,パフォーマンスと画質の両方が下がり,意味がなくなります。50 メートルより遠くなると,シーン内にオブジェクトはありません。

距離が 100 で,カスケードなしのハード シャドウ。 痛い!
距離が 100 で,カスケードなしのハード シャドウ。 痛い!

カスケードのあるシャドウ マップは距離と共によりよく拡大します。 例えば,カメラの前で 300 単位をカバーする 4 つのカスケード ソフト シャドウは下の写真のように見えます。 このページの上にある写真よりも悪くなりますが,シャドーイング距離を 6x に増やすと,あまり悪くはなりません (当然,このシーンでは,シャドウ ディスタンスを高くしても意味はありません)。

距離が 300 で,4 つのカスケードのあるソフト シャドウ。
距離が 300 で,4 つのカスケードのあるソフト シャドウ。
Unityでのシャドウ
シャドウ トラブルシューティング