Как рендерить 3D-карты и рельеф из Python без боли и тяжелого C++
В прошлый раз, когда мне нужно было отрендерить качественную 3D-модель рельефа по матрице высот в Python, я уперся в стандартный выбор. Либо брать Matplotlib с его медленной 3D-графикой, либо тащить тяжелые GIS-пакеты, связываться с C++ обертками и вручную настраивать графический контекст.
Проект forge3d пытается закрыть этот зазор. Автор взял движок на Rust, завернул его в графический API WebGPU через библиотеку wgpu и собрал готовые колеса для Python. На выходе получился инструмент, который открывает интерактивный просмотрщик или рендерит сцены без окна буквально в несколько строчек кода.

Что умеет forge3d под капотом
Главная идея библиотеки — объединить привычные типы данных из дата-сайнса и GIS с быстрым GPU-рендерингом. Вам не нужно писать шейдеры или разбираться с конвейерами WebGPU, хотя внутри работает именно он.
Вот что библиотека отдает из коробки:
- Загружает матрицы высот из GeoTIFF и массивов NumPy.
- Читает облака точек в форматах LAZ, COPC и EPT.
- Работает с растровыми и векторными накладываемыми слоями.
- Поддерживает протокол COG для подгрузки тайлов из сети.
- Встраивается прямо в Jupyter Notebook через специальный виджет.
Установка предельно простая:
pip install forge3d
Если планируете крутить 3D прямо в ноутбуках или подтягивать тестовые датасеты, можно сразу поставить расширенный набор пакетов:
pip install "forge3d[all]"
Рендерим рельеф за пять строк кода
Посмотрим, как выглядит работа с просмотрщиком. Код ниже скачивает тестовый DEM-файл горы Рейнир, открывает окно и сохраняет кадр в высоком разрешении.
import forge3d as f3d
dem_path = f3d.fetch_dem("rainier")
with f3d.open_viewer_async(terrain_path=dem_path, width=1440, height=900) as viewer:
viewer.set_z_scale(0.1)
viewer.set_orbit_camera(phi_deg=28, theta_deg=49, radius=5400, fov_deg=42)
viewer.set_sun(azimuth_deg=302, elevation_deg=24)
viewer.snapshot("rainier.png", width=1920, height=1080)
Обратите внимание на синтаксис. Позиция солнца, угол камеры и масштабирование по оси Z задаются понятными методами. При этом сцену можно рендерить вовсе без графического окружения, скажем, в CI/CD или скриптах пакетной обработки карт.
Почему WebGPU и Rust
Выбор технологий здесь оправдан архитектурно. Rust дает высокую скорость и безопасность при обработке бинарных форматов вроде LAZ или тяжелых файлов GeoTIFF. WebGPU выступает современным кроссплатформенным API, который одинаково хорошо запускается на Vulkan, Metal или DirectX 12.
Вы получаете скомпилированные бинарники в одном пакете Wheel. Никаких ручных сборок C++ библиотек или конфликтующих системных драйверов OpenGL.
Что открыто, а за что придется платить
Разработчик выставил понятную модель. Базовый функционал распространяется под лицензиями Apache 2.0 и MIT. Вы можете строить поверхности, загружать облака точек, накладывать векторы и собирать анимации.
За картографические модули вроде MapPlate, экспорта в SVG/PDF, плашек масштаба и загрузки 3D-зданий из GeoJSON или CityJSON автор просит коммерческий ключ. Он активируется методом f3d.set_license_key(...).
Кому пригодится этот инструмент
Если ваша работа связана с анализом геоданных, визуализацией рельефа или созданием карт в Python, проект точно стоит отложить в закладки. У библиотеки около 560 звезд на GitHub, но код выглядит чистым, а документация содержит много рабочих примеров.
Для простых 2D-карт лучше оставить Folium или GeoPandas. Но если нужен быстрый 3D-рельеф или обработка облаков точек без погружения в низкоуровневую графику, forge3d справится с этой задачей без лишних проблем.