Skip to main content

forge3d

Path-traced terrain and cartography for Python.
Rust + WebGPU underneath. Real elevation data in, print-resolution maps out.

PyPI Python 3.10+ License Docs

Mount Shasta rendered by forge3d, snow and glaciers picked out by low-angle sun against a dark sky

Mount Shasta, path-traced with global illumination and terrain shadows.
Drag to orbit it live ›  ·  USGS 3DEP elevation  ·  23 cloud-free Sentinel-2 composites


Install

pip install forge3d
Optional extras
pip install "forge3d[jupyter]"   # notebook widget support
pip install "forge3d[datasets]"  # on-demand sample datasets
pip install "forge3d[all]"       # everything

Sixty seconds to a render

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)

fetch_dem pulls the elevation model, the viewer opens a real window you can orbit, and snapshot writes the frame at whatever resolution you ask for.

Population and thematic rasters

You can now turn a population raster into a continuous raised, shaded surface, give each land-cover class its own colour, or show two variables together with a 3×3 colour matrix. For example, height can show population density while colour shows how it has changed.

RasterHeightSurfaceStyle, CategoricalRasterStyle and BivariateRasterStyle plug into MapScene using prepared arrays or local raster files. Missing cells stay empty, units and class boundaries remain explicit, and the styles return legend data with the labels and ranges needed to explain the map. You can save and reload the styled scene through the existing scene-bundle workflow.

See the raster styling guide and the runnable public-API example.


Made with forge3d

Every map below is rendered end to end by forge3d — titles, legends and scale bars included. Nothing here was hand-edited or composited in another tool.

Circular plan view of Lyon with every building extruded, the Rhone and Saone running through it
Lyon, LOD2 buildings
CityGML extrusion over RGE ALTI terrain
Egypt in cold blue relief with the Nile and its delta glowing orange
Egypt, population
GHSL R2023A density over shaded relief
France coloured by a two-variable temperature and precipitation scheme
France, climate
TerraClimate temperature × precipitation
Iberian peninsula land cover, forest greens along the north and mountain ranges, crop yellows across the meseta
Iberia, land cover 2024 — Sentinel-2 at 10 m classified over terrain, legend composed in-engine
Germany in hypsometric relief with the Rhine, Elbe and Danube drainage networks traced in blue
Germany, hydrology — HydroSHEDS rivers and lakes over a hypsometric DEM

Turkiye seen at a low angle with population density extruded as thousands of spikes, Istanbul the tallest

Türkiye, population density — a million WorldPop 2020 cells extruded on a log scale, labelled and lit in a single pass

Animated loop of wildfire smoke plumes drifting across California through summer 2025

And it moves.

Volumetric smoke driven by HRRR forecast fields, advected across California through the summer 2025 fire season and rendered frame by frame — same scene graph as the stills, one camera, no compositing.

Scenes are driven from Python end to end, so a time axis is just another loop: fetch the fields, step the clock, call snapshot, hand the frames to ffmpeg.

The renders above are downsampled for this page. Full-resolution masters — up to 7200×7200 — are on the gallery.


What forge3d covers

Terrain Interactive viewing via open_viewer_async() and ViewerHandle; snapshots from GeoTIFF or numpy DEMs; clipmaps for large regions
Rendering Path tracing, PBR materials, subsurface scattering, water and reflections, cloud and contact shadows, AOV and EXR output
Data COG streaming, CRS helpers, LAZ/COPC/EPT point clouds, 3D Tiles, GeoJSON, CityJSON, on-demand sample datasets
Cartography Raster and vector overlays, labels with halo and occlusion, graticules, Legend, ScaleBar, NorthArrow, MapPlate
Offscreen Scene, Session, TerrainRenderer and TerrainRenderParams for headless and batch work
Output PNG and PNG16, SVG and PDF vector export, scene bundles, notebook widgets

MapPlate composition, vector export and the building import pipelines are Pro features; set a key with forge3d.set_license_key(...) to unlock them.

Documentation

  • Quickstart — install, first viewer session, first overlay, first notebook widget
  • Feature Map — repo-wide overview of the supported workflows
  • Tutorials — guided GIS and Python tracks
  • Gallery — finished recipes at full resolution
  • API Reference — the full public Python surface

License

The open-source core is released under Apache-2.0 OR MIT. Pro-gated features require a commercial license key.

Metadata

Release files for forge3d 1.42.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for forge3d 1.42.0
File Size Uploaded
forge3d-1.42.0.tar.gz 12.6 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for forge3d 1.42.0
File
forge3d-1.42.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
forge3d-1.42.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
forge3d-1.42.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
forge3d-1.42.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.10 abi3 macOS 11.0+ ARM64, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64 Details

Total release size: 90.0 MB

Release files / forge3d-1.42.0.tar.gz

Download URL forge3d-1.42.0.tar.gz
Size 12.6 MB
Tags Source
SHA-256 checksum
How to use checksums
07c25de8bbefb01d5bcaf28a04ce369c463a28489f41bd41f30aeaa78c678369
BLAKE2b-256 checksum
How to use checksums
4be29f7d24358bfc7943ddffdf9065d1a1c6b5a3e676df43d2095298848cd802
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / forge3d-1.42.0-cp310-abi3-win_amd64.whl

Download URL forge3d-1.42.0-cp310-abi3-win_amd64.whl
Size 16.1 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
c31eda2cabcb6951242b5a3ba6094f5e3c57f30724c34de3a713e8905fd46f36
BLAKE2b-256 checksum
How to use checksums
5299e26b4c048082c9871181e560594a77c0d0cc083389dc824a5f1226882436
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / forge3d-1.42.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL forge3d-1.42.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 16.8 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
2960a8b97f19fa7c0671514d5f06a0d7c253a44eedd5243c87a9f4afb40d1abe
BLAKE2b-256 checksum
How to use checksums
09720e035718f7ac91013ccc1f720644e22a097afca2d9d51a413c517e6fed82
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / forge3d-1.42.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL forge3d-1.42.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 16.4 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
e52b90c0d4c5152e246850c04e027360ceb29833c30ad606edeafd7fcf526914
BLAKE2b-256 checksum
How to use checksums
4bbe5bcf30c884c5dad27359f5be29656b7c59a8960b565d8f7c048f588f29fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / forge3d-1.42.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL forge3d-1.42.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 28.1 MB
Tags CPython 3.10 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b4ce078c695324f0adb6f369ea3ab46ca24180f04497878a39c2f424154e8cd3
BLAKE2b-256 checksum
How to use checksums
ea735596666a35d8b657594ebf0fa59d805a3fe8bfd16bd7bce4bb3ab68da88b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page