Fill-extrusion-base

В экосистеме Mapbox GL JS слой типа fill-extrusion предназначен для построения трёхмерных объектов на основе полигонов. Он используется для визуализации зданий, рельефных форм, инфраструктуры и любых областных геометрий с заданной высотой. Ключевым параметром, определяющим нижнюю границу экструдированного объекта, является fill-extrusion-base.


Смысл и роль fill-extrusion-base

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

Таким образом, экструдированный объект описывается диапазоном:

  • нижняя граница: fill-extrusion-base
  • верхняя граница: fill-extrusion-height

Если base не задан, он по умолчанию равен нулю, и объект «растёт» от поверхности карты.


Геометрическая интерпретация

Для каждого полигона в слое выполняется вертикальное выдавливание:

  • 2D-полигон преобразуется в призму
  • нижняя грань фиксируется на уровне base
  • верхняя грань фиксируется на уровне height

Математически это можно представить как интервал высот:

z ∈ [base, height]

Где:

  • base — стартовая высота
  • height — конечная высота

Базовое использование

Наиболее простая конфигурация слоя с заполненной высотой и базой:

map.addLayer({
  id: 'buildings-3d',
  type: 'fill-extrusion',
  source: 'composite',
  'source-layer': 'building',
  paint: {
    'fill-extrusion-color': '#aaa',
    'fill-extrusion-height': ['get', 'height'],
    'fill-extrusion-base': ['get', 'min_height'],
    'fill-extrusion-opacity': 0.9
  }
});

В данном примере:

  • height определяет верх здания
  • min_height определяет начало экструзии
  • создаётся корректная модель зданий с учётом реальных отступов (например, подиумов или перекрытий)

Разница между fill-extrusion-height и fill-extrusion-base

Параметр Назначение Роль в модели
fill-extrusion-height Верхняя граница максимальная высота объекта
fill-extrusion-base Нижняя граница стартовая высота объекта

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


Использование данных из атрибутов

Чаще всего fill-extrusion-base задаётся через свойства источника данных:

'fill-extrusion-base': ['get', 'min_height']

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

  • height — общая высота здания
  • min_height — высота основания (например, подиум, стилобат)

Если данные отсутствуют, используется fallback:

'fill-extrusion-base': ['coalesce', ['get', 'min_height'], 0]

Экспрессии и динамическая настройка

fill-extrusion-base поддерживает выражения Mapbox Style Specification, что позволяет изменять базу в зависимости от масштаба или атрибутов.

Масштабозависимое смещение

'fill-extrusion-base': [
  'interpolate',
  ['linear'],
  ['zoom'],
  15, 0,
  20, ['get', 'min_height']
]

На малых зумах здания «прижаты» к земле, а на высоких появляется реальная архитектурная структура.


Взаимодействие с fill-extrusion-height

Корректная 3D-модель требует согласованной пары:

'fill-extrusion-height': ['get', 'height'],
'fill-extrusion-base': ['get', 'min_height']

Если нарушить логику:

  • base > height → объект исчезает
  • base = height → нулевая высота (плоскость)
  • base < 0 → объект уходит под уровень карты

Практические сценарии применения

1. Реалистичные городские модели

Использование min_height позволяет отображать:

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

2. Слои инфраструктуры

Для мостов и эстакад:

'fill-extrusion-base': 10,
'fill-extrusion-height': 40

Задаёт визуальное «подвешивание» объекта над землёй.

3. Аналитическая визуализация

При работе с данными о плотности застройки можно использовать base для выделения уровней:

  • жилые этажи
  • коммерческие уровни
  • технические зоны

Влияние на визуальную глубину сцены

fill-extrusion-base напрямую влияет на:

  • восприятие высотной иерархии
  • корректность теней (при включённом light)
  • перекрытие объектов в перспективе

При неправильной настройке возможны артефакты:

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

Сочетание с освещением

При использовании освещения сцены (light) база влияет на формирование теней:

map.setLight({
  anchor: 'map',
  color: 'white',
  intensity: 0.5
});

Тени от объектов начинаются от base, что делает важным точное определение этого параметра для реалистичной сцены.


Особенности работы с нулевым значением

Если:

'fill-extrusion-base': 0

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


Типичные ошибки

  1. Отсутствие base при наличии min_height

    • приводит к «залипанию» объектов в землю
  2. Использование неконсистентных данных

    • height < min_height ломает геометрию
  3. Неправильные единицы измерения

    • метры vs условные единицы слоя

Оптимизация рендеринга

При большом количестве экструдированных объектов:

  • избегается сложная динамика base на каждом кадре
  • предпочтительны атрибутные значения
  • минимизируется количество выражений interpolate

Статические значения fill-extrusion-base рендерятся быстрее, чем вычисляемые через сложные expressions.


Поведение при наклоне карты

При использовании pitch и bearing:

  • fill-extrusion-base формирует нижнюю плоскость касания сцены
  • увеличивается важность корректных данных о min_height
  • ошибки базы становятся визуально заметнее

Особенно критично при углах наклона выше 45°.


Связь с источниками данных зданий

В стандартных тайлах зданий часто используются поля:

  • render_min_height
  • render_height

или их аналоги. Они напрямую маппятся на:

fill-extrusion-base → min_height
fill-extrusion-height → height

Итоговая модель поведения

fill-extrusion-base определяет:

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

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