Hillshade слой

Природа hillshade-рендеринга

Hillshade слой представляет собой визуализацию рельефа, основанную на анализе цифровой модели высот (DEM). Его задача — имитация освещения поверхности земного рельефа источником света под заданным углом, что позволяет подчеркнуть формы местности: хребты, впадины, склоны и плато.

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

Источники данных для hillshade

Hillshade слой не работает изолированно и всегда опирается на источник данных типа raster-dem. На практике используются следующие форматы:

  • Mapbox Terrain RGB — кодирование высот в каналы RGB
  • Terrarium tiles — открытый формат с высотой в пикселях
  • Custom DEM tiles — собственные тайлы с высотной информацией

Источник объявляется как raster-dem и затем подключается к стилю карты.

Подключение DEM источника

Перед добавлением hillshade слоя необходимо определить источник высот:

map.addSource('terrain-dem', {
  type: 'raster-dem',
  url: 'https://example.com/tiles/terrain-rgb.json',
  tileSize: 256,
  encoding: 'mapbox'
});

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

  • type: raster-dem — обязательный тип источника
  • url — TileJSON или шаблон тайлов
  • tileSize — размер тайла (обычно 256 или 512)
  • encoding — способ кодирования высот (mapbox или terrarium)

Добавление hillshade слоя

После подключения DEM можно создать визуальный слой рельефа:

map.addLayer({
  id: 'hillshade-layer',
  type: 'hillshade',
  source: 'terrain-dem',
  layout: {
    visibility: 'visible'
  },
  paint: {
    'hillshade-shadow-color': '#000000',
    'hillshade-highlight-color': '#ffffff',
    'hillshade-accent-color': '#4682b4',
    'hillshade-exaggeration': 0.5
  }
});

Основные свойства слоя

hillshade-shadow-color

Определяет цвет теневых областей, то есть участков, не освещённых виртуальным источником света. Обычно используется тёмно-серый или чёрный оттенок.

hillshade-highlight-color

Задает цвет освещённых участков поверхности. Влияет на визуальную «яркость» склонов, обращённых к источнику света.

hillshade-accent-color

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

hillshade-exaggeration

genui{“math_block_widget_always_prefetch_v2”:{“content”:“y = kx”}}

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

Геометрия освещения

Hillshade моделирует освещение через два ключевых параметра: азимут и высоту источника света.

  • azimuth — направление света по компасу (в градусах)
  • altitude — высота источника над горизонтом

Эти параметры влияют на расположение теней и общее восприятие рельефа. Например, низкий угол освещения усиливает тени и делает рельеф более драматичным, тогда как высокий угол уменьшает контраст.

Внутренний алгоритм вычисления

Каждый пиксель DEM интерпретируется как точка в трёхмерном пространстве. Для неё вычисляются:

  1. Производная по X (изменение высоты по долготе)
  2. Производная по Y (изменение высоты по широте)
  3. Нормаль поверхности
  4. Скалярное произведение нормали с направлением света

Результатом является интенсивность освещения, нормированная в диапазон от 0 до 1.

Влияние масштабирования карты

Hillshade слой чувствителен к уровню зума:

  • На низких zoom-уровнях рельеф сглаживается
  • На средних уровнях проявляются основные формы рельефа
  • На высоких уровнях становятся заметны локальные детали

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

Комбинирование с terrain

Hillshade часто используется совместно с 3D terrain:

map.setTerrain({
  source: 'terrain-dem',
  exaggeration: 1.2
});

В этом случае hillshade перестает быть просто 2D эффектом и начинает взаимодействовать с реальной геометрией карты, усиливая ощущение глубины.

Производительность и оптимизация

Hillshade слой относится к GPU-интенсивным операциям, однако оптимизация достигается за счёт:

  • тайловой структуры DEM
  • кэширования растровых данных
  • предрасчёта нормалей в шейдерах
  • ограниченного диапазона влияния слоя

При высоких нагрузках рекомендуется:

  • использовать 512px тайлы вместо 256px
  • ограничивать максимальный zoom DEM
  • избегать избыточного количества raster-dem источников

Прозрачность и композитинг

Hillshade слой может комбинироваться с другими слоями через прозрачность и порядок отрисовки:

  • размещение под слоями дорог и границ
  • наложение под label-слои
  • использование blend-моделей в стиле карты

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

Использование выражений в стиле

Параметры hillshade поддерживают динамическое изменение через выражения:

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

Это позволяет создавать адаптивные карты, где рельеф подстраивается под контекст отображения.

Типовые ошибки интеграции

Часто встречаются следующие проблемы:

  • отсутствие raster-dem источника перед добавлением слоя
  • неверное encoding (mapbox vs terrarium)
  • слишком высокий exaggeration, приводящий к визуальным артефактам
  • конфликт порядка слоёв (hillshade поверх labels)

Каждая из этих ошибок приводит либо к отсутствию рельефа, либо к искажённому отображению поверхности.

Роль hillshade в картографической визуализации

Hillshade слой используется как базовый инструмент придания глубины плоским картам. Он не изменяет геометрию объектов, но формирует восприятие рельефа через светотеневую модель, что делает карту более информативной при анализе местности, маршрутов и природных объектов.