VF-BlenderPointArray
VF-BlenderPointArray copied to clipboard
Generate point arrays for Geometry Nodes using cubic grid, golden angle (Fermat's spiral), poisson disc sampling, or import points from data sources in CSV, NPY, and VF (Unity 3D volume field) formats...
VF Point Array
Generate point arrays for Geometry Nodes using cubic grid, golden angle (Fermat's spiral), poisson disc sampling, or import points from data sources in CSV, NPY, and VF (Unity 3D volume field) formats.

Installation
- Download VF_pointArray.py
- Open Blender Preferences and navigate to the "Add-ons" tab
- Install and enable the add-on
- It will show up in the 3D view
VF Toolstab - Select the desired options and a mesh object to replace
- Data import options can create new objects based on file name or replace an existing item
Settings
Array Type options:
Cubic Gridcreates a cubic array of points- Can be used to create Volume Field (.vf) files for Unity 3D particle effects when paired with Geometry Nodes and the VF Delivery add-on
Golden Angleuses the golden angle to create a spiral array of pointsPoisson Discgenerates random points within the specified volume while removing any that overlapPosition Import (CSV/NPY)imports internal or external data sources in CSV or NPY format as sequential point positionsVolume Field (Unity 3D)imports external .vf formated 3D textures as a point array with named attributes

Download sample file: settings1-cubic.blend.zip
Cubic Grid options:
Countis the number of elements in each X, Y, Z dimension (the number of points that will be generated is displayed in the warning box)Radiuscontrols both thescalenamed attribute and the total scale of the arrayRandom Radiusenables minimum and maximum radius inputs, with the maximum radius used for controlling the cubic grid sizeRandom Rotationgenerates randomised values between -180° and +180° saved as radians in therotationnamed attributePolylinesequentially connects each vertex with a two-point polygon for conversion into curves or other use casesGroundedaligns the points so that the radius of the bottom points align with the ground (Z = 0)- The
Replace "Name"button dynamically updates to show which mesh will be replaced when clicked - The number of points that will be generated using the current settings are displayed in the UI
Cubic grid generation is the first step when creating volume fields for Unity 3D particle animation effects. To learn more, please refer to the VF Delivery documentation for creating and exporting volume fields.

Download sample file: settings2-golden.blend.zip
Golden Angle options:
Countdefines the total number of elements to createRadiuscontrols both thescalenamed attribute and the scale of the array based on spacing between each pointRandom Radiusenables minimum and maximum radius inputs, with the maximum radius used for controlling the point spacing and array scaleRandom Rotationgenerates randomised values between -180° and +180° saved as radians in therotationnamed attributePolylinesequentially connects each vertex with a two-point polygon for conversion into curves or other use casesFill Gapinserts an additional non-accurate point near the centre of the spiral to reduce the feeling of a gap in the mathematical array- The
Replace "Name"button dynamically updates to show which mesh will be replaced when clicked

Download sample file: settings3-poisson.blend.zip
Poisson Disc options:
Poisson sampling generates random points, testing each one to see if the point radius overlaps with any of the previously generated points. This can take a bit of time (without more advanced optimisation that's beyond the scope of this plugin), so options are provided for adjusting how many attempts should be made to find new random positions, helping cap the maximum amount of time spent searching for placement solutions.
Area Shapeselector:Boxis a simple cubic volumeCylinderimplements a radial cutoff aligned to the Z axisSphereimplements a spherical cutoffHullscatters points on the surface of a sphere
Dimensionscontrols the X, Y, Z scale of the chosen shape, allowing for volumes of any aspect ratioAlignmentdefines how the point radius interacts with the edge of the defined volume:Centeronly checks the center point, and allows the radius to fall outside of the volumeRadiusenforces strict volume containment, removing any points whose radius falls outside the volume
Radiussets the point scale for poisson sample testing and thescalenamed attribute available in Geometry NodesRandom Radiusenables minimum and maximum radius inputs to randomise the scale of each pointRandom Rotationgenerates randomised values between -180° and +180° saved as radians in therotationnamed attributePolylinesequentially connects each vertex with a two-point polygon for conversion into curves or other use cases- Because the points are generated randomly, the results are going to be...jumbled
Iteration Limits
Pointslimits the total number of points generated- If this is very low points may be loosely scattered, if it's much higher, the add-on will typically hit maximum failures or attempts first
Failureslimits the total number of point placement failures that are allowed in a row- This helps optimise the algorithm, cutting off processing well before the maximum attempts limit is hit in cases where placement is extremely difficult (space is mostly full already)
Attemptslimits the total number of attempts, which should help prevent systems from freezing indefinitely
Generation and Feedback
- The
Replace "Name"button dynamically updates to show which mesh will be replaced when clicked - After at least one generative attempt, the number of points previously created, consecutive fails, total attempts, and processing time will displayed in the UI to help guide further tuning of the settings
- If the total points created always reaches the maximum setting, the space isn't being efficiently filled and you can probably easily fit more points by raising the maximum failures and attempts
- If the consecutive fails always reach the maximum setting, the settings are probably too stringent; either the maximum point radius is too large or the max failures is too low
It can take some work to tune the maximum points, failures, and attempts to get the performance and results you're looking for. The processing time is also displayed to help guide decisions.

Download sample file: settings4-data.blend.zip
Data Import (CSV/NPY) options:
-
Sourcecan be set to eitherInternalorExternalExternalwill load CSV or NPY format files from any absolute disk location- If this is selected, a
Filelocation input will appear, allowing you to choose any file that ends with.csv(comma separated values) or.npy(NumPy binary data format) - Relative paths are not supported, and must be disabled in the open file window settings
- If this is selected, a
Internalwill load CSV format plain text from data-blocks present in the Blender project; these can be internal text blocks or external files that have been loaded inside Blender- If this is selected, a
Textdrop down will appear, listing all available text data-blocks in the blender project - A
.pyextension must be used for Blender to recognise external text files as valid options
- If this is selected, a
- Warning: no formatting validation is performed until the create or replace button is pressed and the data import is attempted. Though some limited data cleansing is included, there is nothing preventing you from selecting a Python plugin loaded as a text data-block, or choosing a .docx file renamed to .csv. Choosing inputs with poorly formatted or missing data will likely crash the process
-
Radiuscontrols thescalenamed attribute but affects nothing else (no data scaling or point overlap check is performed) -
Random Radiusenables minimum and maximum radius inputs for thescalenamed attribute -
Random Rotationgenerates randomised values between -180° and +180° saved as radians in therotationnamed attribute -
Polylinesequentially connects each vertex with a two-point polygon for conversion into curves or other use cases -
Targetswitches between two creation or replacement approachesSelectedwill replace the currently selected object (same behaviour as the other point array generators)Namewill create a new object or replace an existing one using the name of the data-block or input file
-
The
Create "Name"orReplace "Name"button dynamically updates to show which mesh will be created or replaced when clicked

Download sample file: settings5-volumefield.zip
Volume Field (Unity 3D) options:
The .vf (volume field) file format, a type of 3D texture used in Unity 3D, can include vector or float data. This plugin should import either type (storing imported data in field_vector or field_float attributes), but has only been tested with files containing vector data.
Filemust point to an external file in binary .vf formatRadiussets the spacing between points in the volumetric array and thescalenamed attributeRandom Radiusenables minimum and maximum radius inputs for thescalenamed attribute (the maximum scale will be used for spacing purposes)Random Rotationgenerates randomised values between -180° and +180° saved as radians in therotationnamed attribute- This will be ignored when importing volume fields with vector data
Polylinesequentially connects each vertex with a two-point polygon for conversion into curves or other use casesTargetswitches creation or replacement approachesSelectedwill replace the currently selected object (same behaviour as the other point array generators)Namewill create a new object or replace an existing one using the name of the input file
- The
Create "Name"orReplace "Name"button dynamically updates to show which mesh will be created or replaced when clicked
For instructions on how to build particle flow fields in Blender for use in Unity 3D, Unreal Engine, Godot, and other platforms, please refer to the VF Delivery add-on documentation for creating and exporting volume fields.
Usage (Blender 3.3+)
It's easier than ever to work solely within Geometry Nodes in Blender 3.3+, but the Instance On Points node does not automatically reference named variables for scale and rotation, so they must be connected manually.

- Create an object to hold the generated point data
- Create a new Geometry Nodes system
- Add an Instance on Points node
- Add an object to be instanced with a 1m radius
- This ensures the geometry being created is consistent with the values in the
scalenamed attribute
- This ensures the geometry being created is consistent with the values in the
- User either Named Attribute nodes or input fields to reference the desired point data (rotation, scale, and others are available, depending on the type of array and the settings used)
- Generate new arrays to your hearts content
Usage (Blender 2.93)
The generated data works pretty automatically in Blender 2.93, since the Point Instance node automatically references named variables for element scale and rotation.

Check out the example files below for specific setups.
Examples (Blender 2.93)
These demo files were created in Blender 2.93.x using named attribute nodes. The nodes in Blender 3.3.x may require setting up again, but the concepts are largely the same.

This example demonstrates use of the point_distance attribute, along with collection instancing.
demo-cubic.blend.zip


These files show a potential setup for rotating elements and animating them entirely in Geometry Nodes.
demo-golden.blend.zip
demo-golden-animated.blend.zip

This project illustrates the use of multiple arrays and the center-aligned poisson-disc sampling in a spherical volume.
demo-poisson.blend.zip