Voxel Plugin
2.0p-340
2.0p-340
  • Home
  • Getting Started
    • Installing Voxel Plugin
    • Installing Example Content
    • Migrating from 1.2
  • Knowledgebase
    • Using Graphs
      • Graph Preview
      • Buffers and Uniforms
    • Channels
    • Surfaces & Materials
      • Working with Surfaces
        • Distance Fields & Distance Checks
        • Applying Materials to a Surface
      • Material Definitions
        • Creating Materials from Scratch
        • Extending the Complex Material Sample
        • Technical Details
        • Detail Textures
    • Brushes
      • Voxelized Meshes
    • Foliage
    • Navmesh & Collision
    • Sculpt Volumes
    • Blueprints
      • Setting graph parameters
      • Querying voxel graphs
    • Graph Design
      • Why Landmass & MetaGraphs
      • Execution Flow & Query Data
      • Node Types
      • MetaGraph Macros
      • Adding Custom Nodes
    • Profiling & Debugging
      • Generation Performance
      • Memory Usage & Render Performance
      • Debugging plugin code
    • Platform Support
      • Targeting Mac & iOS
      • Targeting Android
  • Resources
    • Voxel Graph API
      • Exec Nodes
        • Edit Sculpt Surface
        • Execute
        • Merge Execs
        • Debug
          • Debug Delay
        • Set Sculpt Source Surface
        • Register To Channel
        • Generate Marching Cube Collision & Navmesh
        • Generate Marching Cube Surface
        • Create Marching Cube Preview Mesh
        • Write Volume Texture
        • Generate Point Collision
        • Render Mesh
      • Misc
        • Get Previous Output
        • Query with Gradient Step
        • Query with Position
        • Filter Buffer
        • Make Value
        • Is Valid
        • Get Collision Enabled
        • Get LOD
        • Get Point Chunk Bounds
        • Is Editor World
        • Is Game World
        • Is Hidden in Editor
        • Is Preview Scene
        • Get Position 2D
        • Get Position 3D
      • Sculpt
        • Get Sculpt Surface
      • Point
        • Make Chunked Points
        • Merge Points
        • Set Point Attribute
        • Get Point Attribute
        • Set Actor Property
        • Get Actor Property
        • Set Parent Point Attribute
        • Get Parent Point Attribute
        • Set Point Mesh
        • Get Point Mesh
        • Get Parent Point Mesh
        • Set Point Position
        • Get Point Position
        • Get Parent Point Position
        • Set Point Rotation
        • Get Point Rotation
        • Get Parent Point Rotation
        • Set Point Scale
        • Get Point Scale
        • Get Parent Point Scale
        • Set Point Normal
        • Get Point Normal
        • Get Parent Point Normal
        • Set Actor Class
        • Get Actor Class
        • Get Parent Actor Class
        • Set Point Custom Data
        • Get Point Custom Data
        • Get Parent Point Custom Data
        • Get Point Seed
        • Apply Translation
        • Apply Rotation
        • Apply Scale
        • Apply Point Storage
        • Generate Surface Points
        • Make Points
        • Get Points
        • Filter Points
        • Density Filter
        • Make Radial Point Spawner
        • Prune by Bounds
        • Prune by Distance
        • Raymarch Distance Field
        • Scatter Points
      • Material
        • Make Material
        • Make Float Detail Texture Parameter
        • Make Color Detail Texture Parameter
        • Make Material Detail Texture Parameter
        • Make Normal Detail Texture Parameter
        • Make Scalar Parameter
        • Make Vector Parameter
      • Math
        • Trig
          • Sin (Radians)
          • Sin (Degrees)
          • Cos (Radians)
          • Cos (Degrees)
          • Tan (Radians)
          • Tan (Degrees)
          • Asin (Radians)
          • Asin (Degrees)
          • Acos (Radians)
          • Acos (Degrees)
          • Atan (Radians)
          • Atan (Degrees)
          • Atan2 (Radians)
          • Atan2 (Degrees)
          • Get PI
          • Radians to Degrees
          • Degrees to Radians
        • Float
          • Bilinear Interpolation
          • Frac
          • Power
        • Boolean
          • NOT Boolean
          • NOR Boolean
          • XOR Boolean
          • AND Boolean
          • OR Boolean
          • NAND Boolean
        • Integer
          • Left Shift
          • Right Shift
          • Bitwise AND
          • Bitwise OR
          • Bitwise XOR
          • Bitwise NOT
        • Rotation
          • Make Quaternion
          • Break Quaternion
          • Make Rotation from Z
          • Combine Rotation
        • Operators
          • Equal
          • Nearly Equal
          • Not Equal
          • Less
          • Greater
          • Less Equal
          • Greater Equal
          • Ceil
          • Round
          • Floor
          • Add
          • Subtract
          • Multiply
          • Divide
          • % (Integer)
          • Min
          • Max
          • Abs
          • One Minus
          • Sign
        • Misc
          • Clamp
          • Mapped Range Value Clamped
          • Mapped Range Value Unclamped
          • Height Splitter
          • Interpolate
          • Lerp
          • Safe Lerp
          • Smooth Step
        • Seed
          • Mix Seeds
          • Make Seeds
        • Vector Operators
          • Cross Product
          • Dot Product
          • Normalize
          • Length
          • Length XY
          • Distance
          • Distance 2D
        • Conversions
          • To Double Vector (Double Linear Color)
          • To Double Vector 2D (Double Linear Color)
          • To Linear Color (Double Linear Color)
          • To Vector (Double Linear Color)
          • To Vector 2D (Double Linear Color)
          • To Double Linear Color (Double)
          • To Double Vector (Double)
          • To Double Vector 2D (Double)
          • To Float (Double)
          • To Double Linear Color (Double Vector 2D)
          • To Double Vector (Double Vector 2D)
          • To Linear Color (Double Vector 2D)
          • To Vector (Double Vector 2D)
          • To Vector 2D (Double Vector 2D)
          • To Double Linear Color (Double Vector)
          • To Double Vector 2D (Double Vector)
          • To Linear Color (Double Vector)
          • To Vector (Double Vector)
          • To Vector 2D (Double Vector)
          • To Double (Float)
          • To Linear Color (Float)
          • To Vector (Float)
          • To Vector 2D (Float)
          • To Double (Integer)
          • To Float (Integer)
          • To Int Point (Integer)
          • To Int Vector (Integer)
          • To Int Vector 4 (Integer)
          • To Seed (Integer)
          • To Double Linear Color (Int Point)
          • To Double Vector (Int Point)
          • To Double Vector 2D (Int Point)
          • To Int Vector (Int Point)
          • To Int Vector 4 (Int Point)
          • To Linear Color (Int Point)
          • To Vector (Int Point)
          • To Vector 2D (Int Point)
          • To Double Linear Color (Int Vector 4)
          • To Double Vector (Int Vector 4)
          • To Double Vector 2D (Int Vector 4)
          • To Int Point (Int Vector 4)
          • To Int Vector (Int Vector 4)
          • To Linear Color (Int Vector 4)
          • To Vector (Int Vector 4)
          • To Vector 2D (Int Vector 4)
          • To Double Linear Color (Int Vector)
          • To Double Vector (Int Vector)
          • To Double Vector 2D (Int Vector)
          • To Int Point (Int Vector)
          • To Int Vector 4 (Int Vector)
          • To Linear Color (Int Vector)
          • To Vector (Int Vector)
          • To Vector 2D (Int Vector)
          • To Double Linear Color (Linear Color)
          • To Double Vector (Linear Color)
          • To Double Vector 2D (Linear Color)
          • To Vector (Linear Color)
          • To Vector 2D (Linear Color)
          • To Integer (Seed)
          • To Double Linear Color (Vector 2D)
          • To Double Vector (Vector 2D)
          • To Double Vector 2D (Vector 2D)
          • To Linear Color (Vector 2D)
          • To Vector (Vector 2D)
          • To Double Linear Color (Vector)
          • To Double Vector (Vector)
          • To Double Vector 2D (Vector)
          • To Linear Color (Vector)
          • To Vector 2D (Vector)
        • Curve
          • Make Curve from Asset
          • Sample Curve
        • Color
          • Break Double Linear Color
          • Break Linear Color
          • Make Double Linear Color
          • Make Linear Color
        • Vector
          • Break Double Vector
          • Break Vector
          • Make Double Vector
          • Make Vector
        • Vector2D
          • Break Double Vector 2D
          • Break Vector 2D
          • Make Double Vector 2D
          • Make Vector 2D
        • Interval
          • Break Float Range
          • Break Integer Range
          • Make Float Range
          • Make Integer Range
        • Int Point
          • Break Int Point
          • Make Int Point
        • Int Vector
          • Break Int Vector
          • Make Int Vector
        • Int Vector 4
          • Break Int Vector 4
          • Make Int Vector 4
        • Transform
          • Break Transform
          • Inverse Transform Location
          • Make Transform
          • Transform Location
        • Distance
          • Smooth Max
          • Smooth Min
        • Box
          • Break Box
          • Extend Box
          • Make Box
          • Make Box from Radius
          • Make Infinite Box
          • Transform Box
      • Color
        • Distance to Color
      • Surface
        • Merge Surface
        • Get Merge Data
        • Get Surface Distance
        • Get Surface Material
        • Get Surface Attribute
        • Set Surface Material
        • Set Surface Attribute
        • Bind Attribute Detail Texture
        • Make Height Surface
        • Make Volumetric Surface
        • Make Sphere Surface
        • Make Box Surface
        • Invert Surface
        • Mask Surface
        • Inflate Surface
        • Displace Surface
        • Create Voxelized Mesh Surface
        • Blend Materials
        • Get Bounds Box
        • Get Surface Bounds
        • Make Bounds from Local Box
      • Channel Nodes
        • Query Channel
      • Noise
        • Advanced Noise 2D
        • Advanced Noise 3D
        • Perlin Noise 2D
        • Perlin Noise 3D
        • Cellular Noise 2D
        • Cellular Noise 3D
        • True Distance Cellular Noise 2D
      • Name
        • Append Names
      • Array
        • Length
        • Get
      • Gradient
        • Get Gradient
      • Chunk Spawner
        • Make Invoker Chunk Spawner
        • Make Screen Size Chunk Spawner
      • Random
        • Rand Float
        • Random Vector
        • Random Rotator
        • Random Select
        • Hash Position
        • Rand Unit Vector
        • Break Random Vector Settings
        • Make Random Vector Settings
      • Flow Control
        • Select
      • Actor
        • Get Transform
      • Network
        • Is Client
        • Is Dedicated Server
        • Is Listen Server
        • Is Server
        • Is Standalone
      • Heightmap
        • Get Heightmap Bounds
        • Make Cubemap Planet Surface
        • Sample Heightmap
      • Voxelized Mesh
        • Make Voxelized Mesh from Static Mesh
    • Glossary
    • Licensing
    • Release Notes
      • 2.0p-340 Release Notes
      • 2.0p-320 Release Notes
      • 2.0p-317 Release Notes
      • 2.0p-304 Release Notes
    • Roadmap
Powered by GitBook
On this page
  • New features
  • New material pipeline
  • New foliage pipeline
  • New sculpting pipeline
  • New surface pipeline
  • Graph preview and debug
  • Lumen support
  • Other features
  • Technical notes
  • Migration notes

Was this helpful?

  1. Resources
  2. Release Notes

2.0p-340 Release Notes

PreviousRelease NotesNext2.0p-320 Release Notes

Last updated 1 year ago

Was this helpful?

- Released October 2 2023

This release drops 5.1 support and adds 5.3 support.

New features

New material pipeline

The new voxel material pipeline is now ready, letting you assign materials per voxel. You can have up to 3 different materials per "texel" (ie, per detail texture pixel). Rendering supports blending up to 3 materials as well.

You can have a few thousands of materials per chunk. The only limitation is that voxel materials need to all inherit from the same material definition: each voxel material can have its own parameters (float/textures), but the material logic needs to be shared between all of them.

For more details see and the Complex Material .

New foliage pipeline

Collision

This pipeline supports invoker-based collision and has been stress tested in large projects: collision is only generated near invokers to reduce the load on the Chaos scene and avoid hitching. The new invoker system is designed to support up to 500 invokers to allow adding one to every gameplay object.

Interaction

You can use MakePointHandle to get a point handle from a hit result. This handle is globally unique, replicable, serializable into save games and can be sent through RPCs.

With this handle, you can edit point attributes at runtime: you can change a point scale, location, or even set more complex attributes and react to them in your graph.

New sculpting pipeline

The sculpting pipeline is now close to being ready. It can already be used to sculpt terrain features, both in the editor and at runtime. Sculpt data is stored per voxel actor, allowing you to sculpt individual brushes. Sculpt tools themselves are voxel graphs, making it easy to make custom tools.

Currently, the distance field generated by sculpt data is incorrect and will get worse the more your sculpt. This will result in various glitches, including uneven sculpt speed and holes in the terrain. Additionally, sampling sculpt data has not yet been optimized, and as such is fairly slow. Performance will be improved in the next release.

Sculpting at runtime currently requires spawning a new voxel actor with the sculpt tool graph attached to it, and then calling ApplySculpt. This will be improved down the road so that spawning an actor is not required.

New surface pipeline

The voxel distance type has been removed and replaced by surfaces. A Surface is a high level object representing a shape: it might be a single brush, or the union of many brushes.

In addition to distance, surfaces also store material data and can store arbitrary attributes. Typically, you could store a float attribute Roughness in your surface & use that in your material.

Practically speaking, not much has changed: you can use MakeHeightSurface, MakeVolumetricSurface, MakeSphereSurface or MakeBoxSurface to make a new surface. You can then merge these surfaces using SmoothUnion/SmoothIntersection. Merging surfaces will automatically blend their materials and attributes.

Graph preview and debug

You can use R on any node to preview its output in the preview window on the right of the graph editor. Read the Graph Preview article for information on how to use it.

Pressing D will debug the selected node. Debugging a node can do one of two things; if the node is used in the marching cube mesh query, its output will be debugged as color on the mesh itself. If the node being debugged is a point set for foliage, its output will be displayed instead of the final points. If the node being debugged is not used in a Render Mesh or Generate Marching Cube Surface node, debugging it will do nothing.

Lumen support

Lumen and distance field generation is now supported. You can enable it by enabling Generate Distance Field on the Generate Marching Cube Surface node.

This feature will use quite a bit of GPU memory. We recommend only enabling it on nearby chunks, typically using LOD <= 2 as condition.

There might still be issues with Lumen in packaged games - we will iron this out in the future.

Other features

  • Graphs have a new Compile All button to easily compile all voxel graphs in your project

    • Graphs with errors will automatically open

  • Graphs now support array types

  • Graphs now support recursive parameters

    • This is used in VS_Template to setup recursive clustering

  • Graphs have a new execution flow

    • All exec nodes (red nodes) now have an optional execution pin

    • Exec nodes in the main graph that have nothing connected to their exec pin will be executed automatically

    • You can use the Execute node to call exec nodes that are located in macros (these are not called by default)

    • You can use the Select node on execution wires to selectively enable/disable parts of your graphs

  • Graph instances have parameter tickboxes

    • You can now selectively override parameters in instances, with a tickbox similar to material instances

    • Existing parameters will be automatically enabled.

  • Voxel Actors can now be moved and fully support actor transforms

    • Brush transforms are detected relative to the actor they affect

    • Typically, if you have a planet with brushes attached to it, moving the planet will not trigger any refresh as the brush transforms relative to the planet will not change

  • Voxel Graphs now support thumbnails

    • You need to tick EnableThumbnails in your graph settings

    • Note that thumbnails might cause additional crashes

    • Use with the CreatePreviewMesh node

  • Detail texture improvements

    • Detail textures are now pooled into larger textures. This reduces render thread cost when voxel chunks are updated.

    • You can easily sample detail textures in materials using the new SampleVoxelFloatDetailTexture node

    • You can easily assign detail textures in graphs using SetSurfaceAttribute and BindFloatAttributeDetailTexture

  • Curve improvements

    • Curve sampling has been moved to ISPC, making sampling curves up to 10x faster

    • For best performance, keep the number of keys in your curve small

  • Stats improvements

    • To enable graph stats, use the Enable Stats button in graphs

    • Basic node stats: basic nodes will have their total run cost and per voxel/point cost displayed

    • Exec node stats: exec nodes will have their total runtime displayed. Typically, this is useful to easily spot which foliage instance is taking time to generate.

Technical notes

  • LLM memory tracking and Insights memory tracking are now fully supported

    • We did a full pass on memory allocations and fixed several leaks in the plugin

  • New task bypass option to make it easier to debug voxel task: pass -VoxelBypassTaskQueue or use voxel.BypassTaskQueue

  • VOXEL_ON_COMPLETE doesn't take a Thread anymore. Use VOXEL_ON_COMPLETE_GAMETHREAD to run on the game thread

  • SceneNode are now ExecNodes

  • You can use -checkVoxelNaNs or voxel.CheckNaNs to raise ensures whenever a NaN is generated

  • DEFINE_VOXEL_NODE is now DEFINE_VOXEL_NODE_COMPUTE

  • On runtime shutdown, the game thread will stall until all voxel tasks are completed or cancelled. This shouldn't create major hitches and will help having cleaner logic in subsystems.

  • The move to Channel Registry assets means we need to wait for them to be loaded before creating any voxel runtime. See FVoxelRuntime::CanBeCreated

  • Dense/morton-order position queries are now gone as using them to computed derivatives proved inaccurate

  • FVoxelPointId are only unique within a single foliage chunk. FVoxelPointHandle is globally unique. Serialization might fail if the graph that spawned the points are not loaded. Serialization requires voxel actors to have stable names.

  • You can now use the ConstantPin tag in exec node pins. This will compute the pin value before the exec node runtime is created and will recreate the runtime on value change. Use GetConstantPin(Node.PinName) to get the pin value in the exec runtime.

    • This replaces DECLARE_VOXEL_PIN_VALUES which is now removed

  • Any allocation done inside a VOXEL_FUNCTION_COUNTER will have the voxel LLM tag

  • The rotator pin type has been removed and Quaternion pins now break into euler angles instead

  • You can now use the voxel.get and voxel.set console commands to easily set voxel parameters at runtime

  • All voxel singletons now inherit from FVoxelSingleton and are destroyed on shutdown

    • This helps with memory leak detection as we can now ensure that all allocations made through the voxel allocator are freed on shutdown

    • This might cause crashes if you try to access any voxel singleton after the voxel module is unloaded (typically through an async task)

  • FVoxelTicker is now manually registering instances and they are all ticked together in FVoxelTickerManager::Tick

  • This release includes multiple bug fixes for running Unreal on a Linux system with Vulkan

  • VOXEL_CONST_CAST is now ConstCast

  • voxel.StartInsights and voxel.StopInsights can be used to easily start/stop an insights capture with the right settings.

  • To quickly hide a point, use SetPointVisibility. This will bypass the attributes and hide the point/disable its collision with at most a one frame delay.

  • When attributes are changed, new foliage instances will be detected and rendered through an UInstancedStaticMeshComponent to not trigger a full rebuild of the UHierarchicalInstancedMeshComponent tree. Instances will be removed by setting their scale to 0. If too many instances are changed at once, a full rebuild is triggered.

  • Recursive graph parameters

    • You can now have foliage recursively call on itself

    • This is useful for clustering

    • Detail panels are generated on-demand

  • Detail textures pools grow on-demand and never shrink. This might result in high memory usage. Use stat voxelmemory to see detail texture memory usage.

Migration notes

  • Array support in graphs

    • You can now use arrays in voxel graphs

    • This is currently used by the Random Select node

  • You can now use the Compile All button in graphs to easily see graphs with errors

  • Exposed Data nodes are gone - please use Register to Channel/Query Channel instead

  • Voxel Scene, Voxel Brush and Voxel Foliage graphs are now all Voxel Graphs

    • They will be automatically migrated

    • Voxel Meta Actor and Voxel Brush Actor are now Voxel Actor

  • The Distance pin type has been removed and is replaced by Surfaces

    • Surfaces are a high-level way of defining 3D shapes

    • Make Height Distance is now Make Height Surface

    • To create a surface from a SDF, use Create Volumetric Surface

  • Voxel Channel are now project settings and can also be defined in Channel Registry assets. Existing channels and their references will be automatically migrated to the new system.

  • Density Canvases are gone and replaced by sculpt surfaces

  • Foliage nodes are broken and will need to be migrated to the new system

  • Voxelized Mesh Assets will have their VoxelSize reset to 20cm

    • This is due to the removal of the project settings BaseVoxelSize

  • Physics Scene are removed, you can now directly use the Generate Marching Cube Collision and Navmesh node

  • The Graph property of Voxel Components is now private. You'll need to use the Set Graph function

  • ConstructBrush/UpdateBrush/DestroyBrush are now CreateRuntime/DestroyRuntime. UpdateBrush doesn't need to be called anymore when moving a voxel brush.

  • Local Variables must always have a declaration now. Existing local variables without a declaration will have one added on load at the center of the graph.

  • The Voxel/MaterialFunctions content folder has been entirely removed. If you are missing material functions, copy them over from a previous voxel release.

  • Perlin noise has been slightly offset to avoid glitches when querying at integer locations. This might affect existing maps using perlin noise.

    • GetPerlin2D: offset is (0.04902460144, 0.02112610644)

    • GetPerlin3D: offset is (0.04902460144, 0.02112610644,0.06403176963)

Foliage has been refactored into a point-based spawning system, following design patterns similar to Unreal's PCG. Existing foliage graphs will be broken, you will need to manually migrate to the new system. See and the LandmassFoliage .

To try out some sculpt tools, install the Sculpting Tools .

See for more details.

See

Foliage
example
example
Working with Surfaces
Working with Surfaces
https://github.com/VoxelPlugin/VoxelPlugin/tree/2.0p-340.0
Material Definitions
example
Quickly tuning some tree slope settings using the new inline curves. Foliage is using the same ISPC backend as regular plugin compute, making is extremely fast.
Debugging a node using D
Debugging foliage slope filtering, checking how foliage looks before and after filtering by slope
The Voxel Material Definition is where you can declare your parameters
You can override these parameters in Voxel Material Definition Instances
You can access the Material Definition parameters directly in your material
You can set materials directly in your graph. They're automatically blended by Smooth Union.
Points are generated directly from a Voxel Surface
Setting HasBerries to false on a point if IsHarvestable is true
Rendering a different mesh if HasBerries is true. RenderMesh will automatically update when SetPointAttribute is called in blueprints. ApplyPointStorage applies all the SetPointAttributes.
The new Sculpt Mode. Make sure to set the tool graph, and to set the target actor to a graph supporting sculpting like VS_LandmassBrushes.
Basic example of how to apply sculpt data. Voxel Size will be the sculpt storage voxel size. This does not have to match the terrain resolution.
Example of a Sculpt Graph. This one subtracts a sphere from the sculpted surface.
Making a new height surface, setting the Roughness attribute on it and binding a detail texture to it
The detail texture can then easily be sampled in a material graph
Previewing a node using R
In the ComplexMaterial example, you can see the green grass reflecting on the rocks at the top