Check out SimpleXTerrain, a free and open-source node-based world generator for Godot 4 made by Prajwal.
Developer
Prajwal recently released
SimpleXTerrain, a free terrain generation addon for Godot, built after running into a problem while working on an open-world game.
When creating large worlds in Godot, Terrain3D helped with the rendering but not with the procedural generation side. SimpleXTerrain was made as the solution to that problem.
The tool uses a visual node graph that allows users to create terrain in Godot.
This graph includes generators for:
- Perlin noise
- Fractal noise
- Voronoi patterns
- Primitive shapes
You can combine those with modifiers for effects like erosion and texture blending.
According to Prajwal, just placing different trees on the same terrain does not make environments look distinct. For example, mountains and deserts need different terrain shapes and erosion patterns.
That is why the tool comes with multiple biome presets, such as:
- Alpine peaks
- Desert landscapes
- Glacial valleys
- Plains
- Terrace hills
One of the biggest challenges during development was performance. At first, the terrain was generated on the CPU. It worked, but was too expensive.
To reduce that cost, Prajwal moved operations such as: Perlin noise generation, blending, and blur calculations to Vulkan compute shaders.
This moved much of the generation work to the GPU. According to Prajwal, the system can now generate 80 terrain chunks in under five seconds on a mid-range laptop.
After the terrain generation system was working, they moved on to a texture splatting system.
The addon uses the height and slope across the terrain to generate splat maps for Terrain3D. This allows for textures like grass or snow to appear in different areas based on the shape of the landscape.
For now, Prajwal is still testing the foliage scattering system. The nodes are already there, but some hardware limitations made it difficult to stress-test them yet.
If you want to learn more about SimpleXTerrain, the links will be right below.