The pipeline, briefly
Three stages: parse, generate, materialize. The LLM only touches the first.
Stage 1 — Parse the prompt
The prompt goes to a small instruction-tuned model. Its only job is to emit a structured JSON parameter block — biome family, scale, sea level, ridge intensity, palette overrides, optional features (rivers, lava, ruins).
Why not generate the heightmap directly with a diffusion model? Because procedural noise is already excellent at terrain, deterministic, fast, and produces output we can reason about. The LLM is a knob-turner, not a painter.
Stage 2 — Generate the heightmap
Given parameters, we build height with a classic stack:
- 5-octave fBm for the base shape — rolling hills, valleys.
- Ridged noise blended into upper elevations for sharp mountain ridges.
- Domain warping so ridges don't grid-align with the noise.
- Coastal falloff perturbed by low-frequency noise — irregular shorelines instead of perfect circles.
- Trail carving — negative noise that cuts valley corridors between peaks.
Same techniques you'd find in any 2010s procedural-terrain paper. The novelty is that the LLM picks the constants.
Stage 3 — Materialize for Roblox
Heights become Roblox voxels. Then per voxel:
- Compute slope from the local normal.
- Look up material in a 2D table indexed by
(height, slope): sand at the shore, grass on flats, rock on cliffs, snow on peaks. - Add jitter so band edges don't read as perfect rings.
- Place water at sea level; carve rivers along the trail mask.
The output is real Roblox terrain voxels with material assignments, written directly into your Studio project by the Terrainio plugin — no .rbxm to drag in.
What the LLM is good at
Vibes. "Ominous" pulls the palette darker and the ridges sharper. "Tropical" lifts sea level and softens slopes. "Alpine" pushes vertical range and snowline. The model has read enough fantasy maps and travel writing that biome-to-parameter translation is reliable.
What the LLM is bad at
Specific landmarks. "Mountain shaped like a dragon's head" is not happening — that's a sculpting job, not a parameter job. We'd rather ship a great parameter generator than a mediocre image generator.
Why this works for Roblox specifically
Roblox terrain is voxel — discrete, finite, with a fixed material set. Procedural noise maps to voxels cleanly. A diffusion-generated mesh would need re-voxelization, material re-assignment, and would produce shapes the engine can't render efficiently. We chose the boring path because it ships.