DirectionalLightShadowCSM - Руководство по Вердж3Д - Софт Эйт Софт
Description: Узнайте как использовать DirectionalLightShadowCSM в интерактивных 3Д-веб-приложениях сделанных на Вердж3Д

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 позволяет включать/выключать отбрасывание теней без программирования.

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

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