terrain-maker

Gallery

  • Gallery
    • Detroit: Sledding + XC Skiing (Combined Render)
    • San Diego: Complete Minimal Example
    • Detroit: Dual Colormap Render
    • Detroit: Elevation — Cardinal Views
    • Snow Sledding Score Analysis

Getting Started

  • Quick Start
    • Prerequisites
    • Installation
    • Your First Terrain
    • Run an Example
    • Next Steps
  • Installation
    • Requirements
    • Install with uv (Recommended)
    • Install with pip
    • Dependencies
    • Verify Installation
    • Troubleshooting
      • bpy not found
      • numba warnings
      • Memory issues with large DEMs

Examples

  • San Diego: A Complete Minimal Example
    • Overview
    • Quick Start
    • The Complete Pipeline
      • Step 1: Download DEM Data
      • Step 2: Load DEM Files
      • Step 3: Create and Transform Terrain
      • Step 4: Setup Colors and Water
      • Step 5: Create Mesh
      • Step 6: Setup Scene and Render
    • Key Features Demonstrated
      • NASA Data Integration
      • Transform Pipeline
      • High-Quality Rendering
    • Command-Line Options
    • Key Functions Used
    • What Makes This Minimal?
    • See Also
  • Great Lakes Elevation Visualization
    • Overview
    • Quick Start
    • The Code
    • Key Functions Used
    • Camera Views
    • See Also
  • Snow Integration: Sledding Location Analysis
    • Overview
    • Quick Start
    • Processing Pipeline
      • Step 1: Raw Input Data
      • Step 2: Slope Statistics
      • Step 3: Slope Penalties
      • Step 4: Score Components
      • Step 5: Final Score
    • The Code
    • Key Functions Used
    • Score Components
    • Output Files
    • See Also
  • Combined Render: Full-Featured Example
    • Overview
    • Quick Start
    • Example Image Command
    • Feature Categories
      • Dual Colormap System
      • Road Rendering
      • DEM Smoothing
      • Camera & Lighting
      • Print Quality
    • CLI Reference
      • Basic Options
      • Quality Options
      • Smoothing Options
      • Road Options
      • Advanced Mesh Features
        • Two-Tier Edge Extrusion
        • Boundary Smoothing
        • Edge Detection Methods
    • Pipeline Architecture
    • See Also

Guides

  • Flow Routing and Accumulation Guide
    • Overview
    • Part 1: Algorithm Foundations
      • The Core Problem
      • Why D8?
      • The Four-Stage Pipeline
    • Part 2: Stage 1 - Outlet Identification
      • The Key Insight
      • Outlet Types
      • Edge Mode Strategies
      • Implementation Pattern: Neighbor Iteration
    • Part 3: Stage 2a - Constrained Breaching
      • The Problem with Simple Filling
      • Lindsay’s Constrained Breaching
      • Algorithm: Dijkstra Least-Cost Path
      • Critical Insight: Cost Metric
      • Applying the Breach
    • Part 4: Stage 2b - Priority-Flood Fill
      • Barnes (2014) Algorithm
      • Why Priority Queue?
      • The Epsilon Gradient
    • Part 5: Stage 3 - D8 Flow Direction
      • After Conditioning
      • Diagonal Distance Matters
      • Handling Ties
    • Part 6: Stage 4 - Flow Accumulation
      • The Dependency Problem
      • Kahn’s Algorithm
      • Why This Works
      • Weighted Accumulation
    • Part 7: Flat Resolution
      • The Flat Area Problem
      • Garbrecht-Martz (1997) Dual-Gradient Solution
      • Why Both Gradients?
      • Visual Comparison
      • Implementation Detail: Finding High Points
    • Part 8: Water Body Integration
      • Why Lakes Are Hard
      • Our Solution: BFS Routing
      • Key Insight: Lakes Have Context
      • Inlet Detection
    • Part 9: Endorheic Basin Handling
      • What Are Endorheic Basins?
      • Detection Algorithm
      • Preservation Strategies
    • Part 10: Performance Optimization
      • The Bottleneck: Dijkstra Breaching
      • Solution: Parallel Dijkstra with Checkerboard Batching
      • Numba JIT Patterns We Learned
      • Caching Flow Results
    • Part 11: Debugging and Validation
      • The Three Validation Metrics
      • Cycle Detection
      • Mass Balance Check
      • Drainage Violation Check
      • Diagnostic Visualizations
    • Part 12: What We Tried That Didn’t Work
      • Attempt 1: Treating All Lakes as Sinks
      • Attempt 2: Single-Gradient Flat Resolution
      • Attempt 3: Aggressive Coastal Flow Override
      • Attempt 4: Naive Parallel Dijkstra
      • Attempt 5: High Epsilon for Noise Reduction
      • Attempt 6: Filling Before Outlet Identification
    • Part 13: Edge Cases and Gotchas
      • The Off-by-One Flow Direction Bug
      • The Diagonal Distance Bug
      • The Integer Overflow Bug
      • The Float Equality Bug
      • The Coordinate System Bug
      • The Rasterization Alignment Bug
    • Part 14: Testing Strategies
      • Unit Tests for Each Stage
      • Integration Tests
      • Visual Regression Tests
    • Part 15: Lessons Learned Summary
      • Algorithm Design
      • Implementation
      • Debugging
      • Gotchas
      • Water Bodies
    • Part 16: Example Output - San Diego with HydroLAKES
      • Pipeline Visualization Outputs
      • Key Observations
    • References
      • Primary Algorithm Papers
      • Classic References
      • Additional Resources
    • See Also
  • Diagnostic Tools
    • Overview
    • Wavelet Denoising Diagnostics
      • plot_wavelet_diagnostics
      • plot_wavelet_coefficients
      • generate_full_wavelet_diagnostics
    • Slope-Adaptive Smoothing Diagnostics
      • plot_adaptive_smooth_diagnostics
      • plot_adaptive_smooth_histogram
    • Bump Removal Diagnostics
      • plot_bump_removal_diagnostics
    • Score Upscaling Diagnostics
      • plot_upscale_diagnostics
      • generate_upscale_diagnostics
    • Render Histogram Analysis
      • generate_rgb_histogram
      • generate_luminance_histogram
    • CLI Integration
    • Best Practices
      • When to Use Diagnostics
      • Performance Considerations
    • API Reference
      • plot_wavelet_diagnostics()
      • plot_wavelet_coefficients()
      • generate_full_wavelet_diagnostics()
      • plot_adaptive_smooth_diagnostics()
      • plot_adaptive_smooth_histogram()
      • generate_full_adaptive_smooth_diagnostics()
      • plot_bump_removal_diagnostics()
      • generate_bump_removal_diagnostics()
      • plot_upscale_diagnostics()
      • generate_upscale_diagnostics()
      • generate_rgb_histogram()
      • generate_luminance_histogram()
    • See Also

API Reference

  • Core Module
    • Terrain Class
      • Terrain
        • Terrain.dem_shape
        • Terrain.dem_transform
        • Terrain.data_layers
        • Terrain.transforms
        • Terrain.vertices
        • Terrain.vertex_colors
        • Terrain.__init__()
        • Terrain.visualize_dem()
        • Terrain.add_transform()
        • Terrain.add_data_layer()
        • Terrain.get_bbox_wgs84()
        • Terrain.compute_data_layer()
        • Terrain.apply_transforms()
        • Terrain.configure_for_target_vertices()
        • Terrain.detect_water_highres()
        • Terrain.detect_water()
        • Terrain.set_color_mapping()
        • Terrain.set_blended_color_mapping()
        • Terrain.set_multi_color_mapping()
        • Terrain.compute_colors()
        • Terrain.create_mesh()
        • Terrain.geo_to_mesh_coords()
        • Terrain.compute_proximity_mask()
        • Terrain.compute_proximity_mask_grid()
        • Terrain.compute_ring_mask_grid()
        • Terrain.apply_ring_color()
    • Loading Functions
      • load_dem_files()
      • load_filtered_hgt_files()
    • Color Mapping
    • Data Layers
  • Data Loading Module
    • DEM Loading
      • load_filtered_hgt_files()
      • save_score_grid()
      • find_score_file()
    • Score Data
      • compute_sledding_score()
    • Roads
      • get_roads_tiled()
      • add_roads_layer()
      • rasterize_roads_to_layer()
      • smooth_road_vertices()
      • offset_road_vertices()
      • smooth_road_mask()
    • Diagnostics
      • generate_rgb_histogram()
      • generate_luminance_histogram()
      • plot_wavelet_diagnostics()
      • generate_upscale_diagnostics()
  • DEM Downloader Module
    • SRTM Data
    • Usage Examples
    • API Reference
      • get_srtm_tile_name()
      • calculate_required_srtm_tiles()
      • download_dem_by_bbox()
      • download_dem_by_place_name()
      • display_bbox_on_map()
    • See Also
  • Precipitation Downloader Module
    • API Reference
      • download_precipitation()
      • download_real_worldclim_annual()
      • download_real_worldclim_30s_annual()
      • download_real_prism_annual()
      • get_prism_annual_precip()
      • validate_precipitation_alignment()
      • list_available_datasets()
    • See Also
  • Transforms Module
    • Geographic Transforms
      • reproject_raster()
      • flip_raster()
      • scale_elevation()
      • downsample_raster()
    • Smoothing Transforms
      • feature_preserving_smooth()
      • wavelet_denoise_dem()
      • slope_adaptive_smooth()
      • remove_bumps()
      • despeckle_dem()
    • Score Data Transforms
      • smooth_score_data()
      • despeckle_scores()
      • upscale_scores()
    • Caching
      • TransformCache
        • TransformCache.cache_dir
        • TransformCache.enabled
        • TransformCache.dependencies
        • TransformCache.transforms
        • TransformCache.__init__()
        • TransformCache.compute_transform_hash()
        • TransformCache.get_cache_path()
        • TransformCache.get_metadata_path()
        • TransformCache.save_transform()
        • TransformCache.load_transform()
        • TransformCache.register_dependency()
        • TransformCache.register_transform()
        • TransformCache.get_dependency_chain()
        • TransformCache.get_full_cache_key()
        • TransformCache.invalidate_downstream()
  • Flow Accumulation Module
    • Overview
    • Main Functions
      • flow_accumulation()
    • Flow Direction
      • compute_flow_direction()
    • Drainage Area
      • compute_drainage_area()
    • Upstream Rainfall
      • compute_upstream_rainfall()
    • DEM Conditioning
      • condition_dem_spec()
      • condition_dem()
      • breach_depressions_constrained()
      • priority_flood_fill_epsilon()
    • Outlet and Basin Detection
      • identify_outlets()
      • detect_ocean_mask()
      • detect_endorheic_basins()
    • D8 Direction Constants
      • src.terrain.flow_accumulation.D8_DIRECTIONS
      • src.terrain.flow_accumulation.D8_OFFSETS
    • See Also
  • Flow Pipeline Module
    • Pipeline Steps
    • API Reference
      • compute_flow_with_basins()
    • See Also
  • Water Module
    • Water Detection
      • identify_water_by_slope()
    • Internal Functions
      • _calculate_slope()
      • _smooth_water_mask()
  • Water Bodies Module
    • Overview
    • Data Download
      • download_water_bodies()
      • download_nhd_water_bodies()
      • download_hydrolakes()
    • Rasterization
      • rasterize_lakes_to_mask()
    • Outlet and Inlet Detection
      • identify_outlet_cells()
      • identify_lake_outlets_from_nhd()
      • identify_lake_inlets()
    • Flow Routing
      • create_lake_flow_routing()
    • Usage with Flow Accumulation
    • See Also
  • Rendering Module
    • Scene Setup
      • clear_scene()
      • position_camera_relative()
      • setup_hdri_lighting()
      • setup_two_point_lighting()
      • create_background_plane()
    • Rendering
      • render_scene_to_file()
      • setup_render_settings()
    • Materials
      • apply_vertex_colors()
      • apply_terrain_with_obsidian_roads()
      • apply_test_material()
    • Water Detection
      • identify_water_by_slope()
  • Scene Setup Module
    • Background Plane
      • create_background_plane()
    • Camera Setup
      • setup_camera()
      • position_camera_relative()
      • calculate_camera_frustum_size()
    • Lighting
      • setup_two_point_lighting()
      • setup_hdri_lighting()
      • setup_light()
      • setup_world_atmosphere()
    • Scene Management
      • clear_scene()
      • setup_camera_and_light()
    • Utilities
      • create_matte_material()
      • hex_to_rgb()
  • Materials Module
    • Color Presets
    • Color Helper Functions
      • get_all_colors_choices()
      • get_all_colors_help()
      • get_terrain_materials_choices()
      • get_terrain_materials_help()
      • get_road_colors_choices()
      • get_road_colors_help()
      • get_base_materials_choices()
      • get_base_materials_help()
    • Color Lookup Functions
      • get_color()
      • get_base_material_color()
      • get_terrain_material_params()
    • Material Application Functions
      • apply_colormap_material()
      • apply_water_shader()
      • apply_terrain_with_obsidian_roads()
      • apply_glassy_road_material()
      • apply_test_material()
  • Blender Integration Module
    • Vertex Colors
      • apply_vertex_colors()
      • apply_ring_colors()
      • apply_road_mask()
    • Vertex Positions
      • apply_vertex_positions()
    • Mesh Creation
      • create_blender_mesh()
    • Performance Notes
  • Mesh Operations Module
    • Core Mesh Generation
      • generate_vertex_positions()
      • generate_faces()
      • _generate_faces_numba()
    • Boundary Detection
      • find_boundary_points()
    • Boundary Extension
      • create_boundary_extension()
    • Catmull-Rom Curve Fitting
      • catmull_rom_curve()
      • fit_catmull_rom_boundary_curve()
    • Boundary Processing
      • smooth_boundary_points()
      • deduplicate_boundary_points()
      • sort_boundary_points_angular()
      • sort_boundary_points()
    • Rectangle Edge Generation
      • generate_rectangle_edge_pixels()
      • generate_rectangle_edge_vertices()
      • generate_transform_aware_rectangle_edges()
      • generate_transform_aware_rectangle_edges_fractional()
      • diagnose_rectangle_edge_coverage()
    • Performance Optimizations
    • See Also
  • Mesh Cache Module
    • MeshCache
      • MeshCache
        • MeshCache.cache_dir
        • MeshCache.enabled
        • MeshCache.__init__()
        • MeshCache.compute_mesh_hash()
        • MeshCache.get_cache_path()
        • MeshCache.get_metadata_path()
        • MeshCache.save_cache()
        • MeshCache.load_cache()
        • MeshCache.clear_cache()
        • MeshCache.get_cache_stats()
    • Usage Patterns
    • Performance Notes
    • Integration with Pipeline
    • See Also
  • Color Mapping Module
    • Custom Colormaps
      • _build_boreal_mako_cmap()
    • Color Mapping Functions
      • elevation_colormap()
      • slope_colormap()
  • Roads Module
    • Quick Start
    • Core Functions
      • add_roads_layer()
      • rasterize_roads_to_layer()
    • Vertex Smoothing
      • smooth_road_vertices()
      • offset_road_vertices()
    • DEM Smoothing
      • smooth_dem_along_roads()
    • Mask Operations
      • smooth_road_mask()
    • Colormaps
      • road_colormap()
      • get_viridis_colormap()
  • Cache Module
    • DEMCache
      • DEMCache
        • DEMCache.cache_dir
        • DEMCache.enabled
        • DEMCache.__init__()
        • DEMCache.compute_source_hash()
        • DEMCache.get_cache_path()
        • DEMCache.get_metadata_path()
        • DEMCache.save_cache()
        • DEMCache.load_cache()
        • DEMCache.clear_cache()
        • DEMCache.get_cache_stats()
    • TransformCache
      • TransformCache
        • TransformCache.cache_dir
        • TransformCache.enabled
        • TransformCache.dependencies
        • TransformCache.transforms
        • TransformCache.__init__()
        • TransformCache.compute_transform_hash()
        • TransformCache.get_cache_path()
        • TransformCache.get_metadata_path()
        • TransformCache.save_transform()
        • TransformCache.load_transform()
        • TransformCache.register_dependency()
        • TransformCache.register_transform()
        • TransformCache.get_dependency_chain()
        • TransformCache.get_full_cache_key()
        • TransformCache.invalidate_downstream()
    • PipelineCache
      • PipelineCache
        • PipelineCache.cache_dir
        • PipelineCache.enabled
        • PipelineCache.targets
        • PipelineCache.__init__()
        • PipelineCache.define_target()
        • PipelineCache.compute_target_key()
        • PipelineCache.save_target()
        • PipelineCache.get_cached()
        • PipelineCache.clear_target()
        • PipelineCache.clear_all()
    • Cache Management
    • Performance Notes
  • Gridded Data Module
    • Core Classes
      • GriddedDataLoader
        • GriddedDataLoader.__init__()
        • GriddedDataLoader.run_pipeline()
    • Configuration
      • TiledDataConfig
        • TiledDataConfig.max_output_pixels
        • TiledDataConfig.target_tile_outputs
        • TiledDataConfig.halo
        • TiledDataConfig.enable_tile_cache
        • TiledDataConfig.aggregation_strategy
        • TiledDataConfig.max_memory_percent
        • TiledDataConfig.max_swap_percent
        • TiledDataConfig.memory_check_interval
        • TiledDataConfig.enable_memory_monitoring
        • TiledDataConfig.__init__()
    • Memory Monitoring
      • MemoryMonitor
        • MemoryMonitor.__init__()
        • MemoryMonitor.check_memory()
      • MemoryLimitExceeded
    • Tile Specification
      • TileSpecGridded
        • TileSpecGridded.src_slice
        • TileSpecGridded.out_slice
        • TileSpecGridded.extent
        • TileSpecGridded.target_shape
        • TileSpecGridded.__init__()
    • Utility Functions
      • downsample_for_viz()
      • create_mock_snow_data()
    • Performance Notes
  • Pipeline Module
    • TerrainPipeline
      • TerrainPipeline
        • TerrainPipeline.__init__()
        • TerrainPipeline.load_dem()
        • TerrainPipeline.apply_transforms()
        • TerrainPipeline.detect_water()
        • TerrainPipeline.create_mesh()
        • TerrainPipeline.render_view()
        • TerrainPipeline.explain()
        • TerrainPipeline.render_all_views()
        • TerrainPipeline.cache_stats()
        • TerrainPipeline.clear_cache()
    • TaskState
      • TaskState
        • TaskState.name
        • TaskState.depends_on
        • TaskState.params
        • TaskState.cached
        • TaskState.computed
        • TaskState.result
        • TaskState.cache_key
        • TaskState.__init__()
    • Pipeline Design Patterns
    • Cache Integration
    • Performance Notes
  • Advanced Visualization Module
    • Slope Calculation
      • horn_slope()
    • 3D Legends
      • create_values_legend()
    • Legacy Features
  • Diagnostics Module
    • Wavelet Denoising Diagnostics
      • plot_wavelet_diagnostics()
      • plot_wavelet_coefficients()
      • generate_full_wavelet_diagnostics()
    • Adaptive Smoothing Diagnostics
      • plot_adaptive_smooth_diagnostics()
      • plot_adaptive_smooth_histogram()
      • generate_full_adaptive_smooth_diagnostics()
    • Bump Removal Diagnostics
      • plot_bump_removal_diagnostics()
      • generate_bump_removal_diagnostics()
    • Upscaling Diagnostics
      • plot_upscale_diagnostics()
      • generate_upscale_diagnostics()
    • Road Elevation Diagnostics
      • plot_road_elevation_diagnostics()
      • generate_road_elevation_diagnostics()
      • plot_road_vertex_z_diagnostics()
    • Pipeline Visualization
      • plot_processing_pipeline()
    • Histogram Generation
      • generate_rgb_histogram()
      • generate_luminance_histogram()
    • Usage Patterns
    • See Also
  • Visualization Module
    • Flow Diagnostics
      • save_flow_plot()
      • plot_dem()
      • plot_ocean_mask()
      • plot_water_bodies()
      • plot_endorheic_basins()
      • plot_conditioned_dem()
      • plot_breach_depth()
      • plot_fill_depth()
      • plot_flow_direction()
      • plot_drainage_area()
      • plot_drainage_area_comparison()
      • plot_stream_network()
      • plot_stream_overlay()
      • plot_precipitation()
      • plot_upstream_rainfall()
      • plot_discharge_potential()
      • plot_validation_summary()
      • create_flow_diagnostics()
      • vectorize_stream_network()
      • polyline_to_variable_width_polygon()
      • plot_vectorized_streams()
    • Line Layers
      • get_metric_data()
      • expand_lines_variable_width_sparse()
      • expand_lines_variable_width_fast()
      • expand_lines_variable_width()
      • create_line_layer()
      • create_stream_network_layer()
    • Bounds Pipeline
      • SimpleAffine
        • SimpleAffine.__init__()
        • SimpleAffine.map_pixel_to_world()
      • TransformationPipeline
        • TransformationPipeline.__init__()
        • TransformationPipeline.get_shape()
        • TransformationPipeline.get_affine()
      • EdgeTransformer
        • EdgeTransformer.__init__()
        • EdgeTransformer.transform_stage()
        • EdgeTransformer.transform_to_mesh_space()
        • EdgeTransformer.transform_full_pipeline()
    • Edge Debug
      • plot_rectangle_edge_sampling()
      • plot_edge_distribution()
      • plot_deduplication_comparison()
      • plot_sorting_effect()
      • plot_transformation_pipeline()
      • create_full_pipeline_debug_plot()
    • See Also
  • GPU Operations Module
    • Slope Calculation
      • gpu_horn_slope()
    • Filtering Operations
      • gpu_gaussian_blur()
      • gpu_median_filter()
      • gpu_max_filter()
      • gpu_min_filter()
    • Device Management
      • _get_device()
    • Performance Notes
    • Integration Example
    • See Also
  • Scoring Module
    • Core Scoring Functions
      • trapezoid_score()
    • Sledding Scoring
      • compute_sledding_score()
      • sledding_deal_breakers()
      • sledding_synergy_bonus()
      • coverage_diminishing_returns()
    • Cross-Country Skiing Scoring
      • compute_xc_skiing_score()
      • xc_skiing_deal_breakers()
    • Score Combination Patterns
    • Score Interpretation
    • See Also
  • Score Combiner Module
    • Scoring Transforms
      • trapezoidal()
      • dealbreaker()
      • linear()
      • snow_consistency()
      • terrain_consistency()
    • Score Components and Combiner
      • ScoreComponent
        • ScoreComponent.name
        • ScoreComponent.transform
        • ScoreComponent.transform_params
        • ScoreComponent.role
        • ScoreComponent.weight
        • ScoreComponent.name
        • ScoreComponent.transform
        • ScoreComponent.transform_params
        • ScoreComponent.role
        • ScoreComponent.weight
        • ScoreComponent.apply()
        • ScoreComponent.to_dict()
        • ScoreComponent.from_dict()
        • ScoreComponent.__init__()
      • ScoreCombiner
        • ScoreCombiner.name
        • ScoreCombiner.components
        • ScoreCombiner.name
        • ScoreCombiner.components
        • ScoreCombiner.compute()
        • ScoreCombiner.get_component_scores()
        • ScoreCombiner.to_dict()
        • ScoreCombiner.from_dict()
        • ScoreCombiner.__init__()
    • Pre-built Scoring Configurations
      • Sledding Scorer
        • create_default_sledding_scorer()
        • get_required_inputs()
        • compute_derived_inputs()
        • compute_improved_sledding_score()
      • XC Skiing Scorer
        • create_xc_skiing_scorer()
        • get_required_inputs()
        • compute_derived_inputs()
        • compute_improved_xc_skiing_score()
    • Usage Examples
    • See Also
  • Snow Analysis Module
    • SNODAS Processing
      • batch_process_snodas_data()
      • calculate_snow_statistics()
      • load_snodas_stats()
    • Slope Statistics
      • TiledSlopeConfig
        • TiledSlopeConfig.target_tile_outputs
        • TiledSlopeConfig.halo
        • TiledSlopeConfig.max_tile_size
        • TiledSlopeConfig.__init__()
      • TileSpec
        • TileSpec.src_slice
        • TileSpec.core_slice
        • TileSpec.out_slice
        • TileSpec.row_stride
        • TileSpec.col_stride
        • TileSpec.__init__()
      • SlopeStatistics
        • SlopeStatistics.slope_mean
        • SlopeStatistics.slope_max
        • SlopeStatistics.slope_min
        • SlopeStatistics.__init__()
        • SlopeStatistics.slope_std
        • SlopeStatistics.slope_p95
        • SlopeStatistics.roughness
        • SlopeStatistics.aspect_sin
        • SlopeStatistics.aspect_cos
        • SlopeStatistics.dominant_aspect
        • SlopeStatistics.aspect_strength
      • compute_pixel_mapping()
      • compute_tile_layout()
      • compute_tile_slopes()
      • aggregate_by_geographic_mapping()
      • compute_tiled_slope_statistics()
    • See Also
  • Configuration Module
    • See Also

Additional Resources

  • Changelog
    • v1.0 (2026-01-12)
      • Features
      • Performance
terrain-maker
  • Gallery
  • View page source

Gallery

Example renders produced with terrain-maker. Each image links to the example or guide that explains how it was made.


Detroit: Sledding + XC Skiing (Combined Render)

The flagship example — dual colormaps blending sledding and cross-country skiing scores, with roads and parks overlay, rendered at print quality.

Detroit combined render with labels

Sledding scores (boreal-mako colormap) underlie the terrain. XC skiing scores (mako/rocket overlay) appear near parks. Azurite-colored roads mark major routes. The labeled version identifies specific parks and features.

Script: examples/detroit_combined_render.py Guide: Combined Render: Full-Featured Example


San Diego: Complete Minimal Example

The recommended starting point — a full terrain pipeline in ~180 lines: download SRTM elevation data, load and transform a DEM, detect water, generate a 3D mesh, and render with professional HDRI lighting.

San Diego terrain render

Elevation mapped with the plasma colormap; San Diego Bay and coastal water detected and highlighted automatically.

Script: examples/san_diego_flow_demo.py Guide: San Diego: A Complete Minimal Example


Detroit: Dual Colormap Render

An earlier dual-layer render of the Detroit area showing sledding and XC skiing zones side by side.

Detroit dual render

Script: examples/detroit_dual_render.py Guide: Snow Integration: Sledding Location Analysis


Detroit: Elevation — Cardinal Views

Pure elevation renders of the Detroit area from five vantage points. The custom Michigan colormap maps Great Lakes blue through forest green to upland sand tones.

Detroit elevation from above Above

Detroit elevation from south South

Detroit elevation from north North

Detroit elevation from east East

Script: examples/detroit_elevation_real.py Guide: Great Lakes Elevation Visualization


Snow Sledding Score Analysis

Step-by-step breakdown of the sledding score computation for southeast Michigan, from raw inputs to final score map.

DEM Elevation (DEM)

Snow depth Snow depth

Final sledding score Final sledding score

Guide: Snow Integration: Sledding Location Analysis

Previous Next

© Copyright 2026, terrain-maker contributors.

Built with Sphinx using a theme provided by Read the Docs.