Voxel Plugin
2.0p4
2.0p4
  • Home
  • Getting Started
    • Installing Voxel Plugin
    • Working with Voxel Plugin
      • First Steps with Voxel Worlds
    • Installing Example Content
    • Migrating from Voxel Plugin Legacy
  • Knowledgebase
    • Working with Stamps
      • Layers & Priority
      • Blend Modes
      • Instanced Stamps
    • Using the Graph Editor
      • Graph Preview
      • Functions & Function Libraries
    • Foliage & PCG
      • Configuring PCG
      • Using PCG on Voxel Terrains
      • Voxel PCG Graphs
    • Materials & Metadata
      • Authoring Materials
        • Smooth (Alpha) Blends
      • Working with Metadata
    • Gameplay Systems
      • Blueprint API
        • Spawning & Configuring Stamps
        • Querying Voxel Data
        • Writing Voxel Data to Render Targets
      • Collision, Navmesh & Invokers
      • Multiplayer Support
    • Technical Information
      • Adding Custom Nodes using C++
      • Buffers and Uniforms
      • Profiling & Debugging
        • Compiling From Source
        • Generation Performance
        • Memory Usage & Render Performance
        • Debugging plugin code
      • Platform Support
        • Targeting Mac & iOS
        • Targeting Android
  • Resources
    • Change Log
    • Voxel Graph API
      • Noise
        • Advanced Noise 2D
        • Advanced Noise 3D
        • Domain Warp 2D
        • Domain Warp 3D
        • Perlin Noise 2D
        • Perlin Noise 3D
        • Cellular Noise 2D
        • Cellular Noise 3D
        • True Distance Cellular Noise 2D
        • True Distance Cellular Noise 3D
        • Simplex Noise 2D
        • Simplex Noise 3D
        • Value Noise 2D
        • Value Noise 3D
      • Array
        • Length
        • Get
        • Make Array
        • Add to Array
        • Append Array
      • Math
        • Boolean
          • AND Boolean
          • OR Boolean
          • NAND Boolean
          • NOT Boolean
          • NOR Boolean
          • XOR Boolean
        • 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
          • Interpolate
          • Lerp
          • Smooth Step
          • Height Splitter
        • 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
        • Integer
          • Left Shift
          • Right Shift
          • Bitwise AND
          • Bitwise OR
          • Bitwise XOR
          • Bitwise NOT
        • Rotation
          • Make Quaternion
          • Break Quaternion
          • Make Rotation from Z
          • Combine Rotation
          • Get Forward Vector
          • Get Right Vector
          • Get Up Vector
          • Rotate Vector
          • Unrotate Vector
        • 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)
        • Box
          • Break Box
          • Break Box 2D
          • Extend Box
          • Extend Box 2D
          • Is Box 2D Valid
          • Is Box Valid
          • Make Box
          • Make Box 2D
          • Make Box 2D From Radius
          • Make Box from Radius
          • Make Infinite Box
          • Transform Box
        • 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
          • Combine Transform
          • Inverse Transform Location
          • Make Transform
          • Transform Location
        • Distance
          • Smooth Intersection
          • Smooth Max
          • Smooth Min
          • Smooth Subtraction
          • Smooth Union
      • Color
        • Distance to Color
      • Name
        • Append Names
      • Point
        • Generate 2D Points
        • Make Points
        • Make Radial Point Spawner
        • Merge Points
        • Prune by Bounds
        • Prune by Distance
        • Scatter Points
        • Set Point Attribute
        • Get Point Attribute
        • 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 Point Custom Data
        • Get Point Custom Data
        • Get Parent Point Custom Data
        • Get Point Seed
        • Set Point Density
        • Get Point Density
        • Set Point Bounds Min
        • Get Point Bounds Min
        • Set Point Bounds Max
        • Get Point Bounds Max
        • Set Point Color
        • Get Point Color
        • Set Point Steepness
        • Get Point Steepness
        • Apply Translation
        • Apply Rotation
        • Apply Scale
        • Get Points
        • Filter Points
        • Density Filter
      • PCG
        • Get Input Points
      • Stamp
        • Get Previous Distance
        • Get Previous Height
      • Misc
        • Make Value
        • Raise Error
        • Is Valid
        • Query with Position
        • Filter Buffer
        • Get Collision Enabled
        • Get LOD
        • Is Editor World
        • Is Game World
        • Is Hidden in Editor
        • Is Preview Scene
        • Get Height Blend Mode
        • Get Height Smoothness
        • Is Height Override Blend Mode
        • Get Position 2D
        • Get Position 3D
        • Get Volume Blend Mode
        • Get Volume Smoothness
        • Is Volume Override Blend Mode
      • Biome
        • Query Biomes: null
      • Random
        • Random Select
        • Rand Float
        • Random Vector
        • Random Rotator
        • Hash Position
        • Rand Unit Vector
        • Break Random Vector Settings
        • Make Random Vector Settings
      • Flow Control
        • Select
      • Actor
        • Get Local to Query
        • Get Local to World
        • Get Query to World
      • Network
        • Is Client
        • Is Dedicated Server
        • Is Listen Server
        • Is Server
        • Is Standalone
      • Heightmap
        • Create Cubemap Planet Distance Field
        • Get Heightmap Bounds
        • Sample Heightmap
      • Distance Field
        • Create Box Distance Field
        • Create Sphere Distance Field
      • Material
        • Blend Materials
      • Voxelized Mesh
        • Create Voxelized Mesh Distance Field
        • Make Voxelized Mesh from Static Mesh
    • Glossary
    • Licensing
    • Roadmap
Powered by GitBook
On this page
  • 1. Building performant graphs
  • 1.1 Node settings
  • 2. Integrated stats
  • 2.1 Enabling stats
  • 2.2 Interpreting stats
  • 3. Deep profiling using Insights

Was this helpful?

  1. Knowledgebase
  2. Technical Information
  3. Profiling & Debugging

Generation Performance

How to use graph stats, and what they do and do not show.

In order to allow for easy profiling of generation performance, the graph system allows for the recording of generation stats.

1. Building performant graphs

There are some general considerations when it comes to building graphs that function quickly.

1.1 Node settings

Many of the more complex nodes within the plugin come have a variety of settings that will affect performance. Using these properly will lead to more performance for often similar results. An example of this would be the octave count on the Advanced Noise node. Noise nodes with lower octave counts will generate faster.

1.1.1 Stamp bounds

Stamps only affect the terrain inside their bounds. Using bounds that are as small as possible will allow graphs to be skipped when they aren't relevant. Bounds are increased by the smoothness of the stamp, and in the case of graph-based stamps, whatever is plugged into the bounds pin in the graph.

2. Integrated stats

2.1 Enabling stats

If the Enable Stats toggle in the top-left is enabled (showing blue, instead grey like when disabled), supported (not all) nodes will start tracking their execution times.

When tracking stats is enabled, world generation may be slower.

2.2 Interpreting stats

Each node will show a yellow banner underneath, showing how often the node was run, how long a single run took on average, and how much time has been spent on the node in total. These values do not reset until stats are disabled and re-enabled. When re-generating the world, the stats will simply continue counting upwards without resetting their state.

Because world generation may take longer when stats are enbaled, the times reported are not always representative of the true time generation takes. The stats do give a concrete idea of how long one node takes compared to another node.

There is not currently any way to see the total time a graph has taken to generate, or to see how an inclusive time, i.e. how long a node plus its inputs took to run.

3. Deep profiling using Insights

While the above stats can be useful for quickly getting a feel of where a graph is spending its time, the system doesn't provide a complete picture of where all costs are going.

For deeper profiling, Unreal Insights is the most effective tool. Voxel Plugin generation tasks are fully visible to Insights, as long as the Voxel trace channel is enabled. Insights can be manually configured, or the console command voxel.StartInsights can be used to start a trace. An Insights window will be opened, and the active trace will be marked as Live. The trace can be ended using voxel.StopInsights.

Generation tasks are run on separate threads. To keep profiling straight-forward, we recommend using two threads for generation. Using more threads will make it harder to see where time is being spent. Using a single thread can create unrepresentative performance data as it may hide memory bottlenecks.

If there is noticeable hitching in the framerate during world generation, this will not be coming directly from the voxel threads, but instead will have its source in the render or game threads. If those don't show show anything clearly responsible for the hitches, it may be caused by a lack of RAM.

PreviousCompiling From SourceNextMemory Usage & Render Performance

Was this helpful?

A graph with stats enabled, showing execution times per node. The total times are not always accurate, but this does show that the cost of multiplying is way lower than the cost of generating 2D noise.