Градиенты неба

Слой неба в Mapbox GL JS представляет собой отдельный тип визуального слоя, отвечающий за отрисовку атмосферы над сценой карты. Он формирует визуальное окружение над горизонтом и тесно связан с перспективной камерой, освещением и параметрами времени суток.

В системе рендеринга Mapbox используется WebGL-пайплайн, где небо существует как специализированный слой sky, обрабатываемый после геометрии карты, но до финального композитинга сцены. Его задача — заполнение области над горизонтом с учётом:

  • угла камеры (pitch, bearing)
  • положения виртуального солнца
  • параметров атмосферы
  • выбранного режима неба

Слой неба не является географическим объектом и не привязан к координатам карты. Он существует в экранном пространстве и реагирует на ориентацию камеры.

Режимы отображения неба

Градиентное небо (sky-gradient)

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

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

Ключевые параметры:

  • sky-gradient — задаёт цветовой градиент
  • sky-horizon-color — цвет у горизонта
  • sky-horizon-blend — ширина переходной зоны

Градиент вычисляется в зависимости от нормализованной высоты взгляда пикселя в экранном пространстве.

Атмосферное небо (sky-atmosphere)

Атмосферный режим моделирует физически более правдоподобное рассеяние света в атмосфере. Он имитирует поведение Рэлеевского и Ми-рассеяния, создавая реалистичное освещение неба.

Используются параметры:

  • sky-atmosphere-sun — положение солнца
  • sky-atmosphere-sun-intensity — интенсивность солнечного света
  • sky-opacity — общая прозрачность слоя

Этот режим тесно связан с системой освещения и может влиять на цвет воды, земли и тумана.

Формирование градиента неба

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

Упрощённо:

  • вычисляется высота направления взгляда
  • нормализуется значение от горизонта до зенита
  • применяется интерполяция цветов

Градиент задаётся либо фиксированными цветами, либо выражением с интерполяцией в зависимости от zoom и времени суток.

Вертикальная интерполяция

Внутренне используется линейная интерполяция:

  • нижняя граница: цвет горизонта
  • верхняя граница: цвет зенита
  • переходная зона: мягкое смешивание

Особое значение имеет параметр sky-horizon-blend, который управляет шириной области смешивания. Малые значения дают резкий переход, большие — плавный и протяжённый градиент.

Параметры слоя sky

Конфигурация слоя sky задаётся в стиле карты и поддерживает JSON-описание:

{
  "id": "sky",
  "type": "sky",
  "paint": {
    "sky-type": "gradient",
    "sky-gradient": [
      "interpolate",
      ["linear"],
      ["sky-radial-progress"],
      0.0,
      "rgba(0, 0, 30, 1.0)",
      1.0,
      "rgba(120, 170, 255, 1.0)"
    ],
    "sky-horizon-color": "#f5d0a2",
    "sky-horizon-blend": 0.5
  }
}

Ключевые свойства

  • sky-type — режим отображения (gradient или atmosphere)
  • sky-gradient — выражение цвета
  • sky-horizon-color — базовый цвет горизонта
  • sky-horizon-blend — ширина перехода
  • sky-opacity — прозрачность слоя

Влияние камеры на визуализацию

Слой неба напрямую зависит от параметров камеры:

  • pitch — наклон камеры изменяет видимую площадь неба
  • zoom — влияет на масштаб сцены и плотность визуальных переходов
  • bearing — вращение сцены не изменяет небо напрямую, но влияет на восприятие освещения

При увеличении pitch небо занимает большую часть кадра, а градиент становится более выраженным.

Временная динамика и симуляция суток

Градиентное небо часто используется совместно с процедурной симуляцией времени суток. В этом случае параметры цвета интерполируются между наборами состояний:

  • рассвет
  • день
  • закат
  • ночь

Изменение выполняется через плавное смешивание значений sky-gradient и sky-horizon-color, часто на основе внешнего таймера или географического положения солнца.

Взаимодействие с освещением сцены

В Mapbox GL JS слой неба связан с системой освещения, которая влияет на:

  • цвет поверхности земли
  • отражения воды
  • тени объектов 3D

При использовании sky-atmosphere освещение становится физически согласованным, поскольку небо и свет вычисляются из одного источника — положения солнца.

Производительность и особенности рендеринга

Слой неба является относительно дешёвым в вычислительном плане, поскольку:

  • рендерится как экранный шейдер
  • не требует обработки геометрии
  • не использует тайловую систему

Однако при использовании сложных выражений в sky-gradient нагрузка на GPU увеличивается из-за дополнительных вычислений интерполяции.

Связь с стилями и визуальными сценами

В системе стилей Mapbox GL JS небо часто используется как часть общего визуального языка карты. В сочетании с платформой Mapbox оно становится инструментом формирования атмосферы сцены.

Градиентное небо применяется в:

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

Физическая и художественная интерпретация

Градиент неба может быть реализован как:

  • физическая модель (атмосферное рассеяние)
  • художественная абстракция (цветовые переходы без физики)

Первый подход используется для реалистичных сцен, второй — для стилизованных интерфейсов, где важнее читаемость и визуальная иерархия, чем точность света.

Комбинирование с туманом и облаками

Хотя небо в Mapbox GL JS не включает полноценную систему облаков, визуальный эффект может усиливаться через:

  • fog слой
  • цветовую коррекцию горизонта
  • снижение контраста в нижней части неба

Это позволяет создавать ощущение глубины и объёма атмосферы даже без геометрических облаков.

Принципы настройки визуального баланса

При проектировании градиента учитываются:

  • контраст между землёй и небом
  • читаемость тайлов и объектов
  • сохранение фокуса на данных карты
  • гармония цветовой палитры

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