Talus

Talus generates terrain heightmaps for games. You pick a terrain type and any of five measurable properties (mean elevation, relief, slope, water coverage, roughness), and Talus draws a 64x64 map covering 4 x 4 km with heights up to 1,200 m. It is a 23M-parameter conditional diffusion model trained from scratch on 45,000 maps from our own procedural generator. It runs on an 8 GB consumer GPU, and on a CPU if you can wait a few seconds per map.

Talus-3 samples: six maps per terrain type

Talus-3 is the default model. Talus-3.1 is a variant for flatter maps: better plains, islands and mesas, worse ridges and mountains.

Files

File Size Contents
talus-3.pt 93 MB Talus-3 (default): EMA weights, configs and dataset statistics. No optimizer state.
talus-3.1.pt 93 MB Talus-3.1 (flat-terrain variant), same format.
onnx/talus-3.onnx 93 MB Talus-3 denoiser exported to ONNX (fp32).
onnx/talus-3.fp16.onnx 47 MB The same network with fp16-stored weights. The browser demo uses this one.
onnx/talus-3.json 25 KB Sampler metadata for the ONNX files: world scale, conditioning statistics, noise schedule and sampling preset.
onnx/talus-3.prior.bin 252 KB Placement bank the sampler uses when you leave mean elevation or relief open.
SHA256SUMS.txt Checksums. They match the GitHub releases.

The .pt files load with torch.load(weights_only=True). Sampling needs the nullscape package from the GitHub repo, which holds the model code and the sampler.

Quick start

You need Python 3.11+ and PyTorch 2.7+. RTX 50-series cards need a CUDA 12.8 build of PyTorch.

git clone https://github.com/osfv/talus
cd talus
pip install torch --index-url https://download.pytorch.org/whl/cu128
pip install -e . huggingface_hub
hf download osfv/talus talus-3.pt --local-dir checkpoints

Generate 16 island maps with 60% water and export them for Unity, Unreal or Godot:

nullscape sample --checkpoint talus-3 --archetype islands --prop water_fraction=0.6 \
    --n 16 --formats png16,r16,obj --unity --out exports/islands

Add --device cpu if you have no CUDA GPU. For the flat-terrain variant, download talus-3.1.pt the same way and use --checkpoint talus-3.1.

Which model

You are making Use
A mix of terrain, or ridges, hills and mountains Talus-3
Plains, islands and coasts, or mesas and plateaus Talus-3.1

Results

Scores on the held-out TEST split, 1,000 maps per half. Each score runs from 0 to 100, where 100 means indistinguishable from real procedural terrain at this sample size.

Benchmark What it measures Talus-1 Talus-2 Talus-3 Talus-3.1
Realism 25 terrain metrics vs real maps 34.4 56.5 66.2 64.5
Spectrum detail at every scale (power spectrum) 3.6 7.6 11.0 11.3
Heights elevation distribution 88.5 98.3 99.1 98.3
Slopes slope distribution 41.2 56.4 60.5 59.0
Control requested vs measured properties 81.8 90.4 92.1 92.4
Playability walkable-route pass rate vs real maps 98.4 97.6 99.9 99.3
Diversity variety vs real maps 96.9 94.4 95.0 94.6
Originality distance from the training maps 100 98.1 99.1 98.4
Clean detail no excess micro-bumps 58.4 97.7 99.4 99.5
Average 67.0 77.5 80.3 79.7

Per-type realism on TEST (distance to real maps over the noise floor, lower is better):

plains islands mesas hills mountains ridges
Talus-3 1.17 1.21 1.43 1.16 1.71 1.80
Talus-3.1 1.13 1.16 1.33 1.20 1.75 1.93

Both sample about 5.6 to 5.8 maps/s at batch 128 on an RTX 5060 (8 GB), or one map in 1.3 s. Full scorecards and the benchmark protocol are in the GitHub repo.

How it works

  • Data. A procedural generator builds each map from fBm, billow or ridged multifractal noise, then runs stream-power erosion, hillslope diffusion and thermal erosion. The dataset has 50,000 maps, split 45,000 / 2,500 / 2,500 into train, validation and test. Talus-3.1 continued training on 96,000 fresh maps from the same generator.
  • Model. A pixel-space U-Net denoiser (v-prediction, cosine noise schedule) conditioned on the terrain type and the five properties. Training drops each property at random, so the model learns every subset, and classifier-free guidance strengthens the conditioning at sampling time.
  • Sampling. 50 DDIM steps with quadratic spacing and guidance 2.0, stored in the checkpoint as its default preset.

Limitations

  • Talus only knows the procedural world it was trained on. It has never seen real elevation data.
  • 64x64 cells at 64 m is coarse for close-up play. Treat the output as a base layer for detail noise or upscaling.
  • Mountains and ridges remain the weakest types, and the power spectrum is still 9x the noise floor, mostly at the finest scales.
  • The roughness control (spectral_beta) is the loosest of the five properties.

License

Code and weights are under the Apache-2.0 license.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support