Skip to main content

Errant Landscape 1.7

· 8 min read

MountainsScreenshot

This release focuses on reliability and polish throughout the plugin, closing gaps in functionality and Blueprint interfaces, as well as helping users avoid common mistakes.

Stamp Brush

  • Noise Input for Stamp Brush - You can now add noise as an input source in your Stamp Brush. These are the same controls as in the Noise Brush, with an added benefit that they can now be blended with other input layers easily.
  • Detecting Material Parameters - We added automatic detection of material parameters when a material is used as a Stamp Brush source. This facilitates creating brushes based on procedural logic.
  • Large Brushes - Errant Landscape can now handle brushes that cover extremely large areas of the landscape - larger than the maximal supported texture size in Unreal Engine (16k x 16k). It achieves that by recursively dividing the render area into smaller regions and rendering them separately, when needed.
  • Spline-Point Scale Component Support - When using a Stamp Brush in Spline mode, you can now select which of the spline point scale components (X, Y or Z) to interpret as width. This is needed to make the StampBrush scale properly when used with the Shallow Water River simulation, in a setup where both the riverbed and the water simulation are controlled with a single spline.
  • Proxy Selection Tool - We added a tool for limiting which landscape proxies can be updated. It helps prevent accidental changes and facilitates teamwork.
  • Tools for Resolving Priority Conflicts - We added tools for resolving priority conflicts between brushes.
  • Priority Conflict Warnings - The editor can now warn when two brushes use conflicting priorities. These warnings can be disabled in Project Settings.
  • Priority View Redesign - We improved the Priority Tool's UI and filtering.
  • Use UTexture for Stamp - The Stamp Brush now accepts a more generic UTexture type as input, instead of a UTexture2D. This allows passing a Render Target as input, opening the door for your own systems to generate heightmaps for Errant Landscape in the Editor or at runtime.
  • Nanite, Landscape Grass, Physical Materials and PCG Data are now rebuilt automatically when editing is finished.

Runtime Landscape

  • Clear Naming - We improved naming of the Persistent/Non-Persistent runtime brushes. They are now called Static/Dynamic brushes for clarity. Similarly, Persistent Layer is now called Static Layer.
  • Brush Priority System - Runtime brushes now support Priority which ensures they apply in the correct order, in the same way that offline brushes do.
  • Spline Brush - Runtime brushes can now be deformed using a spline, allowing you to create rivers and embankments during gameplay.
  • Spline Static Mesh - We added a runtime version of the Spline Static Mesh Component that can be used to add a water surface mesh along the Spline Brush.
  • Runtime Grass Updates - Landscape Grass can now be updated automatically when runtime brushes finish applying their changes. This option is disabled by default and can be enabled in Project Settings -> "Flush Grass Components".
  • Brush Landscape Setter - We added a SetBrushLandscape function in code and Blueprint for changing the landscape a brush writes to.
  • SetDefaultLandscape for Blueprints - We exposed SetDefaultLandscape function for use in Blueprints, allowing you to change which landscape the plugin writes to by default.
  • Bounds Visualization - We added bounds visualization for runtime brushes in the Editor. Selected brushes now render an outline just like the offline brushes.

Blueprint API Enhancements

  • QueueRender Callable from Blueprints - You can now call QueueRender from Blueprint, allowing you to trigger runtime landscape updates in your game logic.
  • GetBrushPriority Access - Fixed GetBrushPriority to be properly usable from Blueprints.
  • OnLandscapeCollisionsUpdated Delegate - New Blueprint-callable delegate that fires when landscape collisions are updated at runtime.
  • Property Setters - Added missing setters for variables that Unreal Engine adds to the Blueprint editor but fails to call modify on.
  • SetMaskPostProcessMaterial for Blueprints - Exposed SetMaskPostProcessMaterial function in Blueprints.

User Interface

  • Brush Outline Scaling - Added an option to scale brush outline with brush size.
  • Tag List Sorting - Tags are now sorted alphabetically in the filter UI.
  • Duplicate Tag Warnings - UI now warns when multiple tags use the same name.
  • Level Instance Brush State - brushes placed in Level Instances are now greyed out if they cannot be edited.
  • Selection Through Translucent Objects - Translucent objects no longer block brush selection in Errant Landscape mode.
  • Background Work Notifications - Added notifications for ongoing background work.
  • Resizable Visualize Masks Widget - The mask/weightmap preview widget can now be resized.
  • Realtime Override - Entering Errant Landscape editor mode now automatically enables realtime viewport updates.
  • Tooltips Improvements - We improved tooltips and UI texts throughout the plugin.

World Partition Builder

  • World Partition Builder Volume Selection - The World Partition Builder can be limited to build only within the given volumes.
  • ErrantLandscapeCellSize Commandlet Parameter - Added a commandlet parameter for controlling Errant Landscape cell size.
  • Submitting files - Fixed commandlet files not getting submitted.

Memory & Debugging

  • LLM Memory Tags - Added LLM (Low Level Memory) memory tags for Runtime Landscape to allow for memory profiling.

Fixes & Performance

Critical Fixes

  • PCG landscape data is now updated automatically after each edit
  • Fixed a crash that occurred when runtime landscapes had Z locations that were too high
  • Fixed a crash when selecting a Bridge actor in Unreal Engine 5.5
  • Fixed a fatal error that occurred when removing landscapes
  • Fixed a crash during ConvertHeightmapToCollisionData operation in Runtime Landscape
  • Fixed a crash when building physical materials from the commandlet

Stamp & Brush Fixes

  • Fixed crashes when Stamp Brush had null materials
  • Improved crash handling during Stamp Brush material validation
  • Fixed garbage data appearing in layered stamp textures when no mask is applied
  • Fixed broken "reset to default" button on Stamp Brush layers
  • Ensure stamp textures are loaded before painting
  • Fixed references to outdated mask asset paths in noise brushes
  • Fixed Stamp Brush render thread access by avoiding GetOwner calls on the Render Thread
  • Fixed rendered input materials using invalid sizes
  • Fixed Bridge actors registering twice
  • Fixed brush updates not being visualized on Nanite landscapes

Mask & Material Fixes

  • Changing mask render size no longer leaves leftover mask data
  • Fixed post-process material not rendering correctly when using textures that aren't pre-loaded
  • Fixed mask painting missing mouse inputs
  • Fixed mask preview not showing until the mask view was clicked on

Runtime Brush Fixes

  • Fixed invalid out-of-bounds render warnings for runtime brushes
  • Don't check whether Dynamic Brushes are within the Static Volume actor bounds
  • Fixed Static brushes failing to render when landscape has an offset
  • Fixed issue where landscapes could be removed outside the main thread
  • Removed incompatible settings from Static Brushes
  • Fixed Bridge actor references after copying brushes between levels
  • Brushes now properly update when landscapes are moved
  • Fixed NavMesh not updating in packaged games
  • Only shaders that are needed for Runtime Landscape are now packaged in the game.

Subsystem & Editor Fixes

  • PCG landscape data is now updated automatically after each edit
  • PostDuplicate is now properly called on components after duplication
  • Fixed UI issue when drag-duplicating brushes
  • License state changes now properly refresh the UI from the Editor Mode
  • Fixed potential memory issues with property unregistration
  • Runtime landscape changes now properly reset when reloading a game level in PIE
  • Fixed SetLandscapeLayer Blueprint issues
  • Fixed SetSplineParamsOnStampBrushComponent crash
  • Fixed IsValidData spam from brushes
  • Fixed cached bounds invalidation issues
  • Fixed text visualization not updating after clear
  • Fixed landscape edits not always finishing before Errant Biomes generation
  • Fixed Biomes mask jobs being flushed too early
  • Fixed World Partition Builder sometimes missing landscape actor proxies

Editor UI Fixes

  • Fixed outdated EditCondition checks in UI
  • The plugin now displays unique error notifications instead of duplicating them
  • Fixed missing noise brush mention in certain UI contexts
  • Hide Biomes Mask visualization when Biomes Plugin is not available
  • Fixed a typo in the Visibility Mask name
  • Fixed Protected Mode alpha setting not working
  • Fixed weightmap visualization list not populating
  • Fixed brush visualization drawing when paint visualization is disabled
  • The acquire seat widget now closes after pressing the button
  • Fixed brush Mask getting cleared when a brush added in a Blueprint was modified

Performance & Optimization

  • Track lifetime of brushes when sent to other threads, preventing crashes
  • Various performance improvements in landscape utilities for Split/Merge operations
  • Fixed errors in the weightmap Split and Readback operations
  • Added partial updates based on the Update Mask
  • Limited the maximum number of brush update tasks per command list
  • World Partition Builder now runs PerFrameCleanupIfSkipRenderer during commandlet execution

Upgrade Notes

When upgrading from 1.6.x to 1.7.0:

  1. "Runtime Persistent Brushes" have been renamed to "Static Brushes" - existing brushes will continue to work
  2. Review brush priorities if you have multiple runtime brushes affecting the same landscape