Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Пользовательское падение

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

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

Свойства Функции
InverseSquared Примените модель спада расстояния обратных квадратов. Это означает, что интенсивность света уменьшается обратно пропорционально квадрату расстояния от местоположения до источника света. Для получения дополнительной информации см. Википедия: Закон обратных квадратов. Этот вариант наиболее физически точен.
InverseSquaredNoRangeAttenuation Примените модель спада расстояния обратных квадратов без плавного затухания диапазона. Это работает так же, как InverseSquared, но система освещения не учитывает затухание для параметра диапазона точечных источников света (то есть точечных источников света и прожекторов).
Legacy Примените квадратичную модель спада. Эта модель основывает затухание света на диапазоне источника света. Интенсивность уменьшается по мере удаления света от источника, но наблюдается очень резкое и неестественное падение затухания, и визуальный эффект нереалистичен.
Linear Примените линейную модель спада. В этой модели затухание обратно пропорционально расстоянию от источника света, а спад уменьшается с фиксированной скоростью от его источника.
Пример визуального эффекта каждого пользовательского пресета спада
Пример визуального эффекта каждого пользовательского пресета спада

Примечание. Приведенный ниже пример кода работает только с Progressive Lightmapper, когда вы используете запеченное или смешанное освещение. Чтобы использовать пример кода с освещением в реальном временикомпоненты освещения, для свойства Mode которых задано значение Realtime. Unity рассчитывает и обновляет освещение Realtime Lights каждый кадр во время выполнения. Никакие источники света в реальном времени не рассчитываются заранее. Подробнее
См. в Словарь
, используйте Enlighten 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 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.Area: 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(); } }

Примечание. Весь код в приведенном выше примере необходим для работы пользовательского спада; однако вы можете изменить InverseSquared в строке ld.falloff = FalloffType.InverseSquared;, чтобы использовать любой из пресеты, описанные выше.


Добавлен Progressive Lightmapper в 2018.1

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3