美文网首页何三思Unity Shader分享征服Unity3d
【Unity3D技术文档翻译】第3.6.2.4篇 自定义光衰减(

【Unity3D技术文档翻译】第3.6.2.4篇 自定义光衰减(

作者: 何三思 | 来源:发表于2018-08-01 08:27 被阅读1次
    Unity3D技术文档翻译

    上一章:【Unity3D技术文档翻译】第3.6.2.3篇 UV重叠结果(UV overlap feedback))

    本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Lighting】→【Global Illumination】→【Progressive Lightmapper】→【Custom fall-off】

    自定义光衰减(Custom fall-off)

    在真实世界中,光随着距离增加而淡出,而且昏暗的光要比明亮的光范围更低。属于“衰减(fall-off)”指的就是光的淡出速率。在 Unity 中,除了默认的光照衰减效果,你还可以使用自定义的衰减设置。

    渐进式光照贴图提供了自定义的衰减预设,你可以通过脚本来控制。下图展示了它们的运行效果,图片下面则贴出了一个使用该功能的脚本例子。

    属性 作用
    InverseSquared(平方反比) 应用一个平方反比距离衰减模型。这意味着,灯光的强度与距离光源的距离成反比例衰减。该选项在物理上是最精确的。
    InverseSquaredNoRangeAttenuation(平方反比,但没有衰减范围) 应用一个平方反比距离衰减模型,但是没有平滑的衰减范围。工作方式与 InverseSquared 相同,但是不是随着距离参数衰减(比如:点光源和聚光灯)。
    Legacy(遗留模型) 应用一个平方衰减模型。该模型的灯光衰减基于距离光源的距离,但是具有一个强烈而不自然的急速衰减,该模型的视觉效果不真实。
    Linear(线性) 应用一个线性衰减模型。在该模型下,衰减与距离成平方反比,衰减程度由光源的一个混合速率(fixed rate)决定。
    每种自定义光衰减预设的视觉效果。
    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();
                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); ld.Init(ref dLight); break;
                        case UnityEngine.LightType.Point: LightmapperUtils.Extract(l, ref point); ld.Init(ref point); break;
                        case UnityEngine.LightType.Spot: LightmapperUtils.Extract(l, ref spot); ld.Init(ref spot); break;
                        case UnityEngine.LightType.Area: LightmapperUtils.Extract(l, ref rect); ld.Init(ref rect); break;
                        default: ld.InitNoBake(l.GetInstanceID()); break;
                    }
    
              ld.falloff = FalloffType.InverseSquared;
                    lightsOutput[i] = ld;
                }
            };
    
            Lightmapping.SetDelegate(testDel);
        }
    
        void OnDisable()
        {
            Lightmapping.ResetDelegate();
        }
    }
    

    如果本文对你有帮助的话,点个赞或者评论一下吧!

    相关文章

      网友评论

        本文标题:【Unity3D技术文档翻译】第3.6.2.4篇 自定义光衰减(

        本文链接:https://www.haomeiwen.com/subject/emlcvftx.html