Слой sky используется для отрисовки неба в 3D-сценах,
создавая визуальную глубину между земной поверхностью и атмосферой. Он
работает как фон сцены, но при этом является полноценным слоем карты и
участвует в рендеринг-пайплайне WebGL.
Ключевая особенность слоя заключается в том, что он не является статической картинкой: его параметры могут зависеть от положения камеры, освещения и времени суток, формируя динамическое небо.
Слой добавляется через map.addLayer после инициализации
карты:
map.on('load', () => {
map.addLayer({
id: 'sky-layer',
type: 'sky',
paint: {
'sky-type': 'atmosphere'
}
});
});
Слой sky обычно добавляется в самый низ визуального
стека, чтобы находиться позади всех других слоёв.
Режим atmosphere создаёт физически-ориентированное небо
с имитацией рассеивания света. Он зависит от положения солнца и
камеры.
paint: {
'sky-type': 'atmosphere'
}
Особенности:
Режим gradient задаёт небо через цветовой градиент. Он
менее физически точный, но более управляемый.
paint: {
'sky-type': 'gradient'
}
Используется в случаях:
Контролирует прозрачность слоя неба.
paint: {
'sky-opacity': 0.8
}
Используется для:
Определяет градиент неба при использовании
sky-type: gradient.
paint: {
'sky-type': 'gradient',
'sky-gradient': [
'interpolate',
['linear'],
['sky-radial-progress'],
0, 'rgba(0,0,0,1)',
1, 'rgba(135,206,235,1)'
]
}
Часто используется вместе с выражением interpolate, что
позволяет динамически изменять цвета.
Задаёт центр градиента относительно экрана.
'sky-gradient-center': [0, 0]
Применение:
Определяет радиус влияния градиента.
'sky-gradient-radius': 90
Чем больше значение, тем более размыт переход между цветами.
Слой sky тесно связан с параметрами камеры:
При использовании atmosphere изменение pitch особенно
заметно: небо «движется» относительно горизонта.
map.setPitch(60);
map.setBearing(120);
В результате создаётся эффект наблюдения сцены под углом, где небо становится частью 3D-пространства.
Sky слой может использоваться совместно с освещением карты через
light:
map.setLight({
anchor: 'map',
color: 'white',
intensity: 0.5
});
При этом:
Sky слой поддерживает выражения Mapbox GL JS, включая динамические параметры.
'sky-opacity': [
'interpolate',
['linear'],
['zoom'],
5, 0,
10, 1
]
Это позволяет:
Анимация достигается через setPaintProperty или
requestAnimationFrame.
let opacity = 0;
function animate() {
opacity += 0.01;
if (opacity > 1) opacity = 0;
map.setPaintProperty('sky-layer', 'sky-opacity', opacity);
requestAnimationFrame(animate);
}
animate();
Применение:
Sky особенно важен при использовании fill-extrusion и
3D-террейна.
Типичная структура сцены:
Sky всегда рендерится позади, но визуально завершает сцену, особенно при наклоненной камере.
Sky должен добавляться первым среди визуальных слоёв фона:
map.addLayer(skyLayer); // до 3D-объектов
При использовании terrain и fog необходимо
учитывать согласованность:
Несогласованные значения приводят к визуальным разрывам горизонта.
Полностью непрозрачный sky может:
Sky слой относительно лёгкий, но при сложных сценах важно учитывать:
setPaintProperty| Режим камеры | Поведение sky |
|---|---|
| Top-down | почти не виден |
| Tilted (45°) | выраженная перспектива |
| Horizon view | максимальный эффект атмосферы |
Sky выступает как финальный слой визуальной композиции:
Он не содержит геометрии карты, но влияет на восприятие всей сцены сильнее многих географических слоёв.