Version: 6000.3
语言: 中文
使用光照设置资产配置光照贴图
使用定向模式存储光源方向

更改带衰减的灯光的淡入淡出距离

在现实世界中,光线会随着距离而减弱,昏暗的灯光的范围比强光的光线低。术语“衰减”是指光线褪色的速率。除了 Unity 的默认衰减光照行为外,您还可以使用自定义衰减设置。

进步Lightmapper:Unity 中的一种工具,可根据场景中光源和几何体的排列来烘焙光照贴图。更多信息
请参阅术语表
提供自定义衰减预设,您可以通过脚本实现。请参阅表下方的图像,直观地表示这些工作原理,并查看图像下方的代码示例,了解如何使用此功能的示例。

FalloffType了解更多信息。

每个自定义衰减预设的视觉效果示例
每个自定义衰减预设的视觉效果示例

注意:下面的代码示例仅适用于使用烘焙光源或混合光源时的渐进光照贴图器。将代码示例与实时光源Mode 属性设置为 Realtime 的光源组件。Unity 在运行时计算并更新实时光源的每一帧光照。没有预先计算实时光源。更多信息
请参阅术语表
,请使用 Enlighten Realtime Global Illumination

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.GetEntityId()); break;
                }

                if (l.cookie != null)
                {
                    ld.cookieTextureEntityId = l.cookie.GetEntityId();
                }
                else
                {
                    ld.cookieTextureEntityId = EntityId.None;
                }
                
                ld.falloff = FalloffType.InverseSquared;
                lightsOutput[i] = ld;
            }
        };
        Lightmapping.SetDelegate(testDel);
    }
    void OnDisable()
    {
        Lightmapping.ResetDelegate();
    }
}

注意:上例中的所有代码都是自定义衰减工作所必需的;但是,您可以更改InverseSquared在行中ld.falloff = FalloffType.InverseSquared;以使用任何预设


2018.1 新增渐进式光照贴图器20181

2018–03–28 页面已发布

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