Description
Changelog
Reviews
SimpleXTerrain
SimpleXTerrain is an open-source procedural terrain generation addon for Godot 4 .NET (C#). It uses a visual node graph editor to define terrain generation rules and streams chunks dynamically around a camera target in real time, uploading generated data directly into Terrain3D regions.
Features
Height Generators
- Perlin Noise (single-octave gradient noise with quintic interpolation)
- Fractal Noise (multi-octave summation with turbulence blending)
- Voronoi Cellular Noise (five blend types: Flat, Closest, SecondClosest, Cellular, Organic)
- Radial Spot (circular brush stamps with hardness-controlled falloff)
- Primitive Form (gradient, pyramid, and cone generators with tiling modes)
- Texture Input and Spline Input generators
Terrain Modifiers
- Levels and Contrast (symmetrical gamma remapping)
- LUT Curve (uniform lookup table deformation)
- Blend Combiner (multi-input mask-weighted blending)
- Slope Selector (discrete neighbor delta slope masks)
- Hydraulic Erosion (Moore flow accumulation cellular automaton with O(N) radix sort drainage)
- Moore Soil Erosion (Von Neumann soil lifting and mass-conserving sediment pouring)
- Smooth Terrace (Hermite-quantized step transitions)
- Hermite Ledge (contour cliff generation with top/bottom shoulder blending)
- Shoreline Beach (multi-sweep shore relaxation and underwater sand distribution)
- Parallax Displacement (directional pixel-shift with per-axis intensity masks)
- Aspect Shading (topographic shade and highlight dot-products)
- Binomial Blur (separable multi-pass kernel smoothing)
- Discrete Laplacian Cavity (finite difference curvature detection)
- Island Mask, Ocean Level, River Generator, Lake Excavator
Biome System
- Whittaker Biome Diagram lookup (temperature and precipitation axes to biome type)
- Unified Biome Blending (partition-of-unity weight normalization across multiple biome presets)
- Biome Reference nodes for modular graph composition
Texture Splatting
- Height-based and slope-based texture weight generation
- Unified Splatmap output directly into Terrain3D control maps
- Multi-layer mask normalization ensuring weights sum to 1.0 at every texel
Object and Foliage Scatter
- Stochastic rejection sampling with mask-weighted density control
- Mitchell's Best-Candidate blue noise point distributions
- Object and foliage placement nodes (implemented but not fully stress-tested)
GPU Acceleration
- Vulkan compute shaders dispatched through Godot's RenderingDevice API
- GPU-accelerated nodes: Perlin Noise, Fractal Noise, Blend, Blur
- Chained multi-stage dispatch with ping-pong VRAM buffers and pipeline barriers
- CPU remains idle during GPU generation, preventing frame drops
Chunk Streaming
- Asynchronous generation on background .NET threads
- Dynamic Terrain3D region allocation and deallocation around the camera
- Chunk edge welding to prevent visual seams between generated regions
- Direct memory injection into Terrain3D (no disk I/O during streaming)
Spline and Path Systems
- Dijkstra pathfinding with topographic cost functions
- Gabriel Graph network generation
- Spline Conform and Stroke nodes for roads and rivers
- De Casteljau subdivision and Legendre-Gauss arc length integration
Included Demo
The addon ships with a complete self-contained demo:
- 10 biome presets: Alpine Peaks, Badlands Oasis, Desert, Eldritch Canyonlands, Everest Range, Glacial Valley, Mountain Valleys, Mountains, Plains, Terraced Hills
- world.tres: A combined graph blending all 10 biomes into a single Whittaker-classified procedural world
- infinite_demo.tscn: Ready-to-run demo scene with a fly camera
- Terrain3D: Bundled in the repository under addons/terrain_3d
Requirements
- Godot 4.6.3 .NET Edition
- .NET 8.0 SDK
- Terrain3D (included in the repository)
Documentation
Full technical documentation is available at: https://github.com/prajwal-mx/simplex-terrain-docs
Known Limitations
- The foliage and object scattering system is implemented but not fully stress-tested due to hardware constraints during development. Community testing and contributions are welcome.
- The GPU path currently covers Perlin noise, fractal noise, blend, and blur nodes. Remaining nodes use the CPU async path.
Changelog for version v1.0.0-alpha
No changelog provided for this version.