ライティングシナリオには、シーンまたはベイクセットのベイクしたライティングデータがあります。異なるライティング設定を異なるライティングシナリオアセットにベイクし、ユニバーサルレンダーパイプライン (URP) がランタイムにどれを使用するかを変更できます。
例えば、ライトがオンのライティングシナリオ 1 つと、ライトがオフの別のライティングシナリオを作成できます。ランタイムにプレイヤーがライトをオフにしたときに、2 番目のライティングシナリオを有効にできます。
ライティングシナリオを使用するには、アクティブな URP アセット に移動し、Lighting > Light Probe Lighting > Lighting Scenarios を有効にします。
新しいライティングシナリオを作成してベイク結果を内部に保存するには、以下の操作を行います。
ライティングシナリオにベイクするには、以下のステップに従います。
ProbeReferenceVolume API を使用して、ランタイムに URP が使用するライティングシナリオを設定できます。
ランタイムにアクティブなライティングシナリオを変更すると、URP はライトプローブの間接ライティングデータのみを変更します。スクリプトを使用して、ジオメトリの移動、ライトの変更、直接ライティングの変更をさらに行う必要があるかもしれません。
ライティングシナリオ間のブレンドを有効にするには、アクティブな URP アセット に移動し、Light Probe Lighting > Scenario Blending を有効にします。
BlendLightingScenario API を使用して、ランタイムにライティングシナリオをブレンドできます。
例えば、以下のスクリプトは以下の処理を行います。
scenario01 をアクティブなライティングシナリオとして設定します。scenario01 と scenario02 をブレンドします。using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlendLightingScenarios : MonoBehaviour
{
UnityEngine.Rendering.ProbeReferenceVolume probeRefVolume;
public string scenario01 = "Scenario01Name";
public string scenario02 = "Scenario02Name";
[Range(0, 1)] public float blendingFactor = 0.5f;
[Min(1)] public int numberOfCellsBlendedPerFrame = 10;
void Start()
{
probeRefVolume = UnityEngine.Rendering.ProbeReferenceVolume.instance;
probeRefVolume.lightingScenario = scenario01;
probeRefVolume.numberOfCellsBlendedPerFrame = numberOfCellsBlendedPerFrame;
}
void Update()
{
probeRefVolume.BlendLightingScenario(scenario02, blendingFactor);
}
}
レンダリングデバッガー を使用して、ライティングシナリオ間の遷移をプレビューできます。以下の手順に従ってください。
ベイク間で静的ジオメトリを移動すると、ライトプローブの位置が異なる場合があります。これは、ライトプローブの数と位置はブレンドする各ライティングシナリオで同じでなければならないため、ライティングシナリオ間でブレンドすることはできないことを意味しています。
これを回避するには、ベイク時に URP がプローブ位置を再計算しないようにします。以下の手順に従ってください。