In this update we focused on resolving various issues, limitations and performance bottlenecks reported by users.
Improvements
- We added a "Seed" property in Species that allows Species with identical Spacing generate distinct patterns.
- We removed the limitation that an asset cannot be used in multiple Asset Groups within one Species.
- We now use stable names for runtime-spawned instance components. This means that Errant Instance Interaction plugin can now identify such runtime-spawned components and allow interacting with them. The video shows the player interacting with runtime-spawned bushes.
- We added a
SlopeWithFade
material function that allows fading out the transition between flat and sloped terrain in the Species/Sub-biome material masks.
- Errant Biomes primarily stores data for use in the Editor. However, when PCG integration is enabled, it must generate dedicated runtime-accessible data assets. To minimize their number, we now allow for granular control over which data Errant Biomes generates for PCG.
- We now automatically find parameters used inside material functions and Errant Biomes nodes and display them in UI, divided into sub-sections named after each Group.
- Errant Biomes example assets can now be filtered out in the mask outliner.
- The main Biome Mask can now be sampled in the game. It can be packaged into builds by clearing its Read-Only flag in Project Settings.
- We added a helper function
UBiomesMaskWorldSubsystem::SampleBiomeMaskAsync
for sampling the Biome Mask. - It's now possible to choose between bilinear filtering and nearest-point sampling when reading mask data.
- Runtime spawning now respects additional scalability settings:
grass.CullDistanceScale
foliage.CullDistanceScale
grass.DisableDynamicShadows
- We added a warning when using runtime-spawned Species with a post-processing Blueprint as post-processing is only available for offline-spawned Species currently.
- We made several improvments to the World Partition Builder:
- Added an option to generate a single volume.
- Added a workaround to prevent loading failures due to asset-registry not being fully initialized early in the commandlet run.
- Commandlets can now ignore files locked by another user and report such instances to a separate log.
We added validation to detect and warn about incorrectly serialized mask data as early as possible.
We added validation that warns when landscape components are smaller than "Max Species Radius" set in "Base Settings" as such configurations are not supported.
Optimizations
Runtime Spawning now spawns and destroys instance components when needed, instead of trying to reuse them. This resulted in simpler implementation, reduced memory usage and improved performance.
Editor-mode now opens much faster in large projects with many masks and species as those assets are no longer loaded at startup. To benefit from those improvements species and masks assets need to be re-saved, so the impact of this optimization will likely grow over time.
When Errant Biomes begins generation, it needs to ensure that the world around the generated area is fully loaded. This was triggering World Partition to unload and reload certain areas unnecessarily, which took a long time in large projects. This problem is now fixed.
We improved performance of our internal Species/Sub-biome mask rendering and optimized access to the landscape height/normal data.
Fixes
- Species names not updating in the Debug widget after asset rename.
- Errant Biomes project settings not persisting.
- Editor-only shaders are excluded from game builds.
- Incorrect bounds on some World Partition actors.
- Runtime spawning freeze when non-generated instances were present.
- Crash when a material mask referenced a removed asset.
- Crash in World Partition subsystems caused by asset-registry calls from the Masks subsystem.
- Crash on empty species definitions.
- Crash when accessing a null mask at runtime.
- Crash during species serialization.
- Warning spam when a previously painted mask asset is deleted.
- Errant Biomes modifying
PCGPartitionGridActor
s outside the intended area. - Variable-shadowing compilation error on PS5.
IsIdle
in the Runtime Spawning subsystem never returning idle.- Repeated logging of identical runtime-spawn warnings.
- Inability to delete a species after compiling its material.
- World-loading crashes in World Partition on certain maps.
- Painting transactions no longer invalidate generation.
- Added
IsReadyForGeneration
guard inUBiomesGenerationWorldSubsystem::Generate
. - Unwanted save prompt for Errant Biomes paint settings.
- Debug-material warnings on D3D11.
Patches
1.9.1
- Fixed the landscape alignment not working.
1.9.2
- Added UE5.6 support
- Fixed instances getting added to incorrect spawners on big landscapes with certain location offsets