Unity 6.3
0 онлайн 104 гостей 3 в системе
Вход
Освещение Шаг 59 из 173

Изменение расстояния затухания огней с падением

В реальном мире, свет исчезает на расстоянии, и темные огни имеют меньший диапазон, чем яркие огни. Термин "fall-off" относится к скорости, с которой свет исчезает. Наряду с Unity по умолчанию fall-off освещения поведения, вы также можете использовать пользовательские настройки fall-off.

Прогрессивный Lightmapper предоставляет пользовательские предварительные настройки падения, которые вы можете реализовать с помощью скрипта. См. изображение под таблицей для визуального представления того, как они работают, и образец кода под изображением для примера того, как использовать эту функциональность.

См. FalloffType для получения дополнительной информации.

Пример визуального эффекта каждого пользовательского предварительного настройки падения
Пример визуального эффекта каждого пользовательского предварительного настройки падения

Пример

Примечание: Пример кода ниже работает только с прогрессивным Lightmapper для использования примера кода с подсветкой в реальном времени, используйте команду Глобальное освещение в режиме реального времени.

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; использовать любой из Прессеты.