Overview
This project turns Chandrayaan-2 Terrain Mapping Camera (TMC) digital elevation models into explorable, true-scale lunar terrain in Unreal Engine 5. Each DEM tile is converted into a 16-bit heightmap, the Moon's curvature is added relative to the tile centre, and a null-value mask hides gaps in the data. The terrain is then lit with an adjustable sun (azimuth, elevation and intensity) and rendered with Lumen, Nanite and World Partition, so the same pipeline serves visual inspection, mission planning and training scenarios.
ch2_tmc_ndn_20220614T1810117259_d_dtm_d32Keywords: Chandrayaan-2, TMC, Digital Elevation Model, Lunar Terrain, Heightmap, Unreal Engine 5, Lumen, Nanite, World Partition, QGIS
Highlights
Method
- Data acquisition: TMC DEM tiles (
.tifheightmaps) for a lunar patch are downloaded from the ISSDC Chandrayaan-2 map browser. - Preparation in QGIS: multiple tiles are stitched by latitude and longitude, kept to a single projection (polar-stereographic and equirectangular tiles cannot be mixed), cropped and exported as one
.tif. - Heightmap conversion: in Python, the DEM is read with GDAL, converted to 16-bit integers and saved as a single-channel
.pngheightmap. - Curvature: each pixel's latitude and longitude is converted to x, y, z, its height is measured relative to the normal at the central pixel, shifted so the borders sit at the base, and added to the original heightmap.
- Null mask: an 8-bit binary mask marks valid DEM values as 255 and null values as 0.
- Unreal Engine 5: the curved heightmap is imported as a landscape, scaled with x = y = spatial resolution and z = (max height − min height) / 512 (1 UE unit = 1 cm), and the mask is applied as a material to hide null areas.
- Automation: a custom UE plugin takes the heightmap and mask as inputs and builds the terrain, processing each tile in under 10 s.
Rendering
The sun is a directional light whose azimuth, elevation and intensity can be changed live, with a Milky Way sky sphere for background illumination. Low sun elevations bring out crater rims and ridges, which matters for landing-site and traverse analysis.
- Lumen: dynamic global illumination with diffuse bounce lighting and soft shadows, using software ray tracing so it runs without ray-tracing hardware.
- Nanite: virtualized geometry that switches to coarser triangles when zoomed out and keeps pixel-scale detail up close, with no manual LOD setup.
- World Partition: streams only the visible cells of large terrains, with hierarchical LOD for distant areas.
- Virtual Shadow Maps and Large World Coordinates: long shadow distances and 64-bit positions for accurate large-scale scenes.
Results
Verification
The UE5 terrain was checked against the ISSDC preview and against hillshade and contour renderings of the same DEM in QGIS. Contours, peaks and craters line up across all four views. The approach follows the one NASA used to recreate the Apollo 17 landing site in Unreal Engine from Lunar Reconnaissance Orbiter data.
Different Lunar Patches
…20200121T0825168134_d_dtm_g26, …20211221T1917095490_d_dtm_d32, …20210513T1401073872_d_dtm_hw1Applications
- Mission planning: terrain and lighting context for landing sites and surface operations.
- Rover navigation: traverse planning that accounts for energy, lighting and communication line of sight.
- Vehicle design: flying new vehicle concepts in simulation to evaluate safety and operability.
- Training and outreach: immersive, flight-like environments for astronauts and education.
Tools: Unreal Engine 5, QGIS, Python (GDAL, NumPy, PyPDS, Pillow)