Language:
Page Info
Engine Version:

Stationary lights (固定ライト)

Stationary Lights (固定ライト) は一ヶ所に固定されるライトですが、ライトの輝度や色などは変更することが可能です。ゲームプレイ中は絶対に変更ができない Static Light (静的ライト) とはこの部分で大きく異なります。ただし、ランタイム時に輝度を変更した場合は、直接光のみに影響するので留意してください。間接 (反射) 光はライトマスに事前計算されるため、変更しません。

Stationary light (固定ライト) を 3 種類の Mobility プロパティで比較すると、品質は最も良く、可変性は 2 番目、パフォーマンス負荷も 2 番目になります。

Stationary Lights (固定ライト) から放出する間接光やシャドウイングは、すべてライトマップ内に格納されます。直接光はシャドウマップ内に格納されます。これらのライトは Distance Field Shadow を利用します。つまり、シャドウは Lit (ライティング有り) オブジェクトのかなり低いライトマップ解像度からくっきりとした状態を保ちます。

直接ライティング

Stationary Light (固定ライト) の直接ライティングは、ディファード シェーディングを使用して動的にレンダリングされます。Light 関数または IES プロファイルと一緒に使用することにより、 ランタイム時に輝度と色の変更を可能にします。デリゲートタイプの宣言をしたり、 移動ライト同様の高品質な解析的スペキュラになります。直接ライティングは、 ライトの Visible プロパティを修正することによって、直接ライティングをゲームで表示したり非表示にすることができます。

DirectLighting.png

Stationary light (固定ライト) からの直接ライティング

直接シャドウイング

光源をリアルタイムにシャドウイングすると、パフォーマンス負荷が高くなります。シャドウのある完全に動的なライトは、 シャドウ無しの動的ライトよりもレンダリングに 20 倍の負荷がかかっても珍しくはありません。従って、 Stationary light (固定ライト) は、ある制限を伴って、静的オブジェクトに対し静的シャドウイングのみを表現することができます。

静的シャドウイング

不透明

Lightmass は Stationary light (固定ライト) に対し ディスタンス フィールド シャドウマップ を生成します。ディスタンス フィールド シャドウマップにより、 低解像度でもシャドウ変遷を非常に正確に、しかもランタイム負荷をほとんどかけずに行うことができます。ライトマップ同様に、 ディスタンス フィールド シャドウマップは、 静的ライティングを使用した全ての スタティック メッシュ 上に独自にアンラップされた UV を必要とします。

DistanceFieldShadows.png

ディスタンス フィールド シャドウを使用した スタティックメッシュ アクタ の正確なシャドウ

ライティングは、ディスタンス フィールド シャドウを表示するようにビルドしなくてはいけません。 そうでない場合、動的シャドウのシーン全体がプレビューされてしまいます。

ライトは、シャドウマップ テクスチャの異なるチャンネルへの割り当てが必要なため、 4 つ以下の Stationary light (固定ライト) がオーバーラップした場合のみ、静的シャドウを表現することができます。これはグラフの着色問題です。 トポロジーの都合上、オーバーラップに使用できる Stationary light (固定ライト) は通常 4 以下になります。シャドウイングはオーバーラップ テストに影響を与えませんので、 太陽の光は、地下領域であっても置かれているレベル全体からのチャンネルを必要とします。 チャンネルが制限に達した後で Stationary light (固定ライト) を追加すると、 シーン全体で動的シャドウを使うことになり、 パフォーマンス負荷は非常に高くなります。オーバーラップを可視化するには StationaryLightOverlap ビューモードを使用します。 これはライトを修正すると動的に更新されます。チャンネルの割り当てが不可の時は、ライトのアイコンは赤い X に変更します。

OverlapError.png

1 つ余分なオーバーラップライトを表示した [StationaryLightOverlap] ビューモードです。スポットライト の後ろにある 3 つのライトに注目してください。左と中央のライトの半径は スポットライトの 半径にオーバーラップしているように見えますが、右のライトはそうではありません。

透過

透過も Stationary light (固定ライト) で負荷をかけずにシャドウイングを受け取ります。Lightmass は、ランタイム時に透過に適用される静的ジオメトリからシャドウ深度マップを事前計算します。このシャドウイングの形式は非常に粗く、シャドウイングのキャプチャはメートル単位でのみ行います。

Unshadowed Translucency

Translucency recieving static shadowing form a Diretional Light

静的シャドウマップの解像度は BaseLightmass.ini の StaticShadowDepthMapTransitionSampleDistanceX と StaticShadowDepthMapTransitionSampleDistanceY で制御されます。デフォルト設定は 100、つまりメーターにつき 1 テクセルです。

動的シャドウイング

(可動性を [Movable (ムーバブル)] に設定した StaticMeshComponentsSkeletalMeshComponents などの) 動的オブジェクトは、ディスタンス フィールド シャドウマップから ワールドの静的シャドウイングへ統合しなくてはいけません。これは Per Object シャドウと一緒に行います。可動なオブジェクトはそれぞれ、Stationary light (固定ライト) から 2 つの動的シャドウを作成します。 オブジェクト上に静的ワールドキャストを処理するシャドウと ワールド上にオブジェクトキャストを処理するシャドウです。この設定にすると、Stationary light (固定ライト) に対するシャドウイングの負荷は、 影響を及ぼす動的オブジェクトのみとなります。つまり、動的オブジェクトの数によって、 負荷は最小から膨大な範囲で変動します。動的オブジェクトがある程度存在する場合、 Moveble Light (可動ライト) を代用するとより効果的です。

以下のシーンの球はすべて可動です。これらは静的ワールドからシャドウを受け取り、独自のシャドウをキャストします。 後にディスタンス フィールド シャドウと融合します。それぞれの可動コンポーネントに対する Per Object の シャドウ視錘台も表示されます。

DynamicObjectShadowFrustums.png

可動コンポーネントで使用される Per Object シャドウは、シャドウマップをオブジェクトの結合に適用するので、結合が正確になります。スケルタルメッシュの場合、物理アセットが必要ということになります。パーティクル システムの場合、バウンディング ボックスはすべてのプロパティが含める大きさでなくてはなりません。

指向性ライト動的シャドウイング

指向性固定ライト は、静的シャドウイングと同時に カスケード シャドウマップ を通じてシーン全体のシャドウをサポートする 特別なライトです。アニメートされたフォリッジがたくさんレベルに存在する時など便利な機能です。 広範囲に渡る複数のカスケードに負荷をかけずに プレイヤーの周辺に動くシャドウを付けたい場合などです。変遷の様子が分からないように、 動的シャドウは距離を移動するにつれ静的シャドウへフェードインします。この設定は、 DirectionalLightStationaryDynamic Shadow Distance StationaryLight をフェードを発生させたい範囲に変更するだけです。

可動コンポーネントは、指向性ライト上でカスケード シャドウマップを使っても、PerObject シャドウを作成します。このビヘイビアは動的シャドウ距離が短いと便利ですが、距離が長いと不要な負荷が生じてしまいます。PerObject を無効にしてパフォーマンスを優先するには、ライトの Use Inset Shadows For Movable Objects を無効にします。

間接ライティング

Stationary light (固定ライト) は、Static light (静的ライト) と同様に、間接ライティングをライトマップへ格納します。間接ライティングは、 直接ライティングのようにランタイム時に輝度と色を修正することはできません。つまり、 [Visible (表示)] にチェックがなくても、ライティングのビルド時に直接ライティングがライトマップに配置されます。 ライト上の IndirectLightingIntensity は、ライティングのビルド時に任意のライトからの間接ライティングをスケーリングまたは無効にする際に使用します。

ただし、 IndirectLightingIntensity というポストプロセス ボリューム設定を使えば、全てのライトにライトマップの影響をスケールすることが可能であり、それはブループリントのランタイム時に変更することができます。

Stationary Lights (固定ライト) のエリア シャドウの使用方法

アンリアル エンジンの 4.9 以降では、指向性固定ライトの [Lightmass (ライトマス)] オプションの中に [Use Area Shadows for Stationary Lights (固定ライトにエリア シャドウを使用)] というシャドウイングのオプションが新しく付きました。

Area_Shadows_Options.png

[Use Area Shadows for Stationary Lights (固定ライトにエリア シャドウを使用)] オプションを有効にするには、まずシーンの 指向性ライト を選択して、[Mobility (可動性)][Stationary (固定)] になっていることを確認してください。 次に、指向性ライトの [Lightmass (ライトマス)] セクションで、[Use Area Shadows for Stationary Lights (固定ライトにエリア シャドウを使用)] オプションの横にあるボックスをクリックします。 [Use Area Shadows for Stationary Lights (固定ライトにエリア シャドウを使用)] オプションを有効にすると、事前計算されたシャドウマップに対して Stationary Light (固定ライト) がエリア シャドウを使います。 エリア シャドウとは、シャドウ キャスターから離れるほど柔らかくなるシャドウのことです。 以下の図を見ると、2 種類のシャドウイングの方法の違いが分かります。

Area Shadows Enabled

Area Shadows Disabled

エリア シャドウは Stationary Light (固定ライト) のみに機能するので、シャドウの品質と鮮明度を同じにするためには、ライトマップ解像度を高くしなければならないオブジェクトもあることにご注意ください。