SketcherTools
A non-destructive terrain heightmap authoring plugin for Godot 4, designed to complement brush-based terrain plugins like Terrain3D. Instead of painting terrain directly — which permanently modifies heightmap data — SketcherTools lets you compose terrain elements as independent objects that can be freely repositioned, rescaled, and reconfigured at any time.
The Problem It Solves
Brush-based terrain editing is destructive by nature. Once you sculpt a mountain, you cannot move it — you have to erase and redraw it from scratch. This becomes increasingly painful as your world grows larger.
SketcherTools introduces an object-based composition approach where every terrain formation is a standalone object with its own transform. Nothing is committed to the final heightmap until you explicitly export it.
Key Features
🗺️ Non-Destructive Workflow
Every sketch object stores its configuration as data — position, rotation, scale, noise parameters, blend mode, falloff, and curve modifier. Change anything, anytime. The heightmap is recomputed from scratch every frame during editing.
🏔️ Procedural Heightmap Generation
Three noise algorithms are available as heightmap sources, all implemented natively in GLSL shaders:
- Perlin Noise — smooth, natural-looking terrain base
- Fractal Brownian Motion (FBM) — layered detail with configurable octaves, lacunarity, and gain
- Ridged Noise — sharp mountain ridges and dramatic peaks
🗿 Primitive SDF Shapes
Generate heightmaps from basic geometric forms using Signed Distance Functions:
- Circle — smooth radial gradient, ideal for isolated hills or craters
- Box — square gradient, ideal for plateaus or flat-edged formations
🖼️ External Heightmap Input
Use any existing heightmap image as a sketch object source — real-world elevation data, purchased assets, or heightmaps from other tools.
🎛️ Per-Object Composition Controls
Falloff Smooth the edges of each sketch object to avoid hard cuts:
None— no falloff appliedSquare— Chebyshev distance-based box falloffRadial— Euclidean distance-based circular falloff
Curve Modifier Reshape the height distribution of any sketch object:
None— use heightmap values as-isExponential— apply power curve to height valuesFree Curve— define a custom curve directly in the Godot editor
Blend Modes (Combine) Control how each object interacts with the terrain below it:
MAX— take the higher value (additive elevation)MIN— take the lower value (depressions, valleys)MIX— linear interpolationFLATTEN— pull terrain toward a target heightADD— direct additionSUBTRACT— direct subtraction
Replace Mode Override terrain values directly, with edge transitions controlled entirely by the object's falloff setting.
👁️ Real-Time Preview
- 2D — grayscale heightmap preview updated every frame
- 3D — vertex-displaced plane mesh for topographic preview from any camera angle, with Sobel-based normal recalculation for accurate lighting
📦 Multi-Chunk Canvas
The sketch board uses a GPU-accelerated multi-chunk system powered by MultiMeshInstance3D. Configure canvas size through:
- Chunk Level — number of chunks per axis (1×1 up to 16×16)
- Chunk Size — size of each chunk in meters (64 to 2048)
This allows large terrain canvases without being limited by maximum texture size.
💾 Adaptive Tiling Export
Export your composition as EXR heightmaps (32-bit float, single channel):
- Single file when export size ≥ canvas size
- Multi-tile when export size < canvas size, with
coordinate-encoded filenames (e.g.
sketcher_128_-256.exr)
Tile filenames encode their world-space position, making them directly compatible with Terrain3D's import system.
🔁 Direct Terrain3D Import
An included import utility reads your exported EXR tiles and places them at the correct world positions in Terrain3D automatically — no manual coordinate entry required.
Workflow Overview
Changelog for version v0.0.1-beta1
2026-08-03 07:29:34
No changelog provided for this version.
Reviews
Not functional in 4.7, Sketch's have no effect on the SketchBoard they are parented to, following the exact steps in the linked video of the asset do not reproduce the behavior of the plugin shown in the video. Would be of much help if there were some documentation released for the plugin as maybe the methods used in the video are out of date, considering the unstable tag?
Login to write a review.