Satellite Map Generator Documentation

SATELLITE MAP GENERATOR
Documentation
Digital Gods | Version 1.0.11 | Unreal Engine 5.8

OVERVIEW

Satellite Map Generator is an Unreal Engine Editor plugin for generating high-resolution satellite-style maps directly from your existing game world.

Instead of relying on external map services or imported satellite imagery, the plugin captures the actual Unreal Engine level from an orthographic top-down view and converts it into production-ready map imagery.

The plugin is designed for both small levels and large open worlds and supports standard Unreal Engine Landscapes, UE 5.8 Mesh Terrain / Mesh Partition, static-mesh terrain, Nanite geometry, foliage, roads, buildings, water and mixed environments.

Satellite Map Generator can export a single stitched map image, streaming-ready world-space tiles, or both. It also includes optional zoom-pyramid generation, JSON metadata for runtime map systems, and spline-based road and railway overlays that remain readable regardless of mesh LOD or draw distance.

The plugin runs entirely inside Unreal Engine and does not require an internet connection, external mapping provider, API key or third-party service.

REQUIREMENTS

Unreal Engine: 5.8
Platform: Windows 64-bit
Plugin Type: Editor Code Plugin
Runtime Component: None required
External APIs: None
Third-Party Dependencies: None

INSTALLATION

1. Close Unreal Engine.
2. Copy the SatelliteMapGenerator folder into your project Plugins directory:

YourProject/Plugins/SatelliteMapGenerator/

3. Regenerate project files if required.
4. Build the project/plugin for Unreal Engine 5.8.
5. Open the project.
6. Enable Satellite Map Generator in Edit > Plugins if it is not already enabled.
7. Restart the Editor if requested.
8. Open the tool from:

Tools > Satellite Map Generator

QUICK START

For a first test on a normal Landscape:

1. Open the level you want to capture.
2. Select the Landscape actor in the level.
3. Open Tools > Satellite Map Generator.
4. Set Capture Area Mode to Selected Actors.
5. Use these recommended test settings:

Tile World Size: 1000 m
Tile Resolution: 2048 px
Overscan: 3%
Visual Preset: Clean Satellite
Lock Exposure: Enabled
Exposure Compensation: 0.0
Warmup Captures: 2

6. Click Analyze Bounds.
7. Confirm that the reported map dimensions and tile count match the expected world size.
8. Click Generate Satellite Map.
9. After the test succeeds, increase Tile Resolution to 4096 px for a production-quality export.

For example, a 4 km x 4 km map using 1 km tiles produces a 4 x 4 tile grid, for a total of 16 highest-detail tiles.

OUTPUT SETTINGS

Output Directory

Defines where generated map files are written.

The default location is:

Saved/SatelliteMaps

Each generated map is placed inside its own folder based on Map Name.

Map Name

Defines the base filename and the output folder name used for generated images, tiles and map.json.

Example:

Panonia

will generate files inside a Panonia output folder.

Export Mode

Single Image Only
Creates one stitched satellite map image.

Tiles Only
Exports individual map tiles intended for large maps or runtime streaming.

Single Image + Tiles
Exports both the stitched map and individual tiles. This is recommended when the map will be used both as a normal UI map and as a streamed runtime map.

Map Rotation

Available rotations:

0 degrees
90 degrees clockwise
180 degrees
-90 degrees / 90 degrees counter-clockwise

Rotation is applied consistently to:

– the stitched map
– individual tiles
– tile indices
– zoom levels
– JSON metadata

This keeps runtime coordinate conversion deterministic after rotation.

Full Map Max Dimension

Controls the maximum width or height of the stitched full-map image.

This setting does not reduce the resolution of exported high-detail tiles. It only limits the combined overview image to protect memory usage when very large maps are generated.

Range: 1024 to 16384 pixels.

Write Metadata JSON

When enabled, the plugin writes map.json containing information required for runtime map systems, including:

– world bounds
– tile size
– tile resolution
– tile grid dimensions
– meters per pixel
– map rotation
– image orientation axes
– zoom levels
– tile filename pattern
– transport overlay settings

Generate Zoom Pyramid

Available when tiled export is enabled.

Generates lower-resolution zoom levels from the already captured highest-detail tiles without re-rendering the Unreal world.

This is useful for Google Maps-style map viewers where the application loads lower-resolution tiles when zoomed out and higher-resolution tiles when zoomed in.

CAPTURE AREA

Capture Area Mode determines which part of the world is exported.

World Partition Runtime Bounds / Auto World Bounds

Designed primarily for large World Partition levels.

The plugin attempts to determine the runtime world bounds even when some World Partition cells are unloaded.

Use Analyze Bounds before generating a large export.

If the detected area is unexpectedly huge, use Selected Actors or Manual Bounds instead.

Selected Actors

Uses the combined bounds of the actors currently selected in the Unreal Editor.

This is the recommended option for:

– standard Landscape maps
– testing
– exporting only part of a level
– avoiding unrelated actors with extremely large bounds

For a normal Landscape, select the Landscape actor and use this mode.

Loaded World Actors

Uses the bounds of currently loaded world actors.

This can be useful for smaller levels or non-World-Partition projects, but may include actors that extend far outside the intended map area.

Manual Bounds

Allows exact manual control over the capture rectangle.

Manual Center
World-space center of the capture area.

Manual Width
Capture width in Unreal centimeters.

Manual Height
Capture height in Unreal centimeters.

Unreal conversion reference:

100 cm = 1 meter
100,000 cm = 1 kilometer

Expand Bounds To Whole Tiles

Expands the selected bounds to complete tile boundaries.

This is recommended for deterministic tile grids, stitched maps and zoom pyramids.

TILE SETTINGS

Tile World Size

Defines the physical world area represented by one highest-detail tile.

Recommended starting value:

1000 m

Smaller tile sizes create more tiles and allow more localized streaming. Larger tile sizes reduce tile count.

Supported range: 50 m to 10,000 m.

Examples:

4 km x 4 km world with 1000 m tiles = 4 x 4 tiles
8 km x 8 km world with 1000 m tiles = 8 x 8 tiles

Tile Resolution

Defines the pixel resolution of each highest-detail tile.

Recommended values:

2048 px – testing and fast iteration
4096 px – recommended production default
8192 px – extremely high-detail export with significantly higher memory, disk and processing requirements

Overscan

Renders additional pixels outside the requested tile area and then crops the result back to the final tile size.

This reduces edge artifacts caused by screen-space, temporal and lighting effects.

Recommended starting value:

3%

CAPTURE SETTINGS

Capture Pass

Satellite / Final Color
Produces the normal lit satellite-style map and is the recommended mode for standard use.

Base Color / Albedo
Exports material base color without normal scene lighting. Useful for technical maps or custom post-processing.

World Normal
Exports world-space normal information for technical workflows and custom analysis.

Visual Preset

Clean Satellite (Recommended)

Removes atmospheric and cinematic effects from the SceneCapture only, including common sources of washed-out or inconsistent map imagery.

The level itself is not modified.

The Clean Satellite preset removes or suppresses effects such as:

– atmospheric haze
– height fog
– volumetric fog
– clouds
– bloom
– lens flares
– lens distortion
– depth of field
– vignette
– film grain

Normal scene lighting, shadows, materials and SkyLight contribution are retained.

Use World Atmosphere / Rendering

Captures the level using its normal atmospheric rendering.

Use this option when fog, haze, clouds or cinematic atmosphere are intentionally part of the desired map appearance.

Warmup Captures

Defines how many temporary capture passes are performed after the camera moves to a new tile before the final image is read back.

Warmup captures allow systems such as temporal rendering, Lumen and virtualized rendering to settle.

Default: 2

Increase this value if neighboring tiles show temporal inconsistencies or incomplete lighting updates.

Lock Exposure

Uses one fixed exposure for all tiles.

This is strongly recommended for tiled maps.

Without fixed exposure, bright areas such as snow or water and dark areas such as forests can cause neighboring tiles to use different automatic exposure values, creating visible rectangular brightness changes in the final map.

Exposure Compensation

Adjusts map brightness when Lock Exposure is enabled.

Recommended starting value: 0.0

Positive values brighten the map.
Negative values darken the map.

Always perform a small test export before changing exposure for a large map.

Disable Motion Blur

Disables motion blur for the SceneCapture.

Recommended because the capture camera jumps directly between map tiles rather than moving continuously through the world.

Use Fixed Camera Z

When disabled, the plugin automatically places the orthographic camera above the highest relevant world bounds.

Enable this only when an exact camera height is required.

Fixed Camera Z

Absolute world-space Z position used when Use Fixed Camera Z is enabled.

Camera Height Padding

Additional height added above detected world content when automatic camera placement is used.

Increase this value if very tall geometry is clipped from the capture.

WORLD PARTITION

Auto Load World Partition Actors

For World Partition levels, the plugin can temporarily hold references to actors whose descriptors intersect the current tile before capture.

The workflow is:

1. determine the current tile area
2. temporarily load relevant World Partition actors
3. capture the tile
4. release the temporary references
5. move to the next tile

This avoids requiring the entire world to remain loaded at once.

This workflow is especially useful for:

– large open worlds
– World Partition projects
– UE 5.8 Mesh Terrain / Mesh Partition worlds

Mesh Terrain is captured through Unreal Engine’s renderer and is not a hard dependency of Satellite Map Generator.

World Partition Load Padding

Loads an additional world-space area around each tile.

This can help when large actors, shadows, foliage or effects just outside the tile influence the visible capture.

Default: 250 m

TRANSPORT OVERLAY

Transport Overlay draws clean cartographic roads and railways after the satellite capture.

This solves a common satellite-map problem: distant road or railway meshes may become low-detail, disappear because of draw distance, become hidden by foliage, or be difficult to distinguish from the terrain.

Because the overlay is generated from spline geometry, it remains readable independently of the rendered road mesh.

Supported transport classes:

– Main Road
– Secondary Road
– Forest Track
– Railway

Draw Transport Overlay

Enables or disables transport overlay rendering.

Use Spline Components

Scans standard Unreal actors and components containing USplineComponent geometry.

Use this for Blueprint or actor-based road systems built from normal spline components.

Use Landscape Splines

Scans Landscape Spline segments and their metadata.

Use this for roads and railways authored with the Landscape spline system.

Both normal spline components and Landscape Splines can be enabled at the same time.

TRANSPORT CLASSIFICATION

Classification is based on configurable comma-separated filters.

The plugin can match data from:

– actor names
– actor labels
– actor classes
– class paths
– actor tags
– component names
– component tags
– material names
– material paths
– Landscape Spline layers
– spline-mesh names

Matching is case-insensitive.

Recommended naming examples:

Road_Main
Road_Secondary
Road_Forest
Railway

Railway matching has the highest classification priority so broad terms such as road or track do not override a railway classification.

Main Road

Default filter:

main, highway, arterial, asphalt

Default width:

9 m

Use this class for highways, primary roads and major paved routes.

Secondary Road

Default filter:

secondary, side, street, road

Default width:

6 m

Use this class for smaller paved roads, local streets and secondary routes.

Forest Track

Default filter:

forest, dirt, path, trail, track, gravel, macadam

Default width:

4 m

Use this class for dirt roads, forest roads, trails and unpaved tracks.

Railway

Default filter:

rail, railway, train, pruga

Default width:

5 m

Railways can be drawn as a solid route or as a repeating cartographic pattern.

Railway Dashed

Enables a repeating railway pattern instead of a simple solid line.

Black / White Railway Pattern

When enabled, the plugin first draws a continuous dark railway base and then draws equally spaced light segments over it.

This prevents the terrain underneath from showing through the gaps and keeps the railway pattern visually consistent over snow, grass, water and the original railway mesh.

Default dash length:

12 m

Default gap length:

8 m

Dash and gap lengths are measured in world space along the spline, so the pattern remains consistent through curves and at different output resolutions.

Transport Outline

Draws a contrasting outline beneath roads and railways to improve readability over bright, dark or visually complex terrain.

Outline Extra Pixels controls the additional outline radius in output pixels.

FILTERING

Exclude Actor Filters

Comma-separated actor tags or actor/class name fragments excluded from the SceneCapture.

The default filter excludes SatelliteMapGenerator and SceneCapture helper actors so the plugin does not capture its own temporary objects.

Use this setting to exclude additional project-specific actors if required.

ANALYZE BOUNDS

Analyze Bounds should be used before a large export.

The analysis reports information such as:

– capture width and height
– output tile grid
– total tile count
– selected rotation
– centimeters per pixel
– maximum zoom level
– equivalent full-detail map resolution

If the tile count is unexpectedly large, do not start the export. Change the Capture Area Mode to Selected Actors or Manual Bounds and analyze again.

The plugin includes a safety limit to prevent accidental generation of unreasonable tile counts.

OUTPUT STRUCTURE

Example tiled output:

SatelliteMaps/
└── Panonia/
├── Full/
│ └── Panonia_Satellite.png
├── Tiles/
│ ├── Z0/
│ │ └── Panonia_Z0_X0_Y0.png
│ ├── Z1/
│ │ └── …
│ └── Z3/
│ ├── Panonia_Z3_X0_Y0.png
│ ├── Panonia_Z3_X1_Y0.png
│ └── …
└── map.json

The exact maximum zoom level depends on the exported tile grid dimensions.

ZOOM PYRAMID

The highest zoom level contains the original captured tiles.

Lower zoom levels are generated from those tiles without re-rendering the Unreal level.

Example for an 8 x 8 highest-detail tile grid:

Z3 = 8 x 8 tiles
Z2 = 4 x 4 tiles
Z1 = 2 x 2 tiles
Z0 = 1 x 1 tile

This structure allows a runtime map interface to load only the amount of detail required for the current zoom level.

MAP.JSON METADATA

When Write Metadata JSON is enabled, map.json contains information including:

– generator name and version
– map name
– tile world size in meters
– tile resolution
– tiles X/Y
– maximum zoom level
– meters per pixel
– visual preset
– fixed exposure state
– exposure compensation
– map rotation
– transport overlay configuration
– image right axis
– image down axis
– full image dimensions
– world bounds in centimeters
– whether tiles were exported
– whether a zoom pyramid was generated
– tile filename pattern
– information for each zoom level

The exported image orientation is also described using imageRightAxis and imageDownAxis.

Examples:

0 degrees:
Image right = +X
Image down = +Y

90 degrees clockwise:
Image right = -Y
Image down = +X

180 degrees:
Image right = -X
Image down = -Y

90 degrees counter-clockwise:
Image right = +Y
Image down = -X

Tile X/Y indices always follow the exported image orientation.

USING THE OUTPUT IN A RUNTIME MAP

Satellite Map Generator does not require a runtime component.

The exported map.json provides the information required for a custom runtime map system to convert Unreal world positions into map coordinates.

A typical runtime workflow is:

1. Read worldBoundsCm from map.json.
2. Normalize the player’s world X/Y position inside those bounds.
3. Apply the exported map orientation described by mapRotationDegrees, imageRightAxis and imageDownAxis.
4. Determine the required zoom level.
5. Convert the normalized map position to Tile X/Y.
6. Load only the required tile or nearby tiles.
7. Convert the local tile position to UV/pixel coordinates for the player marker.

The tile filename pattern is stored in map.json.

RECOMMENDED SETTINGS

Fast Test Export

Tile World Size: 1000 m
Tile Resolution: 2048
Overscan: 3%
Visual Preset: Clean Satellite
Warmup Captures: 2
Lock Exposure: Enabled
Exposure Compensation: 0.0
Transport Overlay: Enabled

Production Open-World Export

Tile World Size: 1000 m
Tile Resolution: 4096
Overscan: 3-5%
Visual Preset: Clean Satellite
Warmup Captures: 2-4
Lock Exposure: Enabled
Generate Zoom Pyramid: Enabled
Write Metadata JSON: Enabled
Auto Load World Partition Actors: Enabled for World Partition projects

Very High Detail Export

Tile Resolution: 8192

Use only when the additional detail is necessary. 8192 px tiles significantly increase capture time, memory use, PNG compression time and disk usage.

TROUBLESHOOTING

The map is almost black

If using an older plugin configuration, disable Lock Exposure for a quick test or reset the exposure settings.

In current versions, fixed exposure disables physical camera exposure for the SceneCapture. Start with Exposure Compensation at 0.0.

Neighboring tiles have different brightness

Enable Lock Exposure.

Automatic exposure can adapt independently for each tile, especially when one tile contains snow, water or bright terrain while another contains dark forest.

The map looks foggy or washed out

Use Visual Preset: Clean Satellite.

This removes atmospheric haze, fog, clouds and common cinematic lens effects from the SceneCapture without modifying the level.

The plugin reports a huge or unrealistic tile count

The selected automatic bounds likely include an actor with extremely large bounds.

Use:

Selected Actors

or

Manual Bounds

Then click Analyze Bounds again.

For a standard Landscape, Selected Actors is generally the safest option.

Roads disappear or are difficult to see

Enable Transport Overlay and verify the route classification filters.

The transport overlay is generated from spline geometry and does not depend on road mesh LOD or draw distance.

A road is classified as the wrong type

Adjust the class filter keywords or rename/tag the road actor or spline component.

Recommended identifiers:

Road_Main
Road_Secondary
Road_Forest
Railway

Railway classification has the highest priority.

Very tall objects are clipped

Increase Camera Height Padding or enable Use Fixed Camera Z and choose a sufficiently high world-space Z position.

Tile seams are visible

Try the following:

– increase Overscan
– increase Warmup Captures
– keep Lock Exposure enabled
– use Clean Satellite
– verify that animated weather, wind or other time-dependent effects are stable during export

WORLD PARTITION CONTENT IS MISSING

Enable Auto Load World Partition Actors and increase World Partition Load Padding if necessary.

Large actors or effects whose origin is outside the current tile may require additional loading padding.

NOTES ABOUT UE 5.8 MESH TERRAIN

Satellite Map Generator does not require Mesh Terrain as a hard plugin dependency.

Mesh Terrain / Mesh Partition geometry is captured through Unreal Engine’s normal rendering pipeline.

This allows the same Satellite Map Generator workflow to support:

– classic Landscape
– UE 5.8 Mesh Terrain / Mesh Partition
– static-mesh terrain
– Nanite geometry
– mixed terrain systems

For large Mesh Terrain worlds using World Partition, Auto Load World Partition Actors is recommended.

WORKFLOW TIPS

– Always run Analyze Bounds before a large export.
– Use 2048 px tiles while configuring the plugin.
– Move to 4096 px only after the test export is correct.
– Keep Clean Satellite enabled unless atmospheric effects are intentionally required.
– Keep Lock Exposure enabled for tiled maps.
– Use meaningful spline names or tags for reliable transport classification.
– Use Selected Actors for normal Landscape projects when automatic world bounds include unrelated actors.
– Keep tiled output if the map may later be used for runtime streaming.
– Enable map.json even if it is not immediately needed; it preserves the map-to-world relationship for future systems.

COPYRIGHT

Copyright (c) 2026 Digital Gods. All rights reserved.