ライト関数は、マスクで除外し、ライトの強度をフィルタで調節するためにライトに適用できるマテリアルです。 これはマテリアル主導のアプローチであり、不透明型メッシュに適用するときに、ライトによるアニメート エフェクトを生み出せるということです。 ボリュメトリック フォグによるシャドウイングもサポートし、ライティング関数を、水中のコースティクス、雲、投影されたステンシルなど、ライティングのバリエーションを生み出すために役立てることができます。
ボリュメトリック フォグと Light 関数を使用して、マテリアル主導のアニメーションのデモを示す、機能別サンプル プロジェクトの Light 関数。
Light 関数を適用できるのは、その可動性が [Movable (ムーバブル)] または [Stationary (固定)] に設定されているライトのみであり、Light 関数をライトマップにベイクできません。 ライト関数は、動的シャドウをキャストするライトと同じ、負荷の高いレンダリング パスで実行されます。これはライト関数の寄与をスクリーン空間で最初に蓄積する必要があるからです。 ライト関数の第 2 パスは、続いてスクリーン空間でライティングを評価します。 これは GPU で実行されるシーケンシャル処理であり、リソースの同期と発生するキャッシュのフラッシュにより、さらに時間がかかります。
以下に異なるライト タイプで使用するライト関数のサンプルを示します。
ライト関数を作成する
マテリアルで Light 関数を作成するには、[Material Domain] を [Light Function] に設定します。 すべてのノードからメイン マテリアル ノードの Emissive Color 入力に接続します。
ライト関数をライトに適用する
Light 関数マテリアルをライトで使用するには、ライトの [Light Function Material] スロットにその Light 関数マテリアルを割り当てます (ライトの [Details (詳細)] パネル)。
Light 関数をライトに割り当てた後は、Light 関数マテリアルを表示するために [Cast Shadows] を有効にする必要はありません。
ライト関数にはライトに関する次のプロパティが含まれます。
| プロパティ | 説明 |
|---|---|
Light Function Material | ライト関数マテリアルをこのライトに適用するスロット。 ライト関数を適用できるのは、ライトマップを使用していないライトのみです。 |
Light Function Scale | ライト関数の投影をスケーリングします。 X と Y はライトの方向に対し垂直方向へスケーリングします。 Z はライトの方向に沿って平行にスケーリングします。 |
Fade Distance | Light 関数が [Disabled Brightness] 値まで完全にフェードする距離を設定します。 距離に適用したライト関数によるエイリアシングを隠すのに便利です。 |
Disabled Brightness | ライト関数が指定されているものの無効なときにライトに適用する輝度係数です。たとえば、シャドウが無効になっているビューを使用する、シーンキャプチャがあります。 これには、ライト関数マテリアルのエミッシブ入力の平均輝度 (通常は 0 ~ 1 の値) を設定します。 |
ライト関数アトラス
ライト関数は、動的シャドウをキャストするライトと同じ、負荷の高いレンダリング パスを使用します。 ライト関数の寄与は、スクリーン空間で最初に蓄積される必要があります。続いて、スクリーン空間でライティングを評価する第 2 パスを実行します。 GPU でのこのシーケンシャル処理は、リソース同期とキャッシュ フラッシュのために、さらに時間がかかります。
この処理中の高負荷 GPU コストを軽減することを目的として、Light 関数アトラスは、アトラスを構成するタイル (2D テクスチャ) にアニメートされた Light 関数をベイクするために使用される生成プロセスとなっています。 これらの 2D テクスチャは保存され、シーンに投影されます。 この処理をよく把握するために、ライト関数アトラス ビジュアライゼーションを使用して、シーンの各ライト関数がタイルとしてどのようにアトラスに保存されているのかを確認できます。
以下のシーンの例では、2D テクスチャ タイルにベイクされ、アトラスに保存された 4 つのライト関数が含まれます。
ライト関数をアトラス 2D テクスチャにベイクする処理は、GPU での完全な並列処理であり、結果はシーンのすべてのビュー間で共有されます。 続いて、Light Pass の間に、シャドウのキャストが有効ではない、Light 関数マテリアルがあるすべてのライトは、画面に並列で蓄積できます。 それにより、GPU 時間を大幅に短縮できます。 たとえば、「Talisman: Environment」テンプレート (Unreal Engine Fortnite Editor (UEFN) では 2 ミリ秒 (ms) を超える GPU 時間の短縮が測定されました。
レガシーのライト関数と異なり、このライト関数アトラスは、グレースケールまたは色付きのライト関数マテリアルをサポートできます。
ライト関数アトラスの制限事項
ライト関数マテリアルには、自身を有効にしてライト関数アトラスにベイクされるようにするための制限事項がいくつかあります。 対象プロジェクトでライト関数アトラスを有効にするときに次の事項を考慮してください。
深度バッファまたはワールド位置をサンプリングできません。
GBuffer をサンプリングできません。
テクスチャをサンプリングする場合、UV は操作できません。 ただし、これを実行する場合に重要なのは、UV 操作でライト関数のテクスチャ空間エッジに揃えることです。 その他の場合、アトラス スロットは反復できません。
この問題を確認できるのは、ディレクショナル ライトと矩形ライト、または [Details (詳細)] パネルのスケーリング コントロールを使用するライトです。
現時点では、ディレクショナル ライトはアトラスをサンプリングしないようになっています。
これらの制限に該当するとき、ライト関数は、高速のライティング評価パスで、ライト関数アトラスにベイクできます。 ライト関数は自動で検出され、ライト関数アトラスに対してルートイン/アウトされます。
ライト関数アトラスのビジュアライゼーション
Light 関数アトラスに含める/から除外する対象の Light 関数をビジュアライゼーションできます。これにはコマンド ShowFlag.VisualizeLightFunctionAtlas 1 を使用します。
このビジュアライゼーションでは、次の情報が表示されます。
Light 関数アトラスは、アトラスの一部であるすべての Light 関数を表示します。
シーンのライト関数に関する情報:
アトラスにある Light 関数の数。
アトラスをサンプリングするローカル ライトの数。
アトラスのライト関数に影響があるライトの数にリンクしているカラー チャート。
ライト関数アトラスと互換性がないライト関数のリスト。
ライト関数アトラスのプロジェクト設定
次のプロパティは、[Project Settings (プロジェクト設定)] ウィンドウの [Engine (エンジン)] > [Rendering (レンダリング)] にある [Light Function Atlas] カテゴリにあります。
| プロパティ | 説明 | デフォルトの状態 |
|---|---|---|
Light Function Atlas | ライト関数アトラス テクスチャの形式を選択します。 | 8 bits Gray Scale (8 ビット グレースケール) |
Volumetric Fog Uses Light Function Atlas | ライト関数アトラスが有効になっているときに、ボリュメトリック フォグでライト関数のサポートを有効にします。 | 有効化済み |
Deferred Lighting Uses Light Function Atlas | Light 関数アトラスが有効になっているときに、ディファード ライティング (マルチパスまたはクラスタ化) で Light 関数のサポートを有効にします | 有効化済み |
単一レイヤー ウォーターで Light 関数アトラスを使用します | ライト関数アトラスが有効になっているときに、単一レイヤー ウォーターでライト関数のサポートを有効にします。 | 無効 |
Translucent Uses Light Function Atlas | ライト関数アトラスが有効になっているときに、フォワード シェーディング モードを使用して透過マテリアルでライト関数のサポートを有効にします。 | 無効 |
ライト関数アトラス形式を設定する
デフォルトでは、Light 関数アトラスは Light 関数にグレースケールを使用します。ただし、プロジェクト設定で、カラーを使用するように [Light Function Atlas Format] を [8 bits RGB Color] に設定することで、変更できます。 色付きのライト関数が機能する対象には、ボリュメトリック フォグ、Lumen グローバル イルミネーションと反射、半透明または単一レイヤー ウォーターに設定されたマテリアルがあります。
色付きの Light 関数では、プロジェクト設定の [Deferred Lighting Uses Light Function Atlas] を有効にする必要があります。 この設定は、ライト関数アトラスを使用するときにデフォルトで有効になっています。
半透明および単一レイヤーウォーター マテリアルでのライト関数アトラス
デフォルトでは、Light 関数アトラスが使用されるのは、ディファード ライティング、ボリュメトリック フォグおよび Lumen グローバル イルミネーションと反射です。 半透明および単一レイヤー ウォーター マテリアルでのサンプリング サポートを有効にすることで、Light 関数を使用して、プロジェクトの忠実度をさらに高めることができます。
半透明および単一レイヤー ウォーター マテリアルのサポートを切り替えるには、プロジェクト設定の [Engine] > [Rendering] にある [Light Function Atlas] カテゴリで、[Translucent Uses Light Function Atlas] と [Single Layer Water Uses Light Function Atlas] を使用します。
[Translucent Uses Light Function Atlas] が有効であるときに、[Lighting Mode (ライティング モード)] が [Surface ForwardShading] に設定されている半透明マテリアルはどれでも、そのサーフェスで Light 関数を受け取ることができます。 ライトが半透明マテリアルのサーフェスにキャストしている間、ライト関数は、マテリアルがセットアップされているときに、そのサーフェスでのみ (グレースケールまたはカラーで) 表示されます。
ライティング モードが「Surface TranslucencyVolume」に設定されている半透明マテリアル。 | ライティング モードが「Surface ForwardShading」に設定されている半透明マテリアル。 |
[Single Layer Water Uses Light Function Atlas] が有効であるときに、単一レイヤー ウォーター マテリアルを使用する水塊は光源から Light 関数のキャストを受け取ります。 単一レイヤー ウォーター マテリアルの吸収係数と散乱係数は水面下で Light 関数の見え方に影響を及ぼします。 これらのプロパティは、光が媒質中をどのように伝わるのかに影響を及ぼします。デフォルトでは、青色光の散乱により、赤色スペクトルの色が失われます。
デフォルトの単一レイヤーウォーター マテリアルと水塊を使用している場合は、ラフネスを調整して、ライト関数が強く表示されるかどうかを決定できます。
ライト関数アトラスの追加メモ
ライト関数アトラスで作業するときに使用できる、コンソール変数と追加メモを次に示します。
テクスチャ アトラスのライト関数は、ライト コンポーネントでセットアップしたパラメータに応じて、タイルに並べられ、適切にフェードアウトします。
インスタンス化ライト関数マテリアルは、インスタンス化するマテリアルから、独自のスロットを独立して使用します。
色付きのライト関数では、形式が 8 ビットグレースケールに設定されているときに、R8 テクスチャ形式が使用されます。 他に設定されているときは、R8G8B8 テクスチャ形式が使用されます。
便利なコンソール変数:
r.LightFunctionAtlas:これを使用して Light 関数アトラスを有効/無効にし、レガシーのライト関数を使用します。r.LightFunctionAtlas.SlotResolution:Light 関数マテリアルがベイクされるときの解像度を設定します。 ライト関数アトラスのビジュアライゼーションの解像度を確認できます。r.LightFunctionAtlas.Size:Light 関数アトラスのサイズを設定します。 値 4 (4x4) は、アトラスにベイクされる、ライト関数マテリアルに対して最大 16 個分のスペースがあるということです。 ライト関数アトラスのビジュアライゼーションのアトラス サイズを確認できます。