版本:Unity 6 (6000.0)
语言:English
选择如何在运行时更改灯光
使用天空遮挡在运行时从天空更新灯光

使用灯光场景烘焙不同的灯光设置

灯光场景包含场景或烘焙设置的烘焙灯光数据。您可以将不同的灯光设置烘焙到不同的灯光场景资源中,并在运行时更改通用渲染管线 (URP) 使用的灯光场景。

例如,您可以创建一个灯光打开的灯光场景,另一个灯光关闭的灯光场景。在运行时,当玩家关闭灯光时,您可以启用第二个灯光场景。

启用灯光场景

要使用灯光场景,请转到活动的URP 资源并启用灯光 > 光探测器灯光 > 灯光场景

添加灯光场景

要创建一个新的灯光场景以便在其中存储烘焙结果,请执行以下操作

  1. 在灯光窗口中打开自适应探测体积面板
  2. 灯光场景部分,选择添加+)按钮以添加灯光场景。

烘焙到灯光场景

要烘焙到灯光场景,请按照以下步骤操作

  1. 灯光场景部分,选择一个灯光场景以将其设为活动状态。
  2. 选择生成灯光。URP 将烘焙结果存储在活动灯光场景中。

您可以使用ProbeReferenceVolume API设置 URP 在运行时使用的灯光场景。

如果您在运行时更改了活动灯光场景,URP 仅更改光探测器中的间接灯光数据。您可能仍需要使用脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性以及以您喜欢的任何方式响应用户输入。 更多信息
请参阅术语表
来移动几何体、修改灯光或更改直接灯光。

在灯光场景之间混合

要启用灯光场景之间的混合,请转到活动的URP 资源并启用光探测器灯光 > 场景混合

您可以使用BlendLightingScenario API在运行时在灯光场景之间混合。

例如,以下脚本执行以下操作

  1. scenario01设置为活动灯光场景。
  2. 设置每帧混合的单元格数量,这对于优化很有用。
  3. 每帧更新自适应探测体积混合因子以在scenario01scenario02之间混合。
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);
    }
}

预览灯光场景之间的混合

您可以使用渲染调试器预览灯光场景之间的过渡。请按照以下步骤操作

  1. 转到窗口 > 分析 > 渲染调试器以打开渲染调试器。
  2. 场景混合目标设置为灯光场景。
  3. 使用场景混合因子检查场景视图中灯光场景之间混合的效果。

在不同的灯光场景中保持光探测器相同

如果您在烘焙之间移动静态几何体,光探测器位置可能会有所不同。这意味着您无法在灯光场景之间混合,因为在您混合的每个灯光场景中,光探测器的数量及其位置必须相同。

要避免这种情况,您可以在烘焙时阻止 URP 重新计算探测器位置。请按照以下步骤操作

  1. 烘焙一个灯光场景。
  2. 将另一个灯光场景设置为活动灯光场景。
  3. 更改场景灯光或几何体。
  4. 探测器放置部分,将探测器位置设置为不重新计算
  5. 选择生成灯光以仅重新计算间接灯光,并跳过探测器放置计算。

其他资源

选择如何在运行时更改灯光
使用天空遮挡在运行时从天空更新灯光