Solo development of Stars Beyond in Unreal Engine 5. From C++ foundations to playable builds — every step documented.
The PlanetGenerator evolved into a full Universe Generator with three modules: Planet Generator, Starmap Generator, and Cloud Generator. This was a massive overhaul touching nearly every part of the tool.
Planet Generator v2 dropped the node graph for planets in favor of a slider-driven workflow. Every parameter (terrain frequency, erosion amount, mountain height, ocean level) is controlled by a slider with 0.4 second debounced auto-regeneration. Change a slider, see the result immediately.
The biggest performance gain came from GPU compute shaders. Hydraulic erosion at 4K resolution dropped from 155 seconds on CPU to 0.3 seconds on an RTX 5080. That is over 500x faster. The erosion uses a pipe-model simulation with latitude correction for equirectangular projection, so water flows correctly even near the poles.
The terrain pipeline now uses hybrid multifractal noise with recursive domain warping for organic coastlines, foothills blending for natural mountain transitions, and a full PBR output chain producing basecolor, heightmap, normal map, roughness and AO.
The Eridan System now has four distinct worlds, each generated from tuned presets:
KESSLER — DESERT MINING WORLD
VOSS — TEMPERATE FRONTIER
THETA-7 — BARREN MOON
NYX — ICE WORLD
Starmap Generator uses node-based compositing for cinematic space backgrounds. An HDR pipeline with ACES tonemapping produces spatial envelope nebulae with recursive noise. Five cinematic presets (Teal, Blue, Amber, Violet, Emerald) and DDS cubemap export for direct Unreal Engine 5 import.
Cloud Generator covers 6 biome types: Earth, Gas Giant, Ice World, Desert, Toxic and Storm World. Each biome has its own noise profile with cyclone spiral warp, ITCZ weather bands and recursive noise for organic cloud edges. 16 cloud presets including 3 Eridan-specific variants.
The bug that only appears at 8 million pixels: Found a subtle NaN in ridged noise at 4K. With fastmath enabled, Perlin noise occasionally returns values slightly outside [-1,1]. When raised to a non-integer power like 2.5, a negative base produces NaN. At 512x256 this never triggers. At 4096x2048 it happens reliably. One clamp fixed it.
Full deep dive with updated architecture and screenshots at stevekoch.dev/planetgen.
Stars Beyond has procedurally generated planets across multiple biomes. Painting each texture by hand doesn't scale, so I built a tool for it.
PlanetGenerator is a node based procedural planet texture generator with a real time 3D OpenGL preview. Noise generators, erosion, domain warping and colorization nodes get wired together in a visual graph and produce a fully lit planet in seconds.
The current build has 34 node types in 7 categories (generators, combiners, filters, erosion, selectors, color, output), 9 planet presets and full PBR texture export. That means basecolor, heightmap, normal map, roughness and packed channel outputs, all ready for direct import into Unreal Engine.
Each preset is a complete graph that generates terrain from tectonic simulation and noise functions, sculpts it with thermal and hydraulic erosion plus domain warping, then colorizes everything by altitude and slope with hillshade lighting on top.
The 3D renderer uses vertex displacement, four scale UDN normal blending and fresnel atmosphere glow. All surface detail comes from lighting, not color noise, which keeps the planets clean at any zoom level.
Built with Python, DearPyGui, OpenGL and Numba JIT. Currently turning this into a standalone tool alongside the game. Full deep dive over at stevekoch.dev/planetgen.