This is a high-level changelog for each released versions of the plugin. For a more detailed list of past and incoming changes, see the commit history.
- Added more explicit image format check before
update_collider
is called - Used absolute path in shader #includes, so forking doesn't fail to find them by default
- Added
HTerrainData.reload
function to allow reloading a terrain while the game is running (after saving in the editor) - Update properties in the inspector when a custom shader is modified
- Added support for importing and exporting 32-bit raw files
- Allow to set brush size and opacity size with spinboxes (thanks to Vercix)
- Exposed specular parameter in ground shaders
- Save terrain data immediately when assigning a new
data_directory
(attempt to workaround random saving issue #232) - Updated name detection in the texture import dialog to work better with AmbientCG and PolyHaven (thanks to GustJc)
- Optimized
HTerrainDetailLayer
process function by updating chunks when needed and spreading calculations over time - Changed detail layers format to
L8
. Before it wasR8
but that is handled inefficiently bysave_png
and Godot's import pipeline. It kept usingRGB8
which consumed more memory and printed a "Will be converted" warning. - Fixed brush cursor looked off-center at close range when using tiny brush sizes
- Fixed error when trying to change
TextureSet
mode while it has textures in it - Fixed shader parameters not displaying the right value in the inspector until they are set by the user at least once
- Fixed
lod_scale
property getter was always returning 2 instead of the last set value - Fixed LOD chunks sometimes overlapping when the heightmap is modified (issue #411)
- Fixed detail layers were rendering repeating instances outside the terrain when
map_scale
is not 1.0 - Fixed detail layers were not rendering correctly when terrain is in centered mode
- Fixed texture import dialog was opening a very tall window (issue #423)
- Fixed detail layers "lines" showing on top of grass quads when MSAA is enabled
- Fixed detail layer chunks disappearing unexpectedly when
map_scale
is very large - Fixed wrong density map when redoing the addition of a density map (undo/redo)
- Fixed
Image.load
warnings in the editor (thanks to GustJc) - Fixed detail layers rendering one chunk beyond positive edges of the terrain
- Fixed error when removing a texture from a TextureSet
- Fixed terrain loading incorrectly in release (non-debug) exports
This version requires Godot 4.1.
- Ported the plugin to Godot 4.1
- Heightmaps now use 32-bit floats instead of 16-bit floats
- Changed some APIs to use
Vector2i
- Added
cast_shadow
setting toHTerrain
- Added
cast_shadow
setting toHTerrainDetailLayer
- Added slope limit slider to detail density painting
- Exposed
roughness
in detail layer shader (but reflections may be off due to the normals hack) - Allow decimal values in
min_height
andmax_height
when importing a heightmap - Changed shape list in brush settings so it can be used as a regular palette when cycling is off
- Fixed terrain not functional when using a 32-bit version of Godot (The GDNative library is only maintained for 64-bit)
- Fixed TextureSet editor logging errors when selecting slots with textures using color codes instead of image files
- Fixed texture list becoming empty when selecting another terrain sharing the same TextureSet
- Fixed static typing error in terrain importer dialog (thanks to McSpider)
- Added island modifier to the terrain generator
- Added option to add the current heightmap to the generated one in the generator
- Added
render_layers
property to expose the same asVisualInstance.layers
- Added
anisotropic
parameter to packed texture importers - Added support for loading terrain maps imported as
Image
, allowing modification in game - Added basic support for pen pressure (tablets)
- Added random brush rotation
- Added brush multi-shape randomization
- Added brush spacing based on time and distance
- Added support for importing
.xyz
files as heightmap - Added rotation and centering support
- Increased brush size slider maximum to 500, and allow up to 4000 if typed in (expensive, use at your own risk)
- Ported quad tree code to GDNative for a bit of speedup on Windows and Linux (thanks to tinmanjuggernaut)
- Prefixed ALL internal classes of the plugin to prevent clashes with
class_name
(see issue #313) - Added workarounds to allow the plugin to initialize even if assets are not imported yet (The UI might still have issues, in this case you need to restart Godot)
- Dropped support for Godot 3.1 and 3.2 due to engine crashes.
- Fixed grass chunks not updating properly when the terrain is moved
- Fixed invalid index error that can happen in some cases in the TextureArray importer mode
- Fixed loading an existing texture array when the current texture set is empty
- Fixed
BaseButton.focus_mode
warning printed when the plugin is enabled - Fixed some dialogs going outside window if editor font is larger (buttons outside windows did nothing)
- Fixed flatten brush not allowing to set decimal heights
- Fixed wrong shading in
multisplat16
shaders
- Fixed globalmap baker not working with terrain sizes below 513
- Fixed texture file dialog not including
.packed_tex
files
- Fixed undo not working correctly when painting textures while using MultiSplat16
- Fixed grass painting not working
- Added
multisplat16
shader, allowing to use 16 ground textures - Added
HTerrainTextureSet
resource to store and re-use sets of ground textures - Added an import tool for ground textures
- Added generic importers for packed textures (as backend for the ground texture import tool)
- Added About Dialog, including version, links and donors list
- Added slope limiter to texture painter
- The brush system was rewritten to use shaders, for better performance
- Added erosion brush
- Brush size slider allows to pick small sizes more precisely
- The minimap now uses the globalmap to display color (uses white if there isn't a globalmap)
- Fixed brush jitter at small sizes
- New docs website: https://hterrain-plugin.readthedocs.io/en/latest
- Added properties to set collision layer and mask
- Added a parameter in
Classic4
shaders to reduce texture tiling - Added a scale parameter to the default grass shader
- Added lookdev mode to visualise terrain maps with debug colors
- Added height picking to the flatten tool
- Adding and removing detail maps is now undoable
- Detail layer nodes no longer auto-select their index
- Breaking change: normal maps of ground textures now use OpenGL convention like Godot, instead of DirectX convention
- Fixed removal of detail maps not being saved properly
- Fixed GDNative library being registered with the wrong name on Linux
- Fixed error when selecting a detail layer node having an index out of range
- Fixed detail layers with a custom mesh disappearing when their density is left to default value
- GDNative acceleration now has a prebuilt binary on Linux
- Fixed collider being offset by half a cell
- Fixed default 1x1 shape data causing an assertion in Bullet since Godot 3.2.3, using 2x2 instead
- Fixed script syntax error to workaround Godot 3.1 limitation
- Fixed cast issue of integer ID from JSON when loading terrain data
- Fixed error when using an orthogonal camera
- Fixed error when detail layer view distance is set to different values than default
- Fixed detail layers not painting properly when selecting one above 0
- Fixed error when finishing a paint gesture while not having painted anything
- Fixed small inaccuracy between the heightmap pixels and visual position of vertices (#183)
- Fixed errors when setting
map_scale
to0.01
and below - Fixed error when saving a terrain with
map_scale
different than its default value
- Fixed new terrain maps saving with wrong import settings
- Added new Array shader allowing up to 256 ground textures, and new docs about this workflow
- Added shaded view to the minimap with a camera icon, quadtree view is optional
- Added simple "low-poly" shader without textures
- Added per-texture color factor and UV scale to the main Classic4 shader (thanks Tinmanjuggernaut)
- Added ability to specify a custom detail mesh, and bundled a few in
models/
folder - Added an option to choose endianess when importing a raw heightmap
- Added EXR to heightmap import options
- Reworked ground texture selector to display packed and array textures correctly
- The default shader is now CLASSIC4_LITE, the other one needs extra setup
- Fixed rare terrain chunk popping due to vertical size wrongly rounded
- Fixed undo not working correctly with more than one detail layer
- Fixed texture editor allowing to load textures from outside the project (which doesn't work)
- Fixed texture editor not allowing to choose JPG images
- Fixed global translation not being taken into account (local was used as global)
- Fixed Godot crashing or running out of memory after lots of edits
- Optimized doc images to shorten download from assetlib (thanks to Calinou)
- Improved LOD in orthogonal projection where the camera is very far away
- Allow to choose lower terrain resolutions
- Optimized raycast when painting from large distances
- Limited detail layer max distance in the inspector, for performance reasons
- Fixed detail painting could not be erased
- Fixed import of splatmap and color map
- Fixed brush not working in orthogonal view
- Fixed grass chunks disappearing when their global density is changed
- Fixed error in exported game due to an editor-specific class being present in a script
- Fixed u_terrain_normal_basis parameter which should not appear in detail layer inspector
- Fixed lower brush not working
- Added GDNative component to accelerate some parts of the plugin (Windows only, more platforms to come).
- Platforms where GDNative doesn't run will fallback on GDScript
- Larger brush sizes can be used on platforms where the GDNative component is supported
- Added proper "smooth" brush, old smooth is now called "level".
- Added EXR format to terrain exporter
- Improved UI for high-DPI displays
- Using the generator can be undone
- More type hints in the codebase
- The plugin no longer prints debug logs, unless Godot is executed in verbose mode
- Fix terrain not hiding if its parent node is hidden
- Fix z-fighting artifacts when the terrain is hidden and shown back
- Fix offset brush when the 3D viewport is in half-resolution mode
- Fix 8-bit PNG heightmap export
- Added configuration warning if the terrain node has no data assigned
- Grey out menu items if conditions for them to work aren't fulfilled.
- Increased maximum chunk size to 64 to help performance tuning. Default is now 32.
- Fixed
map_scale
not working - Fixed inspector becoming blank when shader type is set to "custom" while no shader was assigned yet
- Fixed tiny imprecision when importing raw heightmaps
- Fixed version check causing the collider to be offset in Godot 3.1.2
- Added tool to export heightmap data to a raw file or image
- Add ability to change base density of grass
- Collision hits now report
collider
as the terrain node instead ofnull
- Most of function signatures in the API now use typed GDScript
- Fixed whitespace at the end of
plugin.gd
seen as an error in Godot 3.2 - Fixed collider vertically offset due to a change in the Bullet module
- Fixed inspector not updating properties when the shader is changed
- Fixed terrain not saving if the scene is saved just after a non-undoable action (using a workaround)
- Fixed terrain areas becoming black if resized bigger
- Fix grass shader, it wasn't handling vertical map scale correctly
- Fix smooth brush behaving like raise/lower in opacity lower than max
- Fix terrain not saving changes made from the generator
- Remove obsolete Save and Load menus, they don't work anymore
- Saving a scene now saves terrains properly
- Grass layers are now nodes for ease of use
- Customizable grass shaders
- Customizable grass distance
- New documentation
- Fixed resize causing artifacts on heightmap and brushes (engine side)
- Fixed pickable collider causing a huge slowdown (raycasting is still slow but needs a fix in Bullet Physics)
- Added morphologic erosion to terrain generator
- Added global map baking
- Added ground shader parameter to blend towards global map over distance
- Added properties to tint grass using the global map
- Added property to tweak shading at the bottom of grass
- Speed up sculpting by moving normals baking to GPU
- Slightly improved LOD performance
- Increased default file dialog size when selecting grass texture
- Fixed issue with grass shading based on ground normals
- Fixed grass preview lighting (was too dark)
- Reduce checkbox size in generator tool
- Make zoom slower in generator tool
- Fixed brush decal not showing up at certain angles
- Fixed script error in some of the tools
- Fixed terrain inspector not allowing to set shader textures
- Bring back configurable brush shapes
- Improved terrain generator UI with 3D preview, baseline and draggable offset
- Added tool to generate a full mesh of the terrain so Godot can bake a navmesh
- The strength of sculpting tools is now proportional to brush size
- Terrain resources generate a greyscale thumbnail
- Resizing can be done by cropping or expanding in a given direction (Terrain menu)
- Fixed potential cleanup error when the editor closes
- Fixed custom types not cleaned up when the plugin is disabled
- Fixed LOD to take height into account on tall mountains
- Fixed terrain textures being lossy-compressed when reopening the project
- Fixed grass painting being available when there are no detail layers
- Heightmaps are now saved as
.res
so they are included in export - Fixed cursor decal not showing when creating a terrain from scratch
- Fixed editor nodes not cleaned up when the plugin is disabled
- Select grass tool after adding a new grass type
- Custom ground shaders
- Added a variant of the default shader which uses less texture samplers
- Collision is active by default
- Collision works in editor so other tools can use it (update is manual)
- Compatibility breakage: packed bump and roughness were swapped in ground shader API
- Fixed a few culling bugs
- Fixed error when adding a detail layer while looking far away
- Fixed normals not updating when generating a terrain over an existing one
- Fixed terrain LOD updating around the game's camera instead of the editor's camera
- Added basic ambient wind (waving grass)
- Improved import of heightmaps, splatmaps and colormaps
- Option to double chunk size (better quality and less draw calls but more vertices)
- LOD scale can be changed (better quality but more draw calls)
- Collisions are now working with Godot 3.0.4 and later
- Fix errors when clicking while the terrain has no data
- Terrain can be scaled using special
map_scale
property - Improved icons
- Grass can be erased properly
- Saving only saves what's needed
- Fixed grass culling
- Added level of detail
- Added grass painting
- Added generator
- Changed collision to use Bullet (on Godot master branch only)
- Improved texture paint to use a splatmap
- More shading features
- Various other changes in UI and API
- Added texture paint through vertex colors
- Added HumanSheeple's shader to support up to 18 textures
- Added jump to the demo, I guess
- Fix Modo navigation conflict
- Added collisions
- Improved demo with a simple character controller
- New icon
- Added flatten brush mode
- Fix terrain having no default size
- Fix bottom panel editor conflict
- Heightmap edition with undo/redo
- Small demo with simple texture-less shader