3D-режим в Kepler.gl расширяет стандартную двумерную картографическую визуализацию, добавляя поддержку высот, наклона камеры, объёмных слоёв и перспективного рендеринга. В основе этого режима лежит интеграция с WebGL и архитектурой deck.gl, что позволяет обрабатывать большие объёмы геоданных с аппаратным ускорением и сохранять интерактивность даже при высокой плотности объектов.
3D-визуализация в Kepler.gl не является отдельным режимом карты, а представляет собой комбинацию настроек камеры, слоёв и трансформаций данных. Основная логика строится вокруг концепции сцены, где каждый слой может быть интерпретирован как двумерный или трёхмерный объект.
Ключевые компоненты:
Kepler.gl не просто «включает 3D», а переключает систему координат и визуальную интерпретацию сцены, добавляя Z-компонент в географические данные.
3D-режим активируется через изменение состояния камеры. Вместо ортографической проекции используется перспективная, что позволяет имитировать человеческое зрение.
Основные параметры камеры:
При увеличении pitch происходит переход от плоской карты к сцене с выраженной глубиной. При значениях близких к 0° визуализация остаётся двумерной, а при 45–60° появляется выраженный объём.
В Kepler.gl 3D-режим не задаётся отдельным булевым флагом. Вместо этого он формируется комбинацией параметров в состоянии приложения:
Пример логики состояния:
Дополнительно важно учитывать, что изменение pitch автоматически влияет на поведение анимации и перерасчёт матрицы трансформации в WebGL.
Основной механизм 3D-визуализации в Kepler.gl — экструзия (extrusion). Она применяется к полигональным слоям и позволяет «выдавливать» геометрию по оси Z.
Типичные слои:
Высота объекта вычисляется на основе атрибута данных:
h = f(v)
где:
В реальных сценариях f может быть линейной, логарифмической или нормализующей.
Kepler.gl позволяет управлять тем, как числовые данные преобразуются в высоту объектов. Это критически важно для предотвращения визуальных искажений.
Основные подходы:
Визуально это влияет на читаемость карты: без нормализации высокие значения «подавляют» остальные объекты, делая сцену непропорциональной.
3D-режим в Kepler.gl включает модель освещения, основанную на направленном источнике света. Это позволяет усиливать восприятие глубины и рельефа.
Основные параметры света:
При изменении угла камеры освещение пересчитывается, создавая эффект динамического затенения. Это особенно заметно на экструзированных полигонах и 3D-гексах.
Одним из наиболее мощных инструментов 3D-визуализации является слой гексагонов на основе системы H3. Он позволяет агрегировать данные в регулярную пространственную сетку.
Каждая ячейка:
Высота гексагона вычисляется аналогично другим extruded-слоям, но с учётом плотности данных внутри ячейки.
3D-режим требует значительных ресурсов GPU, поэтому Kepler.gl использует несколько оптимизаций:
При увеличении количества объектов сложность сцены растёт примерно линейно по числу вершин, что напрямую влияет на FPS.
Интерактивность сохраняется даже в перспективной проекции. Пользовательские действия интерпретируются через преобразование координат:
Проблема 3D-взаимодействия заключается в искажении расстояний: объекты на дальнем плане визуально сжимаются, но их географические координаты остаются линейными.
Несмотря на мощность, 3D-визуализация имеет ограничения:
Эти ограничения требуют аккуратной настройки сцены и минимизации избыточных слоёв.
Kepler.gl хранит состояние сцены как единый объект, что позволяет синхронизировать 3D-параметры между компонентами приложения. Это особенно важно при:
Состояние камеры и слоёв сериализуется, включая pitch, bearing и параметры экструзии, что позволяет полностью восстановить 3D-сцену без потерь.