Дальность и затухание у PointLight и SpotLight

В библиотеке Babylon.js источники света, такие как PointLight и SpotLight, играют важную роль в освещении сцены и создании эффекта объемности. Одним из ключевых аспектов настройки освещения является управление дальностью и затуханием света, что позволяет имитировать реальные физические явления. В этом разделе рассматриваются методы настройки дальности и затухания для источников света типа PointLight и SpotLight.

Дальность света

Дальность света определяет максимальное расстояние, на котором свет источника будет оказывать воздействие. Как только объект выходит за пределы этого расстояния, он больше не получает света от данного источника. В Babylon.js параметр дальности доступен через свойство range объектов типа PointLight и SpotLight.

Настройка дальности у PointLight

У PointLight дальность определяет максимальное расстояние, на котором свет ещё будет воздействовать на объекты в сцене. Когда объект удаляется дальше, он становится полностью затемнённым, поскольку свет больше не достигает его.

Пример установки дальности для PointLight:

const pointLight = new BABYLON.PointLight("pointLight", new BABYLON.Vector3(0, 10, 0), scene);
pointLight.range = 50; // Дальность света 50 единиц

Здесь создаётся PointLight, который будет освещать объекты на расстоянии до 50 единиц.

Настройка дальности у SpotLight

У SpotLight дальность работает аналогично, но также необходимо учитывать угол раскрытия светового пучка и его положение относительно сцены. Дальность у SpotLight ограничивает область, в пределах которой свет будет распространяться.

Пример настройки дальности для SpotLight:

const spotLight = new BABYLON.SpotLight("spotLight", new BABYLON.Vector3(0, 10, 0), new BABYLON.Vector3(0, -1, 0), Math.PI / 4, 2, scene);
spotLight.range = 50; // Дальность света 50 единиц

Здесь создаётся SpotLight, который будет освещать объекты в пределах дальности 50 единиц.

Затухание света

Затухание света описывает, как интенсивность света уменьшается с расстоянием от источника. В реальной жизни свет тускнеет с увеличением расстояния, и это явление также моделируется в Babylon.js. Для источников света PointLight и SpotLight предусмотрено несколько типов затухания, которые можно настраивать через свойства объекта.

Типы затухания
  1. Линейное затухание (Linear): Свет плавно тускнеет с увеличением расстояния. Это наиболее простой и часто используемый тип затухания.
  2. Квадратичное затухание (Quadratic): Интенсивность света уменьшается быстрее на больших расстояниях, что более точно отражает поведение реального света.
  3. Гибридное затухание (Exponential): Этот тип затухания применяется для имитации света с сильным падением интенсивности на больших расстояниях.
Настройка затухания у PointLight

Для настройки типа и силы затухания у PointLight используются параметры intensity и falloffType. Параметр falloffType позволяет выбрать один из типов затухания, а intensity управляет общей интенсивностью света.

Пример:

const pointLight = new BABYLON.PointLight("pointLight", new BABYLON.Vector3(0, 10, 0), scene);
pointLight.range = 50;
pointLight.intensity = 1;
pointLight.falloffType = BABYLON.Light.FALLOFF_STANDARD; // Линейное затухание

В данном примере использовано стандартное линейное затухание. Для квадратного или экспоненциального затухания можно установить соответствующие значения:

pointLight.falloffType = BABYLON.Light.FALLOFF_SQUARE; // Квадратичное затухание
pointLight.falloffType = BABYLON.Light.FALLOFF_EXPONENTIAL; // Экспоненциальное затухание
Настройка затухания у SpotLight

У SpotLight можно настроить затухание аналогично PointLight, но важно помнить, что для spot-света также следует учитывать угол пучка света и направление его распространения. SpotLight имеет дополнительные параметры, такие как exponent, который контролирует степень затухания интенсивности света в пределах пучка.

Пример настройки SpotLight с затуханием:

const spotLight = new BABYLON.SpotLight("spotLight", new BABYLON.Vector3(0, 10, 0), new BABYLON.Vector3(0, -1, 0), Math.PI / 4, 2, scene);
spotLight.range = 50;
spotLight.intensity = 1;
spotLight.falloffType = BABYLON.Light.FALLOFF_SQUARE; // Квадратичное затухание
spotLight.exponent = 4; // Угол затухания (чем больше значение, тем быстрее свет тускнеет)

В данном примере используется квадратное затухание с настроенным углом затухания для SpotLight. Параметр exponent контролирует, как быстро свет тускнеет, что позволяет добиться нужного визуального эффекта.

Влияние дальности и затухания на производительность

При использовании источников света с дальностью и затуханием важно учитывать, что увеличение дальности и использование более сложных типов затухания могут существенно повлиять на производительность. Свет, распространяющийся на большие расстояния, требует больше вычислительных ресурсов, поскольку для каждого объекта на сцене необходимо вычислять его взаимодействие с источниками света. Чтобы избежать излишней нагрузки, рекомендуется оптимизировать настройки дальности и затухания в зависимости от размера сцены и количества источников света.

Заключение

Дальность и затухание являются ключевыми характеристиками для точной настройки освещения в сценах, создаваемых с помощью Babylon.js. Правильное использование этих параметров позволяет достичь более естественного и реалистичного освещения, имитируя физические особенности распространения света.