← All ideas
  • Published 21 Oct 2024

[Geometry Nodes] Voronoi Node for Point Clouds, Meshes and Curves

EDIT: Built binaries are here

Node will take the points from the domain of selection named as "Sites", whether it be point cloud or mesh or curves. For the implementation of voronoi algorithm an external library is used, it is voro++ it is quite compact.

voro++ offers many different features, among these the following are supported through the node:

  • Periodic X, Y, Z sites
  • Using a Bravais Lattice to introduce advanced periodicity and define unit domain
  • Using cartesian min and max vector to define unit domain
  • Enabling/disabling boundary facets
  • Grouping cells with "Group ID" field input for removing facets between the sites of the same group, default ID is the index of the input point, which makes every evaluated point in the input separate
  • Grouping cells with "Group By Edge" option to remove the facets between connected components("only available for mesh input")
  • Outputting the cell centers per cell, this can be useful for calculating rotation centers or instance centers Outputting the cell ID per cell, this is useful for producing disconnected cell after the voronoi compuation

Here is the proposed node interface for two main modes ("BOUNDS", "BRAVAIS"):

image.png image1.png

From these features the Voronoi decomposition is composed, the output is a mesh with disconnected and duplicated faces/edges/vertices. To get disconnected cells one can use the Cell ID output to split to instances and merge the vertices and edges that belongs to a single cell to get a connected component for a single cell:

image2.png

Here is the most basic usage of this node:

image3.png

Cell Centers output then can be used for scaling each of these cells to give a space between the cells:

image4.png

If the individual cells are not of interest then the duplicates can be merged directly to construct a nonmanifold mesh. This allows the use of the voronoi mesh with lesser number of vertices/edges/faces.

The grouping by and ID field is useful for fusing some of the cells together, grouping the input sites by the mesh island is useful for treating each disconnected components as as single site.

image5.png

Grouping by edge, i.e. the connectivity information, is useful for constructing a surfaces from a single component: image image6.png

100%

Development Status: Open

Upvote 9 Downvote 0
tolgatalhayldz
21 Oct 2024

1 Comment