LightShadow

DirectionalLightShadowCSM

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

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

Конструктор

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)

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

.setExponent(exponent : Float)

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

.setFade(fade : Float)

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

.setMaxDistance(maxDistance : Float)

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

.setNoLastCascadeCutOff(noLastCascadeCutOff : Boolean)

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

.setNumCascades(numCascades : Integer)

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

.setLightMargin(lightMargin : Float)

Определяет насколько далеко камера (камера источника теней) сдвинута по оси 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

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

Пазлы

Пазл set shadow param позволяет включать/выключать отбрасывание теней без программирования.

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

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