シャドウの設定と管理はそれほど難しくはありません。つまるところ、光の当たらない箇所を自然に見えるようにするだけです。ただし、リアルタイムでレンダリングされたゲーム内のシャドウには、独自の技術的な問題と制限事項があります。
Stingray では、動的なライトからシャドウをシミュレートするために「シャドウ マップ」を使用します。シャドウ マップの背景にある概念とは、シャドウを投影するそれぞれのライトが、シーン内でそのライト自身の視点に「深度マップ」を作成する、というものです。この深度マップには、光源からそのイルミネーションが到達するシーン内のすべての場所までの距離が記録されます。レンダラーがシーン内のオブジェクトをカメラの視点から描画するとき、各サーフェスをライトのローカル空間に投影します。その後、ライトの深度マップに対してサーフェスの位置をチェックし、そのサーフェスが光源から遮蔽されているかどうかを決定します。
シーン内の最初のディレクショナル ライト(通常は太陽を表す)には、「カスケード シャドウ マップ」と呼ばれる、特殊なタイプのシャドウ マップがあります。これは基本的に複数のシャドウ マップを組み合わせたもので、各シャドウ マップはカメラから異なる距離にあるシャドウを処理します。これにより、カメラに近い距離にあるオブジェクトは、カメラから遠いオブジェクトよりも細かいシャドウの詳細を示すことができます。
注: レベルの最初のディレクショナル ライトのみがシャドウを投影することができます。
ゲームで使用する上で、シャドウ マッピングに関する技術的な詳細を理解する必要はありません。詳細を確認する場合は、Wikipedia またはこのチュートリアルで詳細を読むことができます。
ただし、シャドウを投影するライトが追加されるたびに、各フレームでのゲーム ワールドのレンダリングにパフォーマンスのオーバーヘッドが追加されることを理解する必要があります。したがって、必要以上にシャドウを投影するライトを作成しないことをお勧めします。
Stingray には、どのライトとオブジェクトがシャドウを投影するかをコントロールし、シャドウ マッピングの技術的パラメータの設定に使用できるいくつかの追加パラメータがあります。次のセクションでは、これらの方法について説明します。
各光源には、それぞれに Cast Shadows プロパティがあり、ライトの直接イルミネーションがシャドウを生成するかどうかを決定します。このオプションが無効の場合、サーフェスが別のオブジェクトによって遮断されている場合でも、ライトは影響を与えるボリューム内にあるすべてのサーフェスを照らします。「光源のプロパティ」を参照してください。
ユニット内の各メッシュには、それぞれに Cast Shadows オプションがあり、ライトがそのメッシュ上を照らしたときに、メッシュがシャドウを投影するかどうかを決定します。このプロパティを設定するは、Unit Editor 内でユニットを開き、メッシュを選択し、Unit Editor の Properties パネルで該当する設定を見つけます。
オブジェクトがシャドウを投影するようにするには、ライトとオブジェクトの両方で Cast Shadows プロパティを有効にする必要があります。
シェーディング環境内のグローバル シャドウ品質パラメータは、最大シャドウ距離とシャドウ エッジの鮮明さをコントロールします。「シェーディング環境のプロパティ」を参照してください。
各ライトには設定可能な Shadow Bias 設定があり、シーンに適用すると、シャドウ マップを短い距離でオフセットします。この値を調整すると、シャドウ マップで発生することがある、いくつかの一般的なアーティファクトを修正できます。
ちらつき、縞模様(オレンジ色の立方体上の模様)、または「シャドウ アクネ」(下に示す床上のモアレ パターンなど)が発生したときに、この値を増やすと効果的な場合があります。
「ピーター パン」アーティファクトが発生した場合に、この値を小さくすると効果的な場合があります。このアーティファクトでは、オブジェクトのベースからオブジェクトのシャドウがオフセットまたは分断されたように見えます。このため、オブジェクトがサーフェスから上に浮いているように見えます。
settings.ini ファイルは、シャドウ マップのテクスチャ サイズとフィルタ品質をコントロールする、いくつかのレンダリング設定を公開します。シャドウの品質に対して、パフォーマンスとメモリ使用量のバランスを調整するために、これらのパラメータの既定値を微調整できます。
「Stingray エンジンの settings.ini ファイルのリファレンス」を参照してください。