# How to use random spheres inside a cube with Geometry Nodes?

I have created a random distribution of spheres inside a cube with Geometry Nodes, as shown in the image below. My problem is that I don't know how to specify the number of spheres with their radius inside the cube, without them overlapping each other and the walls of the cube.

How can I set these parameters (number and radius of the spheres) so that they do not overlap? Result:  Changing quality (higher is slower): Geometry Nodes:  Since the min distance problem can be solved by just plugging the sphere diameter in the Distance Min input from the Distribute Points on Faces node, what we need to do is just generate planes that are away from the cube surface by a value equal to the sphere's radius. We also check if any of the cube's dimensions is smaller than the sphere's diameter. If so, we don't output any sphere. # Explanation

The idea is to use the node Distribute Points on Faces to generate points in a cube volume, the reason for using this node is that it has an option for minimum distance when in Poisson-disk mode (I believe it does that by generating the points and then deleting the invalid ones), which we can use to keep spheres from intersecting.

Since the node Distribute Points on Faces only distributes on faces, we can simulate a volume with many layers of planes inside the volume. With a bigger layer count, more possible positions are available to points, and thus points tend to be more closer to each other, but always obeying the minimum distance.

to eliminate the need to check and delete spheres intersecting with the bounding cube, the layers can be created with edges far from the cube bounds by the desired radius, that way spheres will at most touch the bounding cube. ## Detailed Steps

First a vertical line is created centered to the bounding cube, it's length is $$w - 2r$$, where $$w$$ is the bounding cube's size, and $$r$$ is the desired radius for the spheres. Then, planes with dimensions equal to $$w - r$$ are instanced equally spaced along the line. Spheres generated on them will be more closer to each other as the number of planes increase. On the generated planes, points are distributed with a minimum distance of $$2r$$. (points of all planes are considered when generating them, so the minimum distance also applies between points of different layers).

After that just instance spheres with radius $$r$$ on the distributed points;

I also check if a sphere of the desired radius can fit in the bounding cube before outputting the geometry, since a single sphere is still created by this method when the radius value meet that condition.

• Oh, interesting trick, well done! May 3, 2022 at 15:15
• This is amazing, thank you very much. In your case, How can I control the number of spheres with their radii (ie it's me that I set the number displayed). For the case of cylinders, can we generate cylinders without overlap or the cylinder is defined by its radius and its height (the distance of non-overlap is defined by the distance between two bases of two close cylinders. May 3, 2022 at 17:50
• @saded I may be misunderstanding you (Sometimes my english fails me), but in case I understood: the sphere radius is controlled by a custom input named radius in the Geometry nodes, this method doesn't tightly pack the spheres, but you can increase the quality input to get closer. Will add gifs to the answer. Now for cylinders, there's probably a way to do, and is probably more easier to tightly pack them, but the way to do will be different from this one and I don't know if it needs to be in a separate question. May 3, 2022 at 18:18
• Thank you very much for the pictures shared. Regarding the random distribution of cylinders, I will add a new question. May 3, 2022 at 19:00
• Thanks Hulifier for the interesting explanation, Regarding the bar of Radius, Quality and Density Max, is there a mathematical relationship between them? I want to plot also the Radial Distribution Function for Hard Spheres curve g(r) (demonstrations.wolfram.com/…). Aug 26 at 11:05