Repository navigation
Plausibility Rules
UniverseGenerator serves games and fiction first. Its astronomy is a set of cheap formulas that keep a description consistent: a red dwarf is small, dim and red, its habitable zone sits close in, and a world there is not described as frozen. The numbers are defaults chosen for that, not measurements of a real sky. This page lists the rules, checks the ones 1.0.0's output can show, and gives the source of each. The full research notes are the repository's plausibility rules.
using UniverseGeneration;
foreach (var system in Galaxy.Generate("my-seed").Systems.Take(4))
{
var star = system.Star;
Console.WriteLine(FormattableString.Invariant($"{system.Name}: {star.SpectralType}, {star.Mass} Suns, luminosity {star.Luminosity}, radius {star.Radius}, {star.Temperature} K, {star.Colour}"));
Console.WriteLine(FormattableString.Invariant($" habitable zone {system.HabitableZoneInner} to {system.HabitableZoneOuter} au, frost line {system.FrostLine} au"));
}prints:
HD 147927: K5V, 0.631 Suns, luminosity 0.15823, radius 0.691601, 4382 K, #ffd2a1
habitable zone 0.2985 to 0.7032 au, frost line 1.074 au
HD 165595: M8V, 0.083 Suns, luminosity 0.00075, radius 0.136319, 2588 K, #ffad51
habitable zone 0.0205 to 0.0484 au, frost line 0.0739 au
HD 28101: K0V, 0.819 Suns, luminosity 0.4504, radius 0.85255, 5126 K, #ffd2a1
habitable zone 0.5036 to 1.1864 au, frost line 1.812 au
HD 157953: M5V, 0.19 Suns, luminosity 0.00503, radius 0.264638, 2992 K, #ffad51
habitable zone 0.0532 to 0.1254 au, frost line 0.1915 au
| Rule | What the output above shows | Source |
|---|---|---|
| Main-sequence luminosity from mass: L = 0.23 M^2.3 below 0.43 Suns, M^4 from 0.43 to 2, 1.4 M^3.5 from 2 to 55 | within 0.2% of the formula for all four stars (0.631 Suns: 0.15853 by the formula, 0.15823 printed) | University of Oregon mass-luminosity lecture |
| Radius about M^0.8 on the main sequence | within 0.2% (0.631 Suns: 0.691868 by the formula, 0.691601 printed) | Artifexian |
| Temperature = 5778 K × (L / R²)^0.25 | matches to the kelvin for the two K stars and within 2 K for the two M stars | Stefan-Boltzmann law |
| Habitable zone from luminosity | inner edge √(L / 1.776) au, outer edge √(L / 0.32) au for all four stars: the optimistic "recent Venus" and "early Mars" limits | Kopparapu et al. 2013 and 2014 |
| Frost line about 2.7 au × √L | exact for all four stars | frost line (astrophysics) |
| Colour from temperature | a hex colour per band (#ffd2a1 for K stars, #ffad51 for M stars here) |
Mitchell Charity's blackbody table |
| Star shares | the star mix below | Mamajek's star counts |
| Multiplicity: about 27% of M dwarfs, 46% of G stars, 70% or more of A, B and O stars have companions; close pairs lose their inner orbits | not checked on this page (the first system above is "an orange dwarf and red dwarf pair") | Duchêne and Kraus 2013; Moe and Kratter 2021 |
The repository's research note lists the conservative habitable zone (√(L / 1.1) to √(L / 0.53)); the 1.0.0 output uses the wider optimistic limits above.
using UniverseGeneration;
var system = Galaxy.Generate("my-seed").System(0);
foreach (var p in system.Planets)
Console.WriteLine(FormattableString.Invariant($"{p.Name}: {p.Kind}, {p.Zone}, {p.Orbit} au, {p.Radius} Earth radii, {Math.Round(p.Temperature)} K, eccentricity {p.Eccentricity}"));prints:
HD 147927 e: Desert, Warm, 0.1653 au, 1.266 Earth radii, 402 K, eccentricity 0.05
HD 147927 c: Rocky, Warm, 0.2022 au, 1.333 Earth radii, 488 K, eccentricity 0.05
HD 147927 d: SubNeptune, Warm, 0.2604 au, 2.816 Earth radii, 304 K, eccentricity 0.026
HD 147927 f: IceGiant, Outer, 1.3447 au, 8.06 Earth radii, 140 K, eccentricity 0.079
HD 147927 g: GasGiant, Outer, 2.9526 au, 10.331 Earth radii, 93 K, eccentricity 0.029
HD 147927 b: IceGiant, Outer, 4.4515 au, 5.946 Earth radii, 75 K, eccentricity 0.101
The three warm planets sit inside this star's habitable zone's inner edge (0.2985 au), the giants beyond its frost line (1.074 au). Rocky planets are below 1.5 Earth radii and the mini-Neptune above 2, as the radius valley below expects.
What 1.0.0 applies, from the CHANGELOG and README:
- Orbits from exoplanet statistics in two chains, with the radius valley (few planets of 1.5 to 2 Earth radii; Fulton et al. 2017) and the hot Neptune desert (few 2 to 9 Earth-radius planets on periods of 3 to 10 days).
- Neighbour spacing: period ratios rarely under 1.2 (Weiss et al. 2018).
- Eccentricity and inclination drawn as Kepler's multi-planet systems show (about 0.05 and 1.5 degrees), larger for a planet alone, damped for hot planets, capped so no orbit crosses a neighbour's.
- Air kept by the Jeans rule: a gas stays when the escape velocity is at least about six times its thermal speed.
- Gravity, escape velocity, density, insolation, albedo, day and night temperatures, rotation, tilt and tidal lock, climate bands and biomes; an Earth similarity score (Schulze-Makuch et al. 2011).
- Moons inside the Hill sphere with their own physics and tidal heat; rings; belts in the gaps between planets.
The Default preset uses a mix tuned for games, with more bright and unusual stars than a real sky; StarMix.Plausible (the Plausible preset) uses real shares, where most stars are red dwarfs. Counted over 2,000 systems:
using UniverseGeneration;
foreach (var (name, options) in new[] { ("Default", Preset.Default), ("Plausible", Preset.Plausible) })
{
var galaxy = Galaxy.Generate("my-seed", options with { Systems = 2000 });
var counts = galaxy.Map.GroupBy(m => m.StarClass).OrderByDescending(g => g.Count()).ThenBy(g => g.Key)
.Select(g => $"{g.Key} {g.Count()}");
Console.WriteLine($"{name}: {string.Join(", ", counts)}");
}prints:
Default: M 608, K 408, G 324, F 193, A 138, Giant 113, WhiteDwarf 110, B 56, Supergiant 23, BlackHole 12, NeutronStar 8, O 7
Plausible: M 1431, K 254, WhiteDwarf 118, G 116, F 60, A 10, Giant 8, NeutronStar 2, Supergiant 1
That is 30% red dwarfs in the default mix against 72% with real shares (the research note's real figure is 72.5%). The weights behind these choices are editable: see Recipes.
At the galaxy, cluster and universe levels the rules are for story, not simulation. Galaxies get Hubble type codes such as Sb, SBc, E3 and Irr (de Vaucouleurs). A group has two big spirals with satellites and dwarfs; a rich cluster has a giant elliptical at the centre. Region ages stand in for a metallicity gradient.
From the repository's design rules:
- Differences people notice. Every system has at least one landmark, every region a monument, every galaxy two to four beacons.
-
Outliers on purpose.
Weirdnessis the share of systems (0 to 100%) that break the usual rules;Plausiblesets 1,SpaceOpera10. - Maps for play. Lanes always connect every system; chokepoints and bridges are marked; danger grows with hops from the core and covers 1 to 10.
- Small by default. 60 systems, a map that reads on one screen; up to 2,000 on request.
This wiki describes UniverseGenerator 1.0.0 and was last updated on 2026-10-03. The library is MIT licensed. Report problems in the issues. On NuGet: UniverseGenerator. On OpenUPM: com.m4bwav.universe-generator.
Using it
- Getting started
- API reference
- Same seed, same galaxy
- Plausibility rules
- Errors and edge cases
- Recipes
- Feature matrix
- FAQ
The releases
Contributing
Elsewhere