Skip to content

Realistic planets

This page is about making planets that look real and interesting: how to layer terrain the way nature does, which nodes give which landforms, and recipes from the planets that ship with Metaplanets Creator.

Canopy: jungle-topped tepuis and karst towers

Canopy: tepuis with 650 m cliffs and karst towers over a jungle, built from Voronoi cells and thresholded Simplex noise on top of a simulated continent.

What makes a planet look real

  1. Scale is everything. Real planets are big and mostly smooth from space, with detail at every scale up close. Set the actual radius (Earth 6,371 km, Mars 3,390 km, the Moon 1,737 km) and keep total relief realistic: Earth's ranges are under 9 km on a 6,371 km sphere.
  2. Build from large to small. Continents and ocean basins, then mountain belts, then ranges, hills, gullies, and finally metre-scale bumps. Each layer should be roughly 4–10× smaller than the one before.
  3. Mask every layer by the one above it. Mountains belong in mountain belts, mesas on tablelands, dunes in deserts. A detail node applied everywhere at the same strength is the most common reason a planet looks procedural.
  4. Use erosion. Water-carved gullies that branch downhill, sharp crests and flat sediment-filled valleys are what the eye reads as "real terrain". Use Erosion Landforms (V2).
  5. Let climate drive the colour. Snow by latitude and altitude, deserts in the subtropics and behind mountains, forests where it's wet. The Climate Map node, or a few lines of latitude math, gives you that for free.
  6. Put small detail in the height. Bumps of 0.5–2 m in the terrain itself (not only in the normal map) make foliage sit correctly, cast real shadows and stop the ground looking like a smooth sheet.
  7. Light it properly. Real exposure, a sky light that captures the sky, and contact shadows. See Shading & Lighting.

A realistic Earth-like world, layer by layer

Wildlands (Planets/Examples/Wildlands, level L_Wildlands) is the reference planet. Its script, Docs/examples/Wildlands.ps, is built like this:

Layer Node(s) Settings Masked by
Continents, oceans, rivers Planet Simulation V2 Continents 5, Coverage 0.45, land 900 m, ocean 4,200 m, mountains 3,500 m, Erosion 0.6
Mountain ranges Erosion Landforms (V2) Scale 6,000, Amplitude 1,800, Ridged 0.7 MountainMask + 0.35 × HillMask
Mesas Erosion Landforms (V2) Plateau 1, TerraceStep 0.16 TablelandMask
Big hills Erosion Landforms (V2) 4.5 km landforms, 620 m relief "Rugged" regions from an ~80 km noise
Lowland hills Erosion Landforms (V2) Scale 1,500, Amplitude 210 Plains
Rivers (from the simulation) Every layer fades out near RiverDepth
Micro relief FBM Noise ±0.45 m hummocks in ~300 m patches; up to 1.5 m knobs on rock Bare rock
Climate Latitude math Temperature falls with latitude and 6.5 °C per km of height; a desert belt at 15–35°; wetter near rivers
Biomes Biome Output x cold, y moisture, z bare rock, w slope

Wildlands: eroded mountain ranges

Wildlands: coasts and shallows

Wildlands: desert dunes and saguaros

Wildlands: a river through forest

The same planet then gets a surface with 12 layers (bedrock, scree, soil, dunes, savannah, lush grass, tundra, snow and more, using near-measured albedos) and a spawner, S_Wildlands, that places the temperate forest kit by those biome channels.

A size rule of thumb for FBM

On an Earth-sized planet, the feature size in metres is roughly 70,000,000 / Scale. Scale 2,800,000 gives 25 m bumps; Scale 900 gives 80 km regions.

Example planets

Every planet below ships with Metaplanets Creator. The showcase planets are assets in Planets/Examples with scripts in Docs/examples/showcase; the Atlas planets are scripts in Docs/examples/atlas (Canopy is also a built asset). Open the script next to the planet to see exactly how it's done.

Showcase

Archipelago

Highlands

IceWorld

Moon

RedPlanet

Volcanic

Planet How it's made
Earthlike Planet Simulation V2 (6 continents, 32% land) + Climate Map. Biomes: snow, vegetation, arid, bare rock. The shortest path to an Earth.
Archipelago About 34 small plates for island arcs; FBM near sea level breaks the coasts into islets. Climate Map with a long inland reach so islands stay green.
Highlands Tall mountain belts from the simulation, plus Ridge Mountains masked by the hill, tableland and mountain masks.
ErosionLandforms Simulation + two Erosion Landforms (V2) layers: drainage in the ranges, mesas on tablelands, sediment in the valleys. Pairs with surfaces/Temperate.surface.json.
IceWorld Ice domes and glacial ranges; the oceans are frozen to a flat sea-ice sheet (+12 m) with pressure ridges and crevasse fields. No ocean.
RedPlanet The simulation's ocean basins become dry northern lowlands; strong waterway carving leaves dry canyons and outflow channels; a Crater Field; dunes from a sine field; polar caps by latitude and height.
Volcanic Crater Fields with tall, wide rims turned into shield volcanoes and calderas along belts and faults. A flat lava sea at −400 m; the river network becomes lava channels.
Moon FBM highlands + four Crater Fields. Maria come from low-frequency noise flooding old craters (leaving "ghost rims"); a dense small-crater field adds close-up detail.

Atlas

Io: paterae, lava lakes and the Pele ring

Rust: Mars a century after terraforming

Enceladus with its tiger stripes

Europa: cracked ice lineae

Planet Techniques
Canopy (jungle) Simulation (low land, 1,600 m mountains) + Erosion Landforms (V2). Regions from Simplex (FBM is grid-aligned at this scale). Karst towers: one per Voronoi cell (about 900 m apart, 150–600 m tall) with outlines frayed by Simplex. Tepuis: low-frequency Simplex through a very tight SmoothStep(0.12, 0.127, n) for ~650 m vertical cliffs, plus a second terrace. Spawner S_Canopy.
Shoal (98% shallow sea) A sea floor 4–30 m deep from Simplex. Channels along the zero lines of warped noise (1 - abs(n)). Atolls as a ring at a fixed Voronoi distance, with lagoon and islets. Sand banks with sand waves; rare volcanic islands with fringing reefs. Fades thin features by LOD Level so the orbit view doesn't speckle.
Rust (terraformed Mars) Radius 3,390 km. Simulation with 6,500 m mountains + a Crater Field (6–110 km). Only the polar basins hold seas. An analytic Olympus-style shield volcano, about 11 km high and 320 km across, with a scarp and caldera. Dunes, basalt and dust albedo provinces, lichen green near the seas. Sky AG_Rust.
Veil (thick-air world) Venus-sized (6,050 km), 92% land. Long ridge belts from 1 - abs(Simplex) with a stretched Scale vec(90, 260, 90). The whole planet is lifted +2,600 m so no ocean appears. Sky AG_Veil: thick orange smog.
Europa (icy moon) Radius 1,561 km. Ten families of lineae, each the zero line of a noise field stretched along a random axis, with a double-ridge profile and darkened bands. Chaos terrain from Voronoi plus hummocks. Very few craters.
Io (volcanic moon) Radius 1,822 km. Paterae: one per Voronoi cell in three size sets, with warped, scalloped outlines, halos and lobed dark flows. Named vents placed by direction: the red Pele ring with radial streaks, Loki's D-shaped lava lake, Pillan, Tvashtar, Prometheus. No craters.
Enceladus Radius 252 km. A scalloped south-polar boundary at 55°S; four tiger stripes as bowed parallel lines 35 km apart; groove belts and softened craters.
Lines and cracks

For cracks, ridges and channels, take the zero line of a noise: 1 - SmoothStep(0, w, Abs(noise)) is a band of width w along wherever the noise crosses zero. Stretch the noise's Scale on one axis to make long, parallel lineae (Europa, Veil). Use Cellular Edge for polygon cracks.

Real elevation data

The Planet DEM node (2.2.1) reads a real global elevation model and returns its height in metres. Use it to build real Mars, the Moon or Earth, and then change them: flood Mars, freeze Earth, terraform anything.

Real Mars from MOLA data: Valles Marineris today

The same Valles Marineris, flooded and greened

Valles Marineris from the real MOLA elevation model, as it is today and with the sea raised to −3,000 m. The terrain is identical; only the sea level, surface and sky changed.

Pin Meaning
Dataset Number N: reads <Project>/DEM/dem_<N>.mpdem (or the folder in the METAPLANETS_DEM_DIR environment variable).
HeightScale Multiplier on the data (1 = real).
HeightOffset Metres added. Use it to set sea level: subtract the elevation you want at 0 m.
LongitudeOffset Rotates the map, in degrees.

Outputs Height (m) and Valid (0 when the file is missing, so you can fall back to procedural terrain). Sampling is bicubic, wraps in longitude and is loaded once for every planet that uses it.

A DEM gives you the shape at its own resolution (MOLA is about 1.8 km per pixel). Add procedural detail below that, for example 60 * FBMNoise(...), and erosion or craters masked by height, so the ground holds up close.

The .mpdem format

A small binary file you can write from any GeoTIFF or IMG with a short script:

Field Type
Magic MPDEM001 8 bytes
width, height int32 each
lon0, lat0, dlon, dlat float64 each (degrees; first sample's position and step)
scale, offset float64 each: metres = sample × scale + offset
samples int16, little-endian, width × height, north row first

Use the elevation in metres relative to the body's reference sphere, and match the actor's radius to that body.

Longitude direction

Unreal is left-handed, so longitudes on the planet run the opposite way to a map. Planet DEM accounts for this so real maps aren't mirrored, but when you place cameras by longitude, use the negated east longitude.

Oceans and water

  • Oceans: add a Planetary Ocean component. It renders a sea sphere at Sea Level Meters with FFT waves (a wind sea plus swell), whitecaps, breaking surf along the real coastline, and shallows that fade from wet sand to turquoise. See Atmospheres & Oceans.
  • Rivers and lakes: wire Water Field (from Planet Simulation V2) into Water Output. Lakes and rivers render at their own height with calmer waves and a current, rapids get white water, and foliage is kept out of the water automatically.
  • No ocean on dry, frozen and airless worlds: just leave the ocean off, or lift the terrain above 0 m as Veil does.

Gas giants and rings

Set Planet Kind to Gas Giant (Shader Sphere) on the planet actor. It skips the terrain and draws a procedural, volumetric banded atmosphere (Metaplanet Gas Giant component). See the L_GasGiant level.

Group Settings
Bands BandScale, BandContrast, four band colours (BandColorA–D).
Storms StormCount, StormStrength, StormColor: oval storms like the Great Red Spot.
Volumetric Cloud density, haze, turbulence, deck top and bottom, filaments, silver lining, powder, convective towers.
Lightning Amount, speed, randomness, glow on the night side.
Motion RotationSpeed (with differential rotation of the bands), AxialTiltDeg, Seed.
Lighting Ambient (night side), SunIntensityScale (use 2–4 when the giant appears next to a lit moon), bPhysicalSunIntensity.

Rings: place a Metaplanet Ring Actor around any planet. It builds a ring of real asteroid meshes on Kepler-like orbits, with a dust layer and a distant impostor disc. Set Inner/Outer Radius (in planet radii), Thickness, Tilt and Asteroid Count. Turn on Debris Profile for a young ring from a broken-up moon (one broad soft band with faint ringlets) instead of Saturn-style bands. Link the ring to a gas giant's RingSource so it shadows the planet.

Checklist for a hero planet

  • Real radius and realistic relief.
  • Continents → ranges → hills → gullies → metre bumps, each layer masked.
  • Erosion Landforms (V2) on anything mountainous.
  • A climate (Climate Map or latitude math) driving the biome channels.
  • A surface with height, slope, latitude and biome layers and textured detail up close.
  • An Atmosphere Graph matched to the planet: dust colour, haze, ground albedo.
  • Foliage driven by the same biome channels.
  • Check it from orbit, at 10 km and at 2 m, at noon and at sunset.