スカイ ライトはレベルの遠い部分をキャプチャし、それをライトとしてシーンに適用します。つまり、空の外観とそのライティング/反射が一致することを意味しています。 これは、空が大気圏またはスカイボックスの一番上の層状の雲、あるいは遠くの山々とつながっている場合でも同様です。使用するキューブマップを手作業で指定することもできます。
シーン キャプチャ
スカイ ライトでは、特定の状況下でのみシーンがキャプチャされます。
- Static Sky Light (静的なスカイライト) は、ライティングのビルド時に自動的に更新されます。
-
*Stationary Sky Light (固定スカイ ライト) または Movable Sky Lights (ムーバブル スカイ ライト) の場合は、リアルタイムキャプチャ が有効に設定されていない限り、ロード時に一度更新され、その後は Recapture (再キャプチャ) の呼び出し時にのみ更新されます。いずれも [Details (詳細)] パネルからアクセスできます。また、Recapture はゲーム内のブループリントを介して呼び出すこともできます。
スカイボックスが使用しているテクスチャを変更した場合、更新は自動的には行われないため、上記のいずれかの方法で更新する必要があります。
スカイ ライトはローカル シャドウイングをサポートしており、室内エリアが空からのライトで照らされないようにできるため、空のライトを表現するためにはアンビエント キューブマップではなく、スカイ ライトを使用することを推奨します。
可動性
他の ライト タイプ と同様に、スカイ ライトの 可動性 は次のいずれかに設定できます。
可動性 | 説明 |
---|---|
Static (静的) | ゲーム内でライティングを変更することはできません。最速のレンダリング方法であり、ベイクされたライティングが可能になります。 |
Stationary (固定) | ライティングのビルド中に、静的なジオメトリのみからシャドウイングとライト バウンスがキャプチャされます。他のすべてのライティングは動的になります。この設定により、ゲーム中にライトのカラー、強度、キューブマップを変更することが可能となりますが、移動および部分的なライトのベイクはできません。 |
Movable (ムーバブル) | 必要に応じて、ゲーム内でのライティングの移動と変更が可能です。 |
Static Sky Light (静的スカイライト)
Static (静的) に設定されているスカイ ライトは、レベル内の静的オブジェクト用のライトマップに完全にベイクされるため、負荷はまったくかかりません。ライトのプロパティを変更した場合、 当該レベルのライティングを再ビルドするまで、変更は反映されません。
Static Sky Light を使用する場合は、可動性が Static または Stationary に設定された、レベル内のアクタとライトのみがキャプチャされ、ライティングに使用されます。さらに、Static Sky Light でキャプチャされるのはマテリアルのエミッシブ効果のみです。 これはフィードバック ループを回避するためです。この理由から、すべてのスカイボックスに、[Unlit (ライティング無し)] に設定されたマテリアルが含まれることを確認してください。
Stationary Skylight (固定スカイライト)
Stationary Mobility が設定されているスカイライトは、Lightmass からベイクされたシャドウイングを取得します。レベル内に Stationary Sky Light を配置したら、ベイクされたシャドウイングを取得するために、ライティングを一度再ビルドする必要があります。それ以降は、スカイ ライトを再ビルドなしに好きなだけ変更することができます。Lightmass によってベイクされたスカイ ライト シャドウイングには、ベント法線 と呼ばれる指向性オクルージョン情報が格納されています。
Static または Stationary Mobility に設定されているコンポーネントとライトのみがキャプチャされ、固定スカイ ライトを含むライティングに使用されます。
他のすべての Stationary Light と同様に、直接ライティングのカラーは ブループリント あるいは マチネ を介してランタイム時に変更することができます。ただし、間接ライティングはライトマップにベイクされるため、ランタイム時には変更できません。間接ライティングの量は IndirectLightingIntensity
で制御できます。
Movable Sky Light (可動スカイライト)
Movable に設定されたスカイライトは事前計算は一切使用しません。シーンをキャプチャするよう設定した場合、あらゆる可動性のコンポーネントとライトがキャプチャされます。
距離フィールド アンビエントオクルージョン
このプロパティを使用するには、[Project Settings (プロジェクト設定)] で メッシュ距離フィールド のオプションを有効にしておく必要があります。
Movable Sky Light のシャドウイングは、各剛体オブジェクト周辺で生成された符号付き距離フィールド ボリュームからの 距離フィールド アンビエント オクルージョン によって 提供されます。距離フィールド アンビエント オクルージョンは動的なシーンの変化に対応するため、剛体メッシュの移動や非表示が可能になり、オクルージョンにも影響を及ぼします。
詳細と使用例については、「ディスタンス フィールド アンビエント オクルージョンの使用方法」ページを参照してください。
事前計算された (Static または Stationary) Sky Light
ベイクされたライティングを Static または Stationary Sky Light で使う場合、ライティングとシャドウイングのデータはライトマップに格納されます。このセクションでは、 Lightmass でサポートされている機能の一部について説明します。
Static Sky Light の指向性の改善
Unreal Engine 4.18 より前のバージョンでは、Static Sky Light は三次の球面調和関数でライトマスで表現されていましたが、日の出や日没のディテールはキャプチャしていませんでした。 現バージョンでは、フィルタリングされたキューブマップを使ってより高い解像度をデフォルトで得られるようになりました。 さらにライトマスでは、Final Gather のレイの大きさに応じて適切な キューブマップ テクスチャの MIP を選択します。
このようなインタラクションの例については、[Engine Content] > [MapTemplates] > [Sky] から [SunsetAmbientCubemap] を参照してください。
明るさと色のバリエーションが多いスカイライトのキューブマップで遮蔽度がかなり高いシーンの場合にこの違いが顕著になります。
カメラ オブスキュラ
Static Sky Light の方向性が向上したため、開口部を十分に絞ることでピンホール カメラ エフェクト (カメラ オブスキュラ) を再現することができます。 開口部が小さくなるほど、スカイライトの指向性は高まります。
スカイライトのソース キューブマップ | 結果のライトビルド |
画像をクリックしてフルサイズ表示 | 画像をクリックしてフルサイズ表示 |
Stationary Sky Light のベント法線
固定スカイ ライトについては、ライトマスを使って、静的および固定ライティングが可動ライティングとは別にベイクされ、方向性に関する情報が ベント法線 に格納されます。これは テクセルから最もオクルードされていない環境光源への方向です。ほぼオクルードされた領域では、スカイ ライティングにサーフェス法線ではなく、この方向を使用します。これによってひび割れの品質が改善されます。
詳細は「ベント法線マップ」を参照してください。
複数回のライト バウンス
スカイライトからの間接ライトで複数回のバウンスを有効にするには、[World Settings] > [Lightmass] の [Num Sky Lighting Bounces (スカイ ライティングのバウンス回数)] を調整します。
スカイ ライトの複数バウンスによる効果を十分に表現するには、ほとんどの場合、マテリアルのディフューズ値を高く設定する必要があります。例えば、ディフューズ値が「.18」 (18% グレー) の場合、2 回目のスカイライトのバウンスは ライトが放射するエネルギーの「.18^3 = .006」しか寄与せず、 これはごくわずかなものです。ディフューズ値が「0.5」であると、2 回目のスカイライトのバウンスはライトが放射するエネルギーの 0.125 となり、より顕著なものになります。
バウンスを追加するごとに分散不可のビルド時間が増加するため、スウォーム分散 を使用していない場合は十分に注意してください。
リアルタイム キャプチャ
Real Time Capture (リアルタイム キャプチャ) モードでは動的でスペキュラな環境ライティングが提供されるため、シーン要素上でのリアルタイムの反射を含む、時間帯に応じた動的なシミュレーションが可能になります。
このモードは、スカイ ライトの可動性が [Stationary (固定)]、[Dynamic (ダイナミック)] に設定されており、使用するスカイ ライト コンポーネントの [Details (詳細)] パネルで [Real Time Capture (リアルタイム キャプチャ)] が有効になっている場合に使用できます
このモードでは、キャプチャした反射とシャドウイングに対して以下のコンポーネントをサポートしています。
- Sky Atmosphere
- Volumetric Clouds
- Height Fog
- IsSky とタグ付けされたライティングなしのマテリアルを含むスカイドーム メッシュ
次は、このモードを使用する際の追加の注意事項です。
- ボリュメトリック フォグはサポートされていません。
- メイン ビューでのメッシュのレンダリングを無効にすることで、リアルタイム キャプチャ モードでのみメッシュをレンダリングすることが可能です。
- 各アクタで Visible in Real Time Sky Captures が有効になっている場合のリアルタイム キャプチャの反射と比べて、メイン メニューには異なるスカイドーム メッシュを表示することができます。
- マテリアルの IsSky=True で複数のメッシュを使って天空をレンダリングする場合、深度の順序と交差を正しくするためにコマンド
r.SkyLight.RealTimeReflectionCapture.DepthBuffer 1
を設定することもできます。 - リアルタイム キャプチャ モードでは、Cloud Ambient Occlusion が有効に設定されている場合に、ボリュメトリック クラウドからのアンビエント シャドウイングをワールドにキャストすることができます。
- リアルタイム キャプチャ モードではすべての計算が GPU で処理されるため、RecaptureSky ブループリント ノードよりも速く、より効率的です。ゲームプレイの停止や遅延の原因となり得る CPU での処理は一切行われません。
- ボリュメトリック クラウドを使用している場合、パフォーマンスは使用しているクラウド マテリアルの複雑さに応じて大幅に異なります。ボリュメトリック クラウド コンポーネントの Reflection Sample Count Scale および Shadow Reflection Sample Count Scale の値を調整することで、シーン内の視覚的要素を重視しながら、パフォーマンスとのトレードオフを制御できます。
反射の品質
スカイ ライトによりキャプチャされる反射の品質は、Cubemap Resolution プロパティにより定義されます。このプロパティでは、2 の累乗値 (64、128、256 など) を使って、キャプチャされたシーンのテクスチャ解像度を指定します。
この値を高く設定することで品質は向上しますが、トレードオフとしてパフォーマンスが低下します。設定した値は、最も高い解像度のキューブマップ ミップ (テクスチャの LOD) に適用されます。
上記の例では、スクリーン スペース リフレクション (SSR:スクリーン スペース リフレクション) が無効になっていることに注意してください。反射は単にスカイ ライトの結果です。
タイム スライスの最適化
リアルタイム キャプチャ モードでは、フレームごとに完全なシーンの処理を実行するのではなく、タイム スライス というパフォーマンス最適化機能を活用して、キャプチャしたシーンをいくつかのフレームに分散します。この最適化機能によってフレームごとのコスト (負荷) が軽減され、フレームごとのリアルタイム キャプチャの完全処理にかかるコストが、一部のプラットフォームに対して過度に高くなることを回避できます。
例えば、スカイ (空) とボリュメトリック クラウド (雲) を含む 128x128x6 HDR キューブマップを使って PlayStation 4 上で実行したキャプチャは次のようになります (コストをミリ秒で測定):
- 128x128 キューブマップに対する、フレームごとの 完全 処理にかかるコストはおよそ 1.465 ミリ秒です (内訳は以下のとおり):
- スカイとクラウドにかかるコスト - 0.60 ミリ秒
- キューブマップ ミップの生成にかかるコスト - 0.05 ミリ秒
- スペキュラ畳み込みにかかるコスト - 0.80 ミリ秒
- ディフューズ放射にかかるコスト - 0.015 ミリ秒
- 9 フレームのタイム スライス を使って同じ処理を行った場合のコストは、最もコストのかかるステップにおいて最大 0.20 ミリ秒です。
タイム スライスにかかるコストは最もコストが高いフレームと同程度であるため、単一フレームのキャプチャを複数のフレームに分散することで、スカイ ライトのリアルタイム キャプチャを常にプロジェクトのコスト予算内に抑えることができます。また、こうすることでフレーム予算に余裕が出るため、スカイやクラウドなど、他の領域の品質を高める機会も生じます。
タイム スライスはデフォルトで有効になっていますが、r.SkyLight.RealTimeReflectionCapture.TimeSlice.
コンソール コマンドを使って設定することもできます。
ムーバブル オブジェクトからのシャドウイング
可動オブジェクトから環境内へのソフト シャドウイングには、スケルタルメッシュの場合は カプセル シャドウ を、 剛体メッシュの場合は 距離フィールド間接シャドウィング を使用します。これらを正しく使用するには、別の設定を行う必要があります。そのためには、正しく機能するように別途設定が必要です。
プロパティ
UI では厳密に区別されていませんが、スカイ ライト コンポーネントのプロパティは、Sky Light と Light という 2 つのカテゴリに大きく分類されます。これらには、アクタの [Details (詳細)] パネルからアクセスできます。スカイ ライトのプロパティは Sky Light アクタに特有なもので、ライトのプロパティはすべての Light アクタに共通するものです。一部のプロパティについては、下の表で示すように、詳細設定セクションを展開して表示する必要があります。
プロパティ | 説明 | ||||
---|---|---|---|---|---|
Sky Light | |||||
Real Time Capture | 有効にすると、動的ディフューズとスペキュラ ライティングのためにスカイがキャプチャされて畳み込まれます。SkyAtmosphere、VolumetricCloud のコンポーネント、さらに Sky マテリアルを含むスカイドームが考慮されます。 | ||||
Source Type | 遠くのシーンをキャプチャして光源として使用するか、特定のキューブマップを使用するかを設定します。シーンをキャプチャすると、スカイ ライト位置から [Sky DistanceThreshold] の値よりも遠くにある対象がすべて含まれます。
|
||||
Cubemap | Source Type が SLS_SpecifiedCubemap に設定されている場合、天空光を使用するようにキューブマップを指定します。 | ||||
Source Cubemap Angle | Source Type を SLS Specified Cubemap に設定した場合にソース キューブマップを回転させる角度です。 | ||||
Cubemap Resolution | 最上位で処理されるキューブマップ ミップの最大解像度です。2 テクスチャの累乗値にする必要があります。 | ||||
Sky Distance Threshold | スカイ ライトからの特定の距離で、この点を越えたあらゆるジオメトリは空の一部として扱われます。反射キャプチャでも使用されます。 | ||||
Capture Emissive Only | エミッシブ マテリアルのみをキャプチャします。すべてのライティングをスキップするため、キャプチャのコストが下がります。Capture Every Frame の使用時に推奨します。詳細設定 (Advanced) に含まれています。 | ||||
Lower Hemisphere is Solid Color | 下半球から放たれるすべてのライトをゼロに設定するかどうかを指定します。下半球からの光の漏れを防ぐのに便利なプロパティです。詳細設定 (Advanced) に含まれています。 | ||||
Lower Hemisphere Color | カラー ピッカーを使って下半球の色を選択します。詳細設定 (Advanced) に含まれています。 | ||||
Light | |||||
Intensity Scale | ライトが放出するエネルギーの合計です。 | ||||
Affects World | ライトがワールドに影響を及ぼすことができるかどうか、または無効かどうかを設定します。 | ||||
Cast Shadows | ライトにシャドウをキャストさせるかを設定します。 | ||||
Indirect Lighting Intensity | ライトからの間接光の効果をスケーリングします。0 にするとこのライトのグローバル イルミネーション (GI) を無効にします。 | ||||
Volumetric Scattering Intensity | このライトからのボリュメトリック散乱 (スキャタリング) の強度です。Intensity と Light Color を調節します。 | ||||
Casts Static Shadows | ライトに静的オブジェクトからシャドウをキャストさせるかどうかを設定します。また、Cast Shadows を True に設定する必要があります。詳細設定 (Advanced) に含まれています。 | ||||
Casts Dynamic Shadows | 動的オブジェクトからライトにシャドウをキャストさせるかを設定します。 また、Cast Shadows を True に設定する必要があります。詳細設定 (Advanced) に含まれています。 | ||||
Affect Translucent Lighting | ライトが半透明処理に影響を及ぼすかどうかを設定します。小さいライトが多数存在する場合に無効にすると、GPU 時間を短縮することができます。詳細設定 (Advanced) に含まれています。 | ||||
Transmission | スカイ ライトからのライトが、サブサーフェス錯乱プロファイルを持つサーフェスの中を透過するかどうかを設定します。ライトを Movable に設定しておく必要があります。詳細設定 (Advanced) に含まれています。 | ||||
Cast Volumetric Shadow | ライトがボリュメトリック フォグを投影するかどうかを設定します。詳細設定 (Advanced) に含まれています。 | ||||
Cast Deep Shadow | ライトが高品質の髪ストランドのセルフ シャドウをキャストするかどうかを設定します。このオプションを有効にすると、このライトに対して追加の GPU 負荷が生じます。詳細設定 (Advanced) に含まれています。 | ||||
Cast Ray Traced Shadows | ライト シャドウをシャドウ マッピングまたはレイトレースで計算するかどうかを設定します (使用可能な場合)。詳細設定 (Advanced) に含まれています。 | ||||
Affect Ray Tracing Reflections | レイトレースによる反射が有効な場合、ライトが反射のオブジェクトに影響を及ぼすかどうかを設定します。詳細設定 (Advanced) に含まれています。 | ||||
Affect Ray Traced Global Illumination | レイトレースによるグローバル イルミネーションが有効な場合、ライトがグローバル イルミネーションに影響を及ぼすかどうかを設定します。詳細設定 (Advanced) に含まれています。 | ||||
Deep Shadow Layer Distribution | ディープ シャドウのレイヤー分布を変更します。0:リニア (均一なレイヤー分布)、1:指数関数 (小さなシャドウ付近ではよりディテール)。Cast Deep Shadow をオンに設定しておく必要があります。詳細設定 (Advanced) に含まれています。 | ||||
Atmosphere and Cloud | |||||
Cloud Ambient Occlusion | 大気中で空の寄与を雲が遮蔽するかどうか (多重散乱の段階的フェードアウト)。 | ||||
Cloud Ambient Occlusion Strength | アンビエントオクルージョンの強度。大きな値を指定するほどライトをさらに遮蔽します。 | ||||
Cloud Ambient Occlusion Extent | カメラ周辺のクラウド アンビエントオクルージョン マップに使用する、キロメートル (km) 単位で表したワールド空間の半径。 | ||||
Cloud Ambient Occlusion Map Resolution Scale | クラウド アンビエントオクルージョン マップの解像度をスケーリングします。この解像度は r.VolumetricCloud.ShadowMap.MaxResolution でクランプされます。 |
||||
Cloud Ambient Occlusion Aperture Scale | ボリュメトリック クラウドの評価に起因する、スカイ オクルージョンに対する円錐形の絞り角を制御します。値に 1 を設定すると半球全体を考慮するため、オクルージョンがぼやけます。値に 0 を設定すると一方向のオクルージョン (垂直) を考慮するため、オクルージョンが明確になります。 |
制限事項
以下は、スカイライトと併用すると便利ですが、まだ実装されていない機能です。
- 可動オブジェクト (キャラクター) から環境へのソフト シャドウイングはスカイ ライトに統合されておらず、現時点では別の複数の機能を実装する必要があります (追加のレンダリング コストがかかります)。
- SkyLightComponent のブループリント関数 RecaptureSky() を使用することはできますが、処理にかかるコストが高く、少なくとも 120 ミリ秒が必要になり、ゲームプレイの停止や遅延につながります。