Fog — это механизм атмосферного затуманивания сцены в MapLibre GL JS, позволяющий имитировать воздушную перспективу, дымку и постепенное растворение удалённых объектов в атмосфере. Эффект особенно востребован при работе с глобусом, трёхмерным рельефом и большими масштабами обзора карты.
Без атмосферного затухания удалённые объекты выглядят слишком контрастными и искусственными. Fog создаёт визуальную глубину сцены, улучшает восприятие расстояний и делает отображение карты более реалистичным.
Основные задачи эффекта:
Fog представляет собой полупрозрачный атмосферный слой, который постепенно смешивается с изображением карты по мере удаления объектов от камеры.
С точки зрения рендеринга происходит интерполяция между цветом объекта и цветом атмосферы:
Итоговый цвет = Цвет объекта × (1 - коэффициент тумана)
+ Цвет атмосферы × коэффициент тумана
Чем дальше объект расположен от наблюдателя, тем выше влияние атмосферного цвета.
В результате:
Эффект задаётся через объект настроек карты.
Общая схема выглядит следующим образом:
map.setFog({
color: "#ffffff"
});
После применения карта начинает использовать указанные параметры атмосферы при рендеринге сцены.
Чаще всего Fog применяется совместно с:
Минимальный пример:
map.setFog({
color: "#d8e8ff"
});
В данном случае удалённые объекты начинают постепенно смешиваться со светло-голубым оттенком.
Более реалистичный вариант:
map.setFog({
color: "#d8e8ff",
"high-color": "#245bde",
"horizon-blend": 0.15,
"space-color": "#000814",
"star-intensity": 0.25
});
Такой набор параметров позволяет создать атмосферу, напоминающую вид Земли из космоса.
Параметр color определяет основной цвет атмосферы.
Пример:
map.setFog({
color: "#ffffff"
});
или
map.setFog({
color: "rgb(200, 220, 255)"
});
или
map.setFog({
color: "rgba(220, 240, 255, 1)"
});
Белый туман:
color: "#ffffff"
Создаёт эффект облачной погоды или сильной дымки.
Светло-голубой:
color: "#d8e8ff"
Имитирует ясную атмосферу.
Серый:
color: "#b0b0b0"
Подходит для индустриальных карт и стилизации под пасмурную погоду.
Тёплый оранжевый:
color: "#ffb066"
Создаёт эффект закатного освещения.
Параметр задаёт цвет верхних слоёв атмосферы.
Пример:
map.setFog({
color: "#d8e8ff",
"high-color": "#245bde"
});
При наблюдении под большим углом карта получает дополнительный атмосферный градиент.
Нижняя часть атмосферы:
color
Верхняя часть атмосферы:
high-color
Это позволяет получить плавный переход между слоями воздуха.
map.setFog({
color: "#d8e8ff",
"high-color": "#4f7dff"
});
map.setFog({
color: "#ffcb8c",
"high-color": "#ff6b35"
});
Управляет степенью смешивания атмосферы возле линии горизонта.
Пример:
map.setFog({
color: "#d8e8ff",
"horizon-blend": 0.1
});
Обычно используются значения:
0.0 – 1.0
"horizon-blend": 0.05
Результат:
"horizon-blend": 0.2
Результат:
"horizon-blend": 0.8
Результат:
Определяет цвет космического пространства за пределами атмосферы.
Пример:
map.setFog({
"space-color": "#000000"
});
map.setFog({
color: "#d8e8ff",
"high-color": "#245bde",
"space-color": "#01030d"
});
Получается визуальное разделение между атмосферой планеты и окружающим космосом.
Регулирует яркость звёздного фона.
Пример:
map.setFog({
"star-intensity": 0.5
});
Отсутствие звёзд:
"star-intensity": 0
Слабая видимость:
"star-intensity": 0.2
Умеренная яркость:
"star-intensity": 0.5
Очень яркое небо:
"star-intensity": 1
Один из наиболее распространённых сценариев.
map.setFog({
color: "#d8e8ff",
"high-color": "#87b6ff",
"horizon-blend": 0.15,
"space-color": "#0b1020",
"star-intensity": 0
});
Особенности:
map.setFog({
color: "#1d3557",
"high-color": "#0d1b2a",
"horizon-blend": 0.3,
"space-color": "#000000",
"star-intensity": 0.8
});
Результат:
map.setFog({
color: "#ffcf99",
"high-color": "#ff7f50",
"horizon-blend": 0.4,
"space-color": "#140b1a",
"star-intensity": 0.2
});
Получается насыщенная тёплая атмосфера с характерным оранжевым горизонтом.
Параметры Fog можно изменять в процессе работы приложения.
Например, реализовать смену времени суток.
function setDay() {
map.setFog({
color: "#d8e8ff",
"high-color": "#87b6ff",
"horizon-blend": 0.15,
"space-color": "#0b1020",
"star-intensity": 0
});
}
function setNight() {
map.setFog({
color: "#1d3557",
"high-color": "#0d1b2a",
"horizon-blend": 0.3,
"space-color": "#000000",
"star-intensity": 0.8
});
}
Наиболее заметный эффект Fog проявляет себя при отображении рельефа.
Подключение рельефа:
map.addSource("terrain-source", {
type: "raster-dem",
url: "mapbox://mapbox.terrain-rgb"
});
map.setTerrain({
source: "terrain-source",
exaggeration: 1.5
});
После этого можно включить атмосферу:
map.setFog({
color: "#d8e8ff",
"horizon-blend": 0.2
});
Горные массивы на дальних расстояниях будут постепенно растворяться в дымке, как в реальном мире.
Для отображения планеты рекомендуется использовать глобус.
map.setProjection({
name: "globe"
});
Далее подключается атмосферный эффект:
map.setFog({
color: "#d8e8ff",
"high-color": "#245bde",
"space-color": "#000814"
});
На глобусе Fog создаёт видимый атмосферный ореол вокруг планеты.
Возможно плавное изменение настроек через таймер.
Пример постепенного изменения цвета:
let value = 0;
setInterval(() => {
value += 1;
map.setFog({
color: `rgb(${200 + value},220,255)`
});
}, 100);
Подобным образом реализуются:
Fog реализован на уровне GPU-шейдеров и оказывает относительно небольшое влияние на производительность.
Однако нагрузка может увеличиваться при сочетании следующих технологий:
Особенно заметна дополнительная нагрузка на мобильных устройствах.
Подходят лёгкие значения:
map.setFog({
color: "#eef5ff",
"horizon-blend": 0.1
});
Рекомендуется использовать полный набор настроек:
map.setFog({
color: "#d8e8ff",
"high-color": "#245bde",
"space-color": "#000814",
"star-intensity": 0.25,
"horizon-blend": 0.15
});
Полезно усиливать атмосферную перспективу:
map.setFog({
color: "#cfe3ff",
"horizon-blend": 0.35
});
Желательно использовать тёмные оттенки атмосферы:
map.setFog({
color: "#10213b",
"high-color": "#08111f",
"space-color": "#000000",
"star-intensity": 0.9
});
color: "#ffffff"
При высоких значениях дымки карта может выглядеть пересвеченной.
"horizon-blend": 1
Способен ухудшить читаемость удалённых объектов.
Плохой пример:
map.setFog({
color: "#00ff00",
"high-color": "#ff0000"
});
Резкий контраст между слоями атмосферы создаёт неестественный результат.
Туман должен сочетаться с:
При грамотной настройке Fog становится одним из наиболее эффективных инструментов визуального улучшения картографических сцен в MapLibre GL JS, позволяя создавать реалистичную атмосферу, подчёркивать глубину пространства и значительно повышать качество восприятия трёхмерных карт.