教育事業部の事業内容 演劇、音楽のタレント並びに作詞家、作曲家、編曲家等アーティストの育成及びマネージメント、コンピュータ教室の経営等を行っています。
教育事業 パルテア

〜Unity Graphics Lighting シャドウのトラブルシューティング〜 #ゲームプログラミング #unity3d #unity3dgames #graphics #lighting

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

影のパフォーマンス

リアルタイム シャドウにはレンダリングのオーバーヘッドが非常に高くなります。影を落とす可能性のあるゲームオブジェクトは最初にシャドウ マップにレンダリングする必要があり、その後、そのマップを使用して影を受ける可能性のあるオブジェクトがレンダリングされます。

ソフト シャドウはハード シャドウよりもレンダリングのオーバーヘッドが大きくなりますが、これは GPU に影響するだけで、CPU の余分な作業はあまり発生しません。

複雑なジオメトリのリアルタイム シャドウのレンダリングに法外なコストがかかる場合は、シャドウをキャストするために低 LOD メッシュやプリミティブの使用を検討してください。

これがリソースを大量に消費する場合は、キャラクターの下の単純なメッシュまたはクワッドに適用されるぼかしたテクスチャを使用してシャドウを偽装したり、カスタム シェーダーを使用してブロブ シャドウを作成したりできます。

影のニキビ

ライトで直接照らされた表面は、部分的に影になって見えることがあります。これは、シャドウ マップで指定された距離に正確に存在するはずのピクセルが、さらに遠くにあるものとして計算される場合があるためです (これは、シャドウ フィルタリングまたはシャドウ マップの低解像度イメージの使用の結果です)。その結果、ピクセルが点灯する必要があるときに影の中にピクセルの任意のパターンが表示され、「シャドウ アクネ」として知られる視覚効果が得られます。

ライトバイアス設定

影のニキビを防ぐために、光のバイアス設定を調整できます。

シャドウ マップの距離にバイアスを追加して、境界線上のピクセルが比較に合格するようにすることも、法線に沿ってジオメトリを少し挿入することもできます。

組み込みのレンダー パイプラインでは、シャドウが有効になっているときに、ライト インスペクター ウィンドウのバイアス プロパティと法線バイアス プロパティを使用してこれらの値を設定できます。

ゲームオブジェクトが投影する影の周囲の領域が誤って照明される場合があるため、バイアス値を高く設定しすぎないでください。これにより、シャドウが切断され、ゲームオブジェクトが地面の上を飛んでいるように見えます。

同様に、Normal Bias の値を高く設定しすぎると、ゲームオブジェクトに対してシャドウが狭くなりすぎます。

状況によっては、法線バイアスにより、近くのジオメトリから影になるはずの領域に光がにじみ出る、「光のにじみ」と呼ばれる望ましくない効果が発生することがあります。解決策として考えられるのは、ゲームオブジェクトのメッシュ レンダラーを開き、キャスト シャドウプロパティを Two Sided に変更することです。これは場合によっては役に立ちますが、シーンをレンダリングするときにリソースをより多く消費し、パフォーマンスのオーバーヘッドが増加する可能性があります。

望ましくない効果が発生しないように、ライトのバイアス値を調整する必要がある場合があります。一般に、正しい値を計算するよりも目で判断する方が簡単です。

シャドウパンケーキ

シャドウニキビをさらに防ぐために、シャドウパンケーキとして知られる技術を使用しています。このアイデアは、ライトの方向に沿ってシャドウ マップをレンダリングするときに使用されるライト空間の範囲を縮小することです。これにより、シャドウ マップの精度が向上し、シャドウ アクネが減少します。

上の図では次のようになります。

水色の円は影のキャスターを表します
濃い青色の長方形は元の光空間を表します
緑色の線は、最適化されたニアプレーンを表します (視錐台に表示されないシャドウキャスターを除く)

これらのシャドウ キャスターを最適化された空間 (頂点シェーダー内) のニア クリップ プレーンにクランプします。これは一般にうまく機能しますが、ニア クリップ プレーンを横切る非常に大きな三角形に対してアーティファクトが作成される可能性があることに注意してください。

この場合、青い三角形の 1 つの頂点だけがニア クリップ プレーンの後ろにあり、それにクランプされます。ただし、これにより三角形の形状が変化し、不正確なシャドウイングが作成される可能性があります。

この問題を回避するには、[品質] ウィンドウから [シャドウ ニア プレーン オフセット] プロパティを調整します。これにより、ニア クリップ プレーンが引き戻されます。ただし、この値を非常に高く設定すると、シャドウ マップがライトの方向でカバーする必要がある範囲が広がるため、最終的にシャドウ アクネが発生します。あるいは、問題のある影を投影する三角形をテッセレーションすることもできます。

影が出ない

1 つ以上のオブジェクトが影を落としていないことがわかった場合は、次の点を確認する必要があります。

リアルタイム シャドウは、[品質] ウィンドウで完全に無効にすることができます。正しい品質レベルが有効になっていること、およびその設定でシャドウがオンになっていることを確認してください。

シーン内のすべてのメッシュ レンダラーは、受信シャドウとキャスト シャドウが正しく設定された状態でセットアップする必要があります。どちらもデフォルトで有効になっていますが、意図せずに無効になっていないかを確認してください。

不透明なオブジェクトのみがシャドウをキャストおよび受け取ります。そのため、組み込みの透明シェーダまたはパーティクル シェーダを使用するオブジェクトは、キャストも受け取りも行いません。一般に、フェンスや植生などの「ギャップ」のあるオブジェクトの代わりに、透明カットアウト シェーダを使用できます。カスタム シェーダはピクセル照明であり、ジオメトリ レンダー キューを使用する必要があります。

VertexLit シェーダを使用するオブジェクトはシャドウを受け取ることはできませんが、キャストすることはできます。

Unity は、「Unlit」タイプのシェーダーを持つマテリアルを含むゲームオブジェクトのシャドウを計算できません。 Unity は、ライティングをサポートするシェーダーを備えたマテリアルの影のみを計算できます。

組み込みのレンダー パイプラインでは、フォワード レンダリング パスを使用して、一部のシェーダーは最も明るい指向性ライトのみが影を落とすことを許可します (特に、これは Unity の 4.x バージョンの組み込みシェーダーで発生します)。複数の影を落とすライトが必要な場合は、代わりに Deferred Shading レンダリング パスを使用する必要があります。

fullforwardshadows サーフェス シェーダ ディレクティブを使用して、独自のシェーダが「フル シャドウ」をサポートできるようにすることができます。

    unity

  • 日時:// ~ //
  • 名称:
  • 場所:
  • 料金:¥0 (消費税込)