LightShadow

DirectionalLightShadowCSM

Это значение используется внутри DirectionalLights для расчета теней.

В отличие от других классов теней, этот использует OrthographicCamera для расчета теней, а не PerspectiveCamera. Это происходит потому, что лучи света от DirectionalLight параллельны. Данный тип освещения обычно используется на больших сценах с множеством обьектов, поэтому для оптимизации используется техника каскадных карт теней.

Пример

shadowmap / csm

Конструктор

DirectionalLightShadowCSM()

Создает новый DirectionalLightShadowCSM. Этот параметр не предназначен для прямого вызова - он вызывается внутри DirectionalLight.

Свойства

Общие свойства смотрите в базовом классе LightShadow.

.camera : Camera

Фальшивая камера (заглушка).

.cascadesFitToScene : Boolean

Задает метод разбиения главного фрустума на под-фрустумы. Если значение true, используется метов fit to scene, иначе метод fit to cascade. Значение по умолчанию false. Используйте setCascadesFitToScene для установки этого значения.

.customSplitsCallback : Function

Задает собственный метод разбиения главного фрустума на интервалы. Функция должна принимать следующие аргументы: numCascades, near, far, breaks, exponent.

.exponent : Float

Определяет метод разбиения главного фрустума на интервалы, 0.0 - линейное разбиение (т.е. равномерно), 1.0 - логарифмическое (т.е. больше точности вблизи к камеры). Работает только с перспективным видом. Диапазон от 0.0 до 1.0. По умолчанию 0.5. Используйте setExponent для установки этого значения.

.fade : Float

Когда значение больше 0.0, размер каждого каскада увеличивается так, чтобы он пересекался с соседними. В пересекающихся областях каскадные тени смешиваются, это избавляет от швов на стыках. Диапазон от 0.0 до 1.0. По умолчанию 0.0. Используйте setFade для установки этого значения.

.isDirectionalLightShadowCSM : Boolean

Флаг только для чтения, чтобы проверить, является ли данный объект типа DirectionalLightShadowCSM.

.mainFrustum : CSMFrustum

Главный фрустум.

.maxDistance : Float

Расстояние дальней плоскости фрустума (т.е. тени не будут видны дальше этого растояния от камеры). Диапазон от 0.0 до Infinity. По умолчанию 100000. Используйте setMaxDistance для установки этого значения.

.noLastCascadeCutOff : Boolean

При значении true, тень последнего каскада не обрезается смешиванием, что увеличивыет теневое покрытие. По умолчанию true. Используйте setNoLastCascadeCutOff для установки этого значения.

.numCascades : Integer

Количество теневых каскадов. Диапазон от 1 до 4. По умолчанию 1. Используйте setNumCascades для установки этого значения.

.lightMargin : Float

Определяет насколько далеко камера (камера источника теней) сдвинута по оси Z. Чем больше значение тем больше пространства охватывается. Используйте большие значения в сценах с высокими или большими обьектами. Диапазон от 0.0 до Infinity. По умолчанию 100.0. Используйте setLightMargin для установки этого значения.

Методы

Общие методы смотрите в базовом классе LightShadow.

.createCascades() → this

Создает каскадные тени. Должен вызываться 1 раз после инициализации.

.getBreaks(camera : Camera) → this

Расчитывает интервалы для каскадных теней. Вызывается внутренними функциями.

.initCascades(camera : Camera) → this

Инициализирует каскады, т.е. разбивает главным фрустум на секции. Вызывается внутренними функциями.

.setCascadesFitToScene(cascadesFitToScene : Boolean) → null

Задает метод разбиения главного фрустума на под-фрустумы. См .cascadesFitToScene.

.setExponent(exponent : Float) → null

Определяет метод разбиения главного фрустума на интервалы, 0.0 - линейное разбиение (т.е. равномерно), 1.0 - логарифмическое (т.е. больше точности вблизи к камеры). См .exponent.

.setFade(fade : Float) → null

Задает коэффициент смешения каскадов. См .fade.

.setMaxDistance(maxDistance : Float) → null

Задает расстояние дальней плоскости фрустума (т.е. тени не будут видны дальше этого растояния от камеры). См .maxDistance.

.setNoLastCascadeCutOff(noLastCascadeCutOff : Boolean) → null

При значении true, тень последнего каскада не обрезается смешиванием, что увеличивыет теневое покрытие. См .noLastCascadeCutOff.

.setNumCascades(numCascades : Integer) → null

Задает количество теневых каскадов. См .numCascades.

.setLightMargin(lightMargin : Float) → null

Определяет насколько далеко камера (камера источника теней) сдвинута по оси Z. См .lightMargin.

.update(camera : Camera, light : DirectionalLight) → this

Вычисляет фрустум и позицию для каждого теневого каскада.

.updateFrustums(camera : Camera) → this

Вычисляет фрустум для каждого теневого каскада. Следует вызываеть при изменении матрицы проекции вида, .exponent, .maxDistance или любых bias настроек.

.updateMaps() → this

Обновляет карты теней. Вызывается внутренними функциями.

.updateMapSize(size : Vector2) → this

Обновляет размер карт теней для каскадов.

.updateCascadePositions(camera : Camera) → this

Расчитывает позицию для каждого теневого каскада.

.updateShadowBounds(camera : Camera) → this

Вычисляет фрустумы для каждого теневого каскада. Вызывается внутренними функциями.

Исходный файл

О том как получить исходный код этого модуля читайте тут.