Fill-extrusion слой

Назначение и концепция 3D-экструзии

Fill-extrusion слой предназначен для визуализации трёхмерных объектов на основе двумерных полигонов. Основная идея заключается в том, что геометрия поверхности (polygon) «выдавливается» по вертикали с использованием атрибутов высоты, формируя объёмные объекты прямо в WebGL-сцене.

Ключевая особенность подхода — отсутствие полноценной 3D-модели: объекты строятся процедурно из 2D-данных. Это обеспечивает высокую производительность при отображении городских сцен, особенно при работе с векторными тайлами.

Fill-extrusion широко используется для:

  • визуализации зданий;
  • отображения рельефа (условно, через сегментированные полигоны);
  • построения аналитических 3D-диаграмм (например, плотность данных по районам);
  • стилизованных карт с объёмной символикой.

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

Fill-extrusion слой работает исключительно с полигональными данными. Наиболее распространённые источники:

Векторные тайлы

Наиболее производительный вариант. Данные приходят уже в оптимизированном виде:

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

GeoJSON

Используется для небольших наборов данных или прототипирования. Основные ограничения:

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

Базовая структура fill-extrusion слоя

Слой описывается через конфигурацию type: "fill-extrusion" внутри стиля карты.

Пример логической структуры:

  • source — источник данных (vector/geojson)
  • source-layer — слой внутри векторного тайла
  • paint — визуальные свойства extrusion
  • layout — редко используется, так как геометрия фиксирована

Основные параметры paint

fill-extrusion-height

Определяет высоту объекта в метрах (или единицах данных источника).

Типичный вариант:

  • фиксированное значение;
  • привязка к атрибуту;
  • вычисляемое выражение.

Высота может быть динамической:

  • по атрибуту здания (height)
  • по количеству этажей (levels * constant)
  • через интерполяцию zoom-dependent значений

fill-extrusion-base

Определяет базовую высоту (нижнюю границу экструзии). Используется для:

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

fill-extrusion-color

Цвет боковых граней и верхней поверхности. Поддерживаются:

  • статические цвета;
  • data-driven стилизация;
  • интерполяция по высоте или другим атрибутам.

Часто применяется градиентная логика:

  • низкие здания — светлые;
  • высокие — более насыщенные или тёмные.

fill-extrusion-opacity

Контролирует прозрачность всей extrusion-геометрии.

Особенности:

  • влияет на производительность при низких значениях (из-за blending);
  • может использоваться для эффектов «сканирования» города;
  • позволяет визуально совмещать слои.

fill-extrusion-pattern

Позволяет применять текстуры вместо однотонного цвета.

Используется для:

  • имитации фасадов;
  • стилизованных карт;
  • визуальных эффектов плотной городской застройки.

Работа с выражениями (Expressions)

Fill-extrusion слой активно использует выражения MapLibre Style Specification.

Пример динамической высоты

Высота зависит от атрибута:

  • здания: ["get", "height"]
  • этажность: ["*", ["get", "levels"], 3]

Интерполяция по zoom

При увеличении масштаба можно плавно «выращивать» здания:

  • на малом zoom — низкие или скрытые объекты;
  • на большом zoom — полная высота.

Это достигается через interpolate:

  • линейная интерполяция;
  • экспоненциальная для более резкого эффекта.

Z-order и визуальные особенности

Fill-extrusion слой подчиняется правилам сортировки WebGL:

  • порядок отрисовки зависит от высоты камеры;
  • нет полной геометрической глубины между объектами одного слоя;
  • пересечения упрощаются для оптимизации.

Важно учитывать:

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

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

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

Главный фактор производительности — источник данных. Векторные тайлы обеспечивают:

  • предсказуемую загрузку;
  • оптимизированную геометрию;
  • кэширование на стороне клиента.

Ограничение количества вершин

Чрезмерно сложные полигоны ухудшают производительность:

  • упрощение геометрии на сервере;
  • генерализация контуров зданий;
  • удаление лишних узлов.

Минимизация paint-вычислений

Сложные выражения в paint выполняются на GPU, но их количество влияет на:

  • стоимость пересчёта стилей;
  • частоту обновлений при zoom/pan.

Использование minzoom/maxzoom

Ограничение диапазона отображения снижает нагрузку:

  • extrusion не рендерится на низких масштабах;
  • включается только при детальном просмотре.

Типичные сценарии применения

3D города

Основной кейс — визуализация городской застройки:

  • плотность зданий;
  • высотные профили;
  • архитектурные особенности районов.

Аналитические карты

Fill-extrusion используется для отображения:

  • плотности населения;
  • статистики продаж;
  • интенсивности событий.

Высота становится метафорой величины показателя.


Симуляционные модели

В некоторых системах extrusion применяется для:

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

Ограничения модели fill-extrusion

Отсутствие реальной 3D-геометрии

Экструзия — это процедурная визуализация:

  • нет наклонных поверхностей;
  • нет сложных архитектурных форм;
  • отсутствуют отверстия и внутренние структуры.

Ограниченная физика света

Освещение упрощено:

  • псевдо-тени;
  • фиксированное направление света;
  • отсутствие глобального освещения.

Зависимость от качества данных

Результат напрямую зависит от источника:

  • нет высоты — объект плоский;
  • нет корректной базы — здания «висят»;
  • нет атрибутов — невозможна дифференциация.

Стилизация и визуальные эффекты

Цветовые градиенты по высоте

Распространённый приём:

  • низкие значения → холодные цвета;
  • высокие → тёплые или насыщенные.

Эффект «ночного города»

Используются:

  • тёмные базовые цвета;
  • светящиеся верхние поверхности;
  • минимальная прозрачность.

Псевдо-реализм

Комбинации:

  • текстурированные фасады;
  • вариативная высота;
  • мягкая цветовая коррекция.

Интеграция с другими слоями

Fill-extrusion часто комбинируется с:

Symbol слоями

  • подписи зданий;
  • POI метки;
  • номера домов.

Line слоями

  • дороги;
  • границы кварталов;
  • транспортные сети.

Fill слоями

  • районы;
  • зоны застройки;
  • административные границы.

Комбинация создаёт многослойную 3D-карту, где extrusion служит базовой геометрической массой сцены.