Errant Paths 0.10 introduces MacOS and Linux development support, adds new features like multiple sub-actors per Path for enhanced streaming, improved handling of RVT and more powerful Generation Callbacks, plus many other fixes and improvements.
New Platforms
The plugin compiles and runs correctly on Unreal Engine 5.4 Preview. We will provide precompiled binaries as soon UE 5.4 is officially released.
Users who own Errant Paths source code can now develop on MacOS and Linux! We plan to start providing precompiled binaries in the near future.
New Features
- Each Path is now spawned as multiple actors to improve streaming performance and reduce hitches. Paths can be divided into sub-actors based on distance along the Path or based on 2D/3D grid. Custom splines can also be spawned as separate sub-actors. For more details, see our documentation.
This feature introduced an ambiguity when selecting Paths - it wasn't clear whether user wants to select a Path or one of its sub-actors. We solved it by adding a toggle button in UI that switches between selecting Paths and sub-actors.
- Paths can now adjust multiple landscapes. It works even if two landscapes are overlapping.
- Path smoothing can now be controlled separately horizontally and vertically.
- We added a new PathTemplateDecalComponent that adds Path related properties to decals (such as randomization, spawning multiple copies, etc).
- GenerationCallbacks can now access PathLabels which allows for all kinds of interesting procedural effects. You could for example automatically adjust material parameters of meshes on the outside of sharp turns (such as scratches on the guardrails).
- Generation Callbacks can now be set not just for a mesh, but also for the entire Path (set in PathDescription). Callbacks set this way are run for all the meshes spawned by the Path. Our first use-case for them is to conditionally disable RVT in places where multiple Paths overlap vertically.
Improvements
We added a fallback server for license validation which is used in case of the main infrastructure failure. Aside from minimizing the chance of failure it also gives us more control in mitigating the situation.
We optimized various stages of Path generation and siginificantly improved landscape adjustment speed (5-50x).
Auto-regeneration can now be restricted to selected Paths. It solves the problem of having to wait for all the Paths to generate when we only care about one or two Paths we are working on right now.
- We solved the problem of Paths that use RVT and overlap vertically (elevated highway passing over another road). Previously, both road/highway would write and read from RVT, causing duplicated lane markings on both of them. Now we detect such areas using a PathLabel "IsPathAboveOrBelow" and run a Generation Callback that disables RVT for meshes in the area.
- We also managed to fix incorrect rendering of meshes using RVT in the Blueprint Editor.
To learn how these RVT-related improvements work, see our documentation.
Getting these improvements requires updating to Errant Paths 0.10 and the Asset Library 1.1.
- We added a warning when RVT is used in Paths but isn't enabled or fully configured in the level. RVT can now be configured with a single button click.
- Connecting multiple Paths to one end of another Path is now possible. Previously, multiple Paths could be aligned with another Path, but couldn't be permanently connected.
We now revert changes in BiomeMasks/Biomes when a Path is deleted. We also warn when we can't cleanup Biomes because Landscape/Biomes adjustment is disabled.
We switched from using GameplayTags to our own Tag assets. The problem with GameplayTags was that they were saved in the project configuration and couldn't be transfered or added to projects together with Path assets. They had to manually copied to the correct configuration file. Our new TagAssets can be moved like all the other assets, are easy to manage/rename and can be organized hierarchically via folder structure.
Paths Templates that use GameplayTags will now fail to compile and you will be forced to replace them with TagAssets. We describe this process in the documentation.
Path Adjustment (Projection, smoothing, etc) is now performed incrementally (in the background, over many frames) in order to improve editing performance and responsivness for long Paths.
Editing a Path now dirties its Dependant Paths, making it easier to keep Dependant Paths up to date.
Improved reliability of SpawnAtInterval for connected Paths
Fixes
- DirtyPath visualization is now hidden when Path is hidden in the Outliner.
- When editing a Path, generation of connected Paths is now postponed until th edition is finished.
- Fixed infinite loop when searching for nearest spawned Tag in Paths that create a closed loop.
- Reversing a Path now handles connections correctly.
- Fixed unnecessary regenerations of Paths that were only affecting the landscape (no spawned components).
- Fixed freezing when landscape adjustment is performed on unloaded landscape tiles.
- Fixed landscape adjustment when MainPathSpline is very long in the PathTemplate.
- Fixed a crash when UWorld and UEpDirtyPathsWorldSubsystem are not present.
- Clearing a Path now regenerates BiomeMasks/Biomes if needed.
- Dependant Path generation now waits for the primary Path generation to finish.
- Fixed Path occasionally connecting to another path/intersection backwards.
- Path no longer sinks in during forced generation when "Project Onto Geometry" is enabled.
- Spawned HISM components now have their mobility set to match the template component they are based on.
- Fixed LandscapeAdjustment timout not working reliably.
Patch 0.10.1
- Fix incorrect tangents in Paths created from Landscape Splines
Patch 0.10.2
This patch contains several crucial fixes to landscape adjustment precision and reliability.
- Fix occasional spikes/gaps in landscape adjustment on landscape component edges.
- Fix incorrect bilinear filtering when rendering meshes into the heightmap. It was likely causing decreased landscape adjustment precision.
- Don't fill the landscape component with the default weightmap on Path generation. We assume that Paths affect a separate Edit Layer in a multi-layer setup and thus should only add its weightmap weights on top of the existing weightmaps in other Edit Layers.
- Fix incorrectly adding mesh HISMs to landscape adjustment on level save (even if they didn't want to affect landscape). Fixed the crash in FStaticMeshOperations::ValidateAndFixData in UE 5.4.
Patch 0.10.3
This patch contains crucial fixes to landscape/foliage adjustment and Path bounds.
- Fixed landscape adjustment creating spikes/bumps in places where there was a sudden change in the terrain shape (cliffs, holes, edges).
- Fixed freezing when a Path with large bounds was generated over a large landscape.
- We fixed several causes of inflated Path actor bounds:
- Temporary splines used during the generation don't affect the bounds anymore.
EpLandscapeBiomesAdjustmentComponent
doesn't affect bounds anymore as it was converted fromSceneComponent
toActorComponent
.- Origin of the
PathSplineComponent
is now moved to its first point on Path generation. - Older, unused landscape adjustment splines are now removed during Path generation.
- Foliage (spawned with Foliage Tool) is now properly adjusted to the new landscape shape on Path generation.
- Path generation doesn't create multiple "User loaded regions" in World Partition minimap anymore.
- Paths that are not aligned/connected can now be merged.
- Fixed deprecation warnings for Errant Biomes interop interface.
- Splines used during the generation are now marked as Editor-only.
Conversion of EpLandscapeBiomesAdjustmentComponent
from SceneComponent
to ActorComponent
means that splines that were previously attached to it will now cause warnings.
To fix these warnings, you need to regenerate all the Paths.
Patch 0.10.4
This patch addresses a critical issue where Path generation could inadvertently remove landscape adjustments from nearby Paths. The clearing occurred only within the Errant Paths Edit Layer, not in the final landscape height, making the problem difficult to detect.
The issue was typically noticed when users entered the Landscape editor mode and observed that Path adjustments had disappeared. This occurred because, upon entering the mode, the landscape height was recalculated based on the Edit Layers, including the corrupted Errant Paths edit layer.
To repair the missing landscape adjustment in the Errant Paths Edit Layer, regenerate all Paths (with landscape adjustment enabled) after applying the patch. Be sure to save changes made to the landscape.