灯光场景包含场景或烘焙设置的烘焙灯光数据。您可以将不同的灯光设置烘焙到不同的灯光场景资源中,并在运行时更改通用渲染管线 (URP) 使用的灯光场景。
例如,您可以创建一个灯光打开的灯光场景,另一个灯光关闭的灯光场景。在运行时,当玩家关闭灯光时,您可以启用第二个灯光场景。
要使用灯光场景,请转到活动的URP 资源并启用灯光 > 光探测器灯光 > 灯光场景。
要创建一个新的灯光场景以便在其中存储烘焙结果,请执行以下操作
要烘焙到灯光场景,请按照以下步骤操作
您可以使用ProbeReferenceVolume API设置 URP 在运行时使用的灯光场景。
如果您在运行时更改了活动灯光场景,URP 仅更改光探测器中的间接灯光数据。您可能仍需要使用脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性以及以您喜欢的任何方式响应用户输入。 更多信息
请参阅术语表来移动几何体、修改灯光或更改直接灯光。
要启用灯光场景之间的混合,请转到活动的URP 资源并启用光探测器灯光 > 场景混合。
您可以使用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 重新计算探测器位置。请按照以下步骤操作