Skip to main content

Errant Paths 0.10

· 9 min read

MountainsScreenshot

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.

    Apple Linux Logo

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.

SubActors

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.

SubActors Toggle

  • Paths can now adjust multiple landscapes. It works even if two landscapes are overlapping.

SubActors

  • Path smoothing can now be controlled separately horizontally and vertically.

Horizontal Vertical Smoothing

  • We added a new PathTemplateDecalComponent that adds Path related properties to decals (such as randomization, spawning multiple copies, etc).

Decal Example

  • 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 Callback Accessing Labels

  • 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.

Per-Path Generation Callbacks

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.

Auto Generation Selection

  • 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.

Fixed RVT Overlap

  • We also managed to fix incorrect rendering of meshes using RVT in the Blueprint Editor.

RVT in Blueprint Editor

To learn how these RVT-related improvements work, see our documentation.

info

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.

RVT Warning

  • 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.

Multiple Paths Connected to one Path

  • 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.

Tag Assets

Tag Widget

info

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 from SceneComponent to ActorComponent.
    • 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.
info

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.

info

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.

Patch 0.10.5

This patch fixes:

  • Paths failing to paint weigthmaps for landscape components with certain weightmap combinations
  • A crash that was occurring during the level saving when GarbageCollection was triggered (caused by accessing destroyed RenderStates due to a recently introduced optimization).
  • PathSplines in intersections behaving erratically, being offset from the correct position, not resetting properly and not adjusting properly when the MainPathSpline is edited.
  • A crash when updating Paths through our BP API without the Errant Biomes plugin enabled/present.
  • Many functions not showing up in the Generation Callback BPs in the right-click menu (functions that required WorldContext to work).
  • Warnings about missing or outdated Errant Biomes when the Path isn't updating the Biomes

Additionally, in this patch we increased the default processing time per-frame when generating Paths. This means slightly faster generation at the cost of lower FPS when Paths are generating. Those settings can be changed in "Editor Preferences" (under Errant Paths -> Incremental Update -> "MaxProcessingTimePerFrame" and "MaxProcessingTimePerFrameWhenIdle").

info

After installing the patch, fixing the intersections requires recompiling their PathTemplates, regenerating their Paths, and clicking the "Reset" button in the Errant Paths Editor mode.

To make this task easier, the plugin will display a notification about a PathTemplate requiring recompilation when an intersection is regenerated. You need to simply click the "Compile all" button in the notification and then the "Reset" button after the generation.

PathTemplate Requires Recompilation

Afterwards, you should see a notification about the asset upgrade to the latest version.

PathTemplate Was Updated

The intersection should then generate and you can click the "Reset" button.

Reset PathSplines

Make sure to save the modified Path actors.