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
  • Voxel Sampler & Projection
  • Voxel Sampler
  • Voxel Projection
  • Voxel PCG Graphs
  • Querying Arbitrary Voxel Data

Was this helpful?

  1. Knowledgebase
  2. Foliage & PCG

Using PCG on Voxel Terrains

PreviousConfiguring PCGNextVoxel PCG Graphs

Last updated 3 months ago

Was this helpful?

Voxel Sampler & Projection

The Voxel Sampler and Voxel Projection node (can) produce a similar result, but they're doing (and often used for) very different things.

Voxel Sampler

When looking to scatter points on a voxel terrain, the Voxel Sampler node is usually the way to go. It is in most cases relatively fast compared to a lot of other operations you might be doing in an average PCG graph.

The sampler effectively meshes a chunk, with the cell size being the resolution. It spits out a point at each cell.

If you are using the Voxel Sampler, it's worth knowing that:

  • The amount of points initially generated (and therefore the cost) is determined by the Cell Size.

  • Points are then filtered out until the density matches your Points Per Square Meter (PPSM) setting.

This means that lowering the PPSM setting doesn't actually make the sampler cheaper - it's just there to tweak the visual result. If you want to keep your sampler as cheap as possible, set your PPSM to a high value (say 100, because you'll likely never want >100 points per square meter). From there, use the cell size to control the density of your points (lower cell size = more points).

It's theoretically possible to spawns points without the sampler, and instead spawn a grid of points manually and project them onto the terrain using the Voxel Projection node. The cost of the projection will likely be higher than the cost of just using the Voxel Sampler though, due to the large amount of steps needed to get the points to stick to the terrain.

It's very difficult to get a consistent point density on your terrain without using the Voxel Sampler node.

The only real alternative is to use a PCG node to reduce overlapping points, which is itself very expensive.

By default, the sampler rotates points to be aligned to the terrain's surface, and it writes material weights into the point attributes. It can optionally be configured from the details panel to query (and write into the point attributes) metadata

Voxel Projection

The projector takes input points, evaluates the distance field (the shape of the terrain) and its normal for each of those points, and moves each point by distance x gradient x speed (configurable in the details panel). It will continue doing that repeatedly for each point, until each point a) reaches the maximum step count, or b) its distance is less than the 'tolerance' in the details panel.

This means the projection node is sampling the DF many times for every point. As such, the cost of this node scales based on the amount of steps. The farther your points originally were from the surface (and the less precise your distance field), the more likely you'll need a lot of steps (= DF samples) per point to get them to actually sit on the surface.

The 'stepping' operation done by the Voxel Projection node is called Raymarching.

A node that does this same thing also exists in Voxel PCG Graphs, where it's called Raymarch Layer Distance Field.

By default, the projection node does not write modify any point attributes other than position. It can optionally query (and write into the point attributes) rotation, material weights and metadata values. This can be configured in the details panel.

Voxel PCG Graphs

Querying Arbitrary Voxel Data

Sometimes you may want to query data from the voxel terrain on points that aren't (and shouldn't be) spawned on or projected onto the voxel terrain. For this, the Voxel Query node can be used.

This node can query any voxel layer, and will write the information from it into point attributes (optionally including materials and metadata). It will not affect any of the points' other attributes.

VPCGs can be useful for simplifying PCG-related workflows, but they can also provide substantial speed-ups for math-heavy graphs. Read more about them .

here
A large world with PCG-based procedural foliage, masked by a voxel stamp (writing metadata which is then used to filter in PCG).
A Voxel Sampler, and its points being filtered based on material weights from an attribute.