版本:Unity 6 (6000.0)
语言 : 英语
使用灯光设置资源配置光照贴图
使用方向模式存储光照方向

更改带衰减的灯光衰减距离

在现实世界中,光线会随着距离而衰减,而暗淡的光线范围比明亮的光线范围更小。术语“衰减”指的是光线衰减的速率。除了 Unity 默认的衰减灯光行为之外,您还可以使用自定义衰减设置。

渐进式 光照贴图器Unity 中的一个工具,根据场景中灯光和几何体的排列烘焙光照贴图。 更多信息
请参阅 词汇表
提供自定义衰减预设,您可以通过脚本实现。请查看表格下方的图像以了解这些预设的工作原理的可视化表示,以及图像下方的代码示例以了解如何使用此功能。

请参阅 FalloffType 以了解更多信息。

An example of the visual effect of each custom fall-off preset
每个自定义衰减预设的可视效果示例

示例

注意:下面的代码示例仅适用于在使用烘焙或混合灯光时使用渐进式光照贴图器。要使用代码示例与 实时灯光灯光组件,其模式属性设置为实时。Unity 在运行时每帧计算并更新实时灯光的灯光。不会预计算任何实时灯光。 更多信息
请参阅 词汇表
一起使用,请使用 Enlighten 实时全局光照.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Experimental.GlobalIllumination;
using UnityEngine.SceneManagement;
[ExecuteInEditMode]
public class ExtractFalloff : MonoBehaviour
{
    public void OnEnable()
    {
        Lightmapping.RequestLightsDelegate testDel = (Light[] requests, Unity.Collections.NativeArray<LightDataGI> lightsOutput) =>
        {
            DirectionalLight dLight = new DirectionalLight();
            PointLight point = new PointLight();
            SpotLight spot = new SpotLight();
            RectangleLight rect = new RectangleLight();
            DiscLight disc = new DiscLight();
            Cookie cookie = new Cookie();
            LightDataGI ld = new LightDataGI();
            
            for (int i = 0; i < requests.Length; i++)
            {
                Light l = requests[i];
                switch (l.type)
                {
                    case UnityEngine.LightType.Directional: LightmapperUtils.Extract(l, ref dLight); LightmapperUtils.Extract(l, out cookie); ld.Init(ref dLight, ref cookie); break;
                    case UnityEngine.LightType.Point: LightmapperUtils.Extract(l, ref point); LightmapperUtils.Extract(l, out cookie); ld.Init(ref point, ref cookie); break;
                    case UnityEngine.LightType.Spot: LightmapperUtils.Extract(l, ref spot); LightmapperUtils.Extract(l, out cookie); ld.Init(ref spot, ref cookie); break;
                    case UnityEngine.LightType.Rectangle: LightmapperUtils.Extract(l, ref rect); LightmapperUtils.Extract(l, out cookie); ld.Init(ref rect, ref cookie); break;
                    case UnityEngine.LightType.Disc: LightmapperUtils.Extract(l, ref disc); LightmapperUtils.Extract(l, out cookie); ld.Init(ref disc, ref cookie); break;
                    default: ld.InitNoBake(l.GetInstanceID()); break;
                }
                ld.cookieID = l.cookie?.GetInstanceID() ?? 0;
                ld.falloff = FalloffType.InverseSquared;
                lightsOutput[i] = ld;
            }
        };
        Lightmapping.SetDelegate(testDel);
    }
    void OnDisable()
    {
        Lightmapping.ResetDelegate();
    }
}

注意:上面的示例中所有代码对于自定义衰减起作用都是必要的;但是,您可以将 ld.falloff = FalloffType.InverseSquared; 行中的 InverseSquared 更改为使用任何 预设


渐进式光照贴图器在 2018.1 中添加 NewIn20181

2018–03–28 页面发布

使用灯光设置资源配置光照贴图
使用方向模式存储光照方向