Blender からのオブジェクトのインポート
Directional シャドウ詳細

Unityでのシャドウ

Unity Proによりどのようなライトでもリアルタイムの Shadow をつけることが出来ます。オブジェクトは互いに,また自分自身にも(“self shadowing”)シャドウを投影することが出来ます。方向性,スポット,ポイント,のライトでシャドウはサポートされます。

シャドウを使用するときはライト 上で Hard Shadows または Soft Shadows を選ぶだけです。しかし最適化されたシャドウ品質とパフォーマンスが必要な場合はいくつか追加での考慮点があります。

Shadow Troubleshooting のページに良くあるシャドウの問題についての解決策が含まれます。

興味深いことに,最も良いシャドウはリアルタイムでないものです。ゲームのレベルにおける物体とライティングが静的である場合は必ずUnityで ライトマップ を事前計算します。シャドウをオフラインで算出することで品質やパフォーマンスでより良い結果が得られます。 ’’ではリアルタイムが必要な場合に移ります。"

シャドウ品質の微調整

Unityはいわゆる シャドウマップ を使用してシャドウを表示します。シャドウマッピングはテクスチャベースのアプローチであり, “シャドウテクスチャ” ライトからシーンに投影されるとして考えることが出来ます。したがって通常のテクスチャのようにシャドウマッピングの品質は二つの要素に強く依存します:

  • シャドウマップのresolution (サイズ) 。シャドウマップが大きいほどシャドウの品質が上がります
  • シャドウの Filtering 。ハードシャドウは最も近いシャドウマップのピクセルを使用します。ソフトシャドウは複数のシャドウマップのピクセルの平均をとり,よりスムーズなシャドウとなります。しかしソフトシャドウはレンダリング負荷がより高価です。

異なる Light の種類により異なるアルゴリズムが使用されます。

  • 方向性ライトでのシャドウ品質にとって決定的な設定は Shadow Distance および Shadow Cascades であり, Quality Settings に含まれてます。Shadow Resolution もまた,考慮されますが,方向性ライトで最初に改善すべきはシャドウの距離です。方向性ライトのシャドウに関する詳細は 指向性シャドウの詳細 で見つけることが出来ます。
  • スポットおよびポイントライトについては,Shadow Resolution によりシャドウマップのサイズが決まります。それに加えて,スクリーンのごく一部をカバーするライトでは,より小さなシャドウマップ解像度が使用されます。

マップサイズ算出方法の詳細についてはShadow Size Details を参照下さい。

シャドウのパフォーマンス

リアルタイムシャドウはかなりパフォーマンス消費があるため節約を意識しながら使用することが大切です。各ライトがシャドウをレンダリングするためには投影するものもシャドウマップにレンダリングして,次にシャドウを投影されるもののシャドウマップでレンダリングが行われます。これによりシャドウを投影するライトは Pixel lights よりも高価になりますが,コンピュータの進化はめざましいものがあります。

ソフトシャドウ のレンダリングはハードシャドウよりもさらに高価です。負荷は完全にグラフィックスカードにかかる(シェーダーだけ処理が長くなります)ので,ハードシャドウかソフトシャドウかによってメモリやCPUに影響はありません。

Quality Settings にはShadow Distance と呼ばれる設定があります。これはカメラのシャドウがどれだけ遠くまで描画されるかを示します。通常はカメラから500メートル以上離れたシャドウを計算して表示する意味はないので,ゲームでは出来る限り短いシャドウ距離にして下さい。

シャドウのハードウェア要件

ビルトインのシャドウはフラグメント プログラム(ピクセル シェーダー2.0)に対応したグラフィックス カードが必要です。対応しているグラフィックスカードは次のとおりです:

  • On Windows:
    • ATI Radeon 9500 and up, Radeon X series, Radeon HD series.
    • NVIDIA GeForce 6xxx, 7xxx, 8xxx, 9xxx, GeForce GT, GTX series.
    • Intel GMA X3000 (965) and up.
  • On Mac OS X:
    • Mac OS X 10.6 (Snow Leopard) or later.
    • ATI Radeon 9500 and up, Radeon X, Radeon HD series.
    • NVIDIA GeForce FX, 6xxx, 7xxx, 8xxx, 9xxx, GT, GTX series.
    • Intel GMA 950 and later.
      • Soft shadows are disabled because of driver bugs (hard shadows will be used instead).
  • モバイル (iOS & Android):
    • OpenGL ES 2.0 or later
    • GL_OES_depth_texture support. Most notably, Tegra-based Android devices do not have it, so shadows are not supported there.

ヒント

  • Forward rendering パス は,方向性ライトが投影するライトはひとつのみ対応しています。[RenderTech-VertexLit | Vertex Lit]] レンダリングパスはリアルタイムシャドウに対応していません。
  • 頂点ライトはシャドウが出来ません。
  • 頂点ライトのマテリアルはシャドウを投影されません(他への投影はします)。
  • 透明なオブジェクトはシャドウを投影しません/されません。透明カットアウトのオブジェクトはシャドウを投影します/されます。
  • On mobile platforms (OpenGL ES 2.0/3.0) in deferred rendering path, all objects that are rendered using the forward rendering path do not receive realtime shadows.
Blender からのオブジェクトのインポート
Directional シャドウ詳細