Skip to content

Change Log - 2.0p7

Changes made for this release.

INFO

This release targets Unreal Engine 5.5 and 5.6 Preview 1.

New sculpting tools, function both in-editor and at runtime - now also capable of painting materials and metadata!

This release brings a wide range of features and improvements, including:

  • A largely final version of the sculpting system, both in-editor and at runtime
  • The addition of Volume Spline Graphs, as well as substantial performance improvements to Height Spline Graphs
  • Support for complex auto-materials (Smart Surface Types) using Voxel Graphs
  • Across-the-board performance improvements

Migration Notes

DANGER

This release has many migrations, as well as changed stamp behavior.

They're long, but we really recommend reading all of the migration notes for this release.

Asset & Graph Migrations

WARNING

This release brings a lot of new asset types and migrations for existing assets.

Please use the Upgrade Voxel Assets helper to automatically migrate (and clean up) these assets.

Image

DANGER

If you have any Sculpt Stamps in your project which need to be migrated, open the levels containing them before running Upgrade Voxel Assets.

  • Stamps and Voxel Graphs now use Surface Type assets instead of Material assets. Surface Type assets will be automatically created (at the root of the content folder) for any materials being used. All voxel material-related assets now use Surface naming to prevent confusion with stock materials.
    • (V)PCG graphs looking for material attributes by name will need to be updated to match the names of the new assets.
    • Layered Materials have been removed. Use a Smart Surface Type with a Surface Type Graph instead.
    • Material blending logic has been updated to support more materials per position - materials may looks slightly different due to this change.
  • Voxelized Mesh Stamps now use a Voxel Static Mesh asset instead of a Static Mesh asset pointing to a Voxelized Mesh asset. These assets will be automatically created. Previously created Voxelized Mesh assets are no longer used and can be deleted. Settings from these old assets will not be automatically migrated.
    • CreateVoxelizedMeshDistanceField has been removed. Use Sample Volume Stamp instead.
  • MakeSphereDistanceField and MakeBoxDistanceField have been removed. Use the nodes in the Shape category instead.
    Image
  • GetClosestHeightSplinePoint has been replaced with GetSplinePoint.
  • The various Get Previous ... nodes have been replaced with Sample Previous Height/Volume Stamps.
  • IsValid has been replaced by IsNaN and ReplaceNaN.
  • Query with Position has been renamed to Override Downstream Position.
  • VoxelGraphHeightmap assets and its related nodes have been removed. This includes the CreateCubemapPlanetDistanceField node.
    • The replacement for most related usecases is the VoxelHeightmap asset type. These can be sampled in graphs using the Sample Stamp nodes.
  • Previous Blueprint API around sculpting has been deprecated and replaced. This will not be automatically migrated.
    • Sculpt stamps have been removed. Use Voxel Height/Volume Sculpt Actors instead.
  • Smooth Blends for MegaMaterials have been removed. This has been replaced by a dither-based blend. The smoothness of each material is controlled using the Blend Smoothness value inside Voxel Surface Type assets.

Changes to Stamp Behavior

Substantial changes have been made to the way the distance field behaves, and the way stamps write their data into it.

TIP

In-depth information on how the new system works (with images) can be found here:

Some of the big changes are around stamp bounds:

  • Height stamps no longer have infinite vertical bounds. They instead have a height range. The stamp will be clamped (flattened) if it has values outside of this range. This range is automatically determined for heightmap stamps, but needs to be manually configured for Height Graphs. Migrated graphs will have a height range of -1M to 1M assigned. Consider tweaking this for better performance (or in the case of very tall height graphs, if you see flat areas).
  • Every stamp now has a Bounds Extension property. Use this to compensate for smoothness. On height stamps, this only grows the vertical bounds.

The other big change is about empty space around terrains, and how stamps interact with that empty space:

Image
Height stamps now have a 'band' of valid distance around their surface. This visualizer shows yellow outside the terrain surface, blue inside, and pink for 'Voids'.

Previously, if you had a heightmap as base terrain, it would apply for every vertical position, so there would be a valid distance for every position above and below it. This is no longer the case - the heightmap will now only have a valid distance up to a certain distance away from its surface. Positions without a valid distance are called Voids.

INFO

Because Void positions don't have a valid distance, we don't know if they are inside the terrain's surface or outside (air).

Because height-based 'base' terrains no longer prevent Void positions like they used to, Voids are now much more common.

  • All stamps now have an Apply on Void setting. When this is true (which is the default), stamps will apply themselves in spots with no previous stamps (and therefore no 'valid' distance).
    • If you see artifacts such as 'caves' appearing in the sky, disabling this property on those stamps will fix it.
    • Previously, only additive stamps would apply on voids. To create caves, you would have to first create an additive base terrain. This is no longer the case.
Image
Artifact in the canyon of this height spline due to overlapping segment bounds.

All of the above also applies to spline stamps. One additional issue with spline bounds remains:

  • If you're using a height spline which runs parallel to itself, and has rapidly changing values, you may see artifacts.
    • This will look like the artifacts you see when stamp bounds are too small.
    • This can be 'fixed' by increasing the height range.
    • We hope to fix this issue in a future release.

General Improvements & Performance

With that long list of migrations out of the way, let's move on to the more exciting things!

  • Thanks to the changes in stamp behavior outlined in the migration notes, generation performance - especially for height stamps - has been substantially improved.
  • Added support for Hardware Raytracing.
  • Dramatically improved Distance Field generation speed.
  • A warning is now shown in the Voxel World's details panel when Lumen is enabled but not supported.
  • Added a Quality Exponent setting, making it possible to control distant terrain quality separately from nearby terrain quality.
  • Generally improved Voxel World update latency.
  • Hitching when spawning stamps has been substantially improved; the stamp tree build is now done async.
  • A host of new debugging commands have been added.
    • A new Voxel Commands section has been added to the Voxel toolbar menu.
  • Selecting a stamp in a level instance now selects the level instance.
  • Added support for the stock Foliage tools by generating static meshes in-editor.
  • Fixed various crashes.
  • Clicking the same spot multiple times now cycles actor selection through stamps affecting that spot.
  • Fixed various issues with Android rendering.
    • Some issues remain.
  • Improved the voxel callstack UI.
  • Voxel Assets now implement GetPrimaryAssetID.
  • Fast math has been disabled. This fixes precision errors between Windows clients and Linux servers.
  • Added more pop-ups to help ‘auto-fill’ voxel world settings.
    • Prompt to create a Voxel World if there isn’t one.
    • Prompt to assign or create a MegaMaterial if none is assigned.
    • Prompt to add materials used on the terrain to the MegaMaterial.
  • Added and improved a range of tooltips.
  • The MegaMaterialCache asset now autosaves without being tracked as such by the editor. This behavior can be disabled.

Sculpting

  • Refactored sculpting to be significantly more performant.
  • Added support for material and metadata painting.
  • Added a wider range of height sculpting tools.
  • Added Blueprint API so sculpting tools can be used at runtime.
  • Height sculpts now support different blend modes.
  • Fixed alpha brush glitches.

Stamps

  • Height stamps can now be rotated on the XY axes.
    • Slopes exceeding 90 degrees will be clamped.
  • Voxel Static Meshes can now write material data from the source mesh into metadata.
    • Voxel Static Meshes now support bicubic mesh sampling. This gives higher-quality results when they are upscaled.
  • Generation speed for splines is now >100x faster.
  • When spline points are adjusted, only the chunks overlapping the adjusted spline segments will update.
    • Previously, if any spline point was adjusted, the entire spline would regenerated every overlapping chunk.
  • Support for Volume Graph Splines has been added.
  • All spline-related nodes in Voxel Graphs have been refactored.
    • Getters like GetTransformAlongSpline now properly respect tangents.
    • Most spline-related nodes now use keys (can be left empty to use the current position). This makes it easier to get spline data from specific points, mostly for advanced usecases.
  • Spline Parameters can now have default values.
  • Priority on newly placed stamps is now automatically set to be the highest in the level.
  • A warning icon is now shown when properties (like blend mode) are overriden by the assigned graph.
  • Improved Shape stamp UX.
    • Shape stamps now use a visual picker, and all properties are inline instead of collapsed in a category.
  • Fixed bounds for stamps using the Intersect blend mode.

Materials & Surface Types

Image
A large amount of surface types being blended in one area using a single smart surface type.

INFO

Note: Voxel Materials (materials applied to the voxel terrain) are now called Surface Types. This was changed to prevent confusion with stock Unreal Engine materials.

  • Up to 8 surface types can now be blended per position, up from 3 in previous releases.
  • Added Smart Surface Types and Surface Type Graphs, making it possible to easily build 'auto-materials' for voxel terrains.
    • The recommended workflow is to have a single Surface Type (and Material Instance) for a given texture set (i.e. gravel, mud, rock, etc.). Those can then be easily and performantly blended by the voxel terrain. Set this up using a Surface Type Graph; a Voxel Graph specifically used to blend different materials.
  • Blending logic has been improved to be (much) more consistent when multiple layers are overlapping with low weights. Displacement will not appear 'flattened' in these areas anymore.
  • Added support for Displacement Fade for generated materials (controlled from the MegaMaterial).
  • Added support for rendering into RVTs from the Voxel World.
  • Added GetVoxelRandom node for material graphs. This returns a random value for each unique material, making it easy to ensure that i.e. texture size is never the same for two materials. This is useful to make sure heights are never exactly the same for two materials, as this leads to a sharp edge when blending them.
  • Generated materials now support having multiple shading models.
  • Generated materials now support anisotropy.
  • Inline values from the default fields on material outputs now properly transfer to generated materials.
  • The Smooth Blends solution from p6 has been removed.
  • A new solution for Smooth Blends has been added, with full support for standard height blending.
    • This uses the standard one-material-per-pixel shading pipeline, but dithers the material selection. This relies on TAA to resolve the dither effect.
      • This solution relies on TAA/TSR to resolve the dither effect. Without this, a 'speckle' pattern will be visible.
    • Each Voxel Surface Type asset has a Blend Smoothness value, controlling how strongly that material is dithered in blend areas.
      • If a surface type has a blend smoothness of 0, it will always have hard edges, regardless of the blend smoothness of the other surface types it's blending with.
    • To mimic the old 'pure' Smooth Blends without height blending, feed a constant value of 0.5 into your material's displacement pin.
      • Make sure to enable the Dither Noise Texture property in the MegaMaterial - without this, the smooth blends will appear 'banded'.

Voxel Graphs

  • Added (back) new basic shape nodes, such as MakeCube - each with accompanying node for generating bounds, i.e. MakeCubeBounds.
  • Textures can now be sampled in Voxel Graphs using Voxel Texture assets.
    • This can also be used to write arbitrary data from gameplay code into a texture for easy access in graphs.
  • Select nodes now branch their input pins - this means they now only run one of the inputs per position. This can be a substantial performance improvements for biome workflows.
    • We hope to add similar behavior for Lerp nodes in the future. Until then, the Lerp node can be manually put behind a Select sequence to not be run if it's not needed.
  • Any previous stamp data can now be queried in any 'pipeline'.
    • For example, metadata and materials can be queried in distance networks, distance can be queried in metadata networks, etc..
  • Voxel Graphs now have a 3D preview.
  • Fixed metadata pins being reset when a new metadata pin is added.
  • Added Normalized toggle to GetGradient.
  • Added GetGradient2D.
  • Nodes requiring a Position input now use GetPosition2D/3D as default.
  • Added SampleHeight/VolumeStampParameter nodes. These function like the usual SampleStamp nodes, but take a stamp parameter as input pin instead of relying on the details-panel.

(V)PCG

  • When returning Smart Surface Types, PCG nodes now output the resolved Surface Types instead.
  • Fixed the Generate2DPoints VPCG node.
  • Fixed VPCG hitching when missing attribute errors are thrown.
  • Fixed foliage mismatches between Windows and Linux.