# Random selection of objects copied by multiple Instance on Points nodes

I can't figure out how to address random object that has been repeatedly copied by 'instance on points' nodes. To describe the situation let's say I have triangle like mesh that I want to copy on curve like this:

(IOP = instance on points)

1st IOP - put 10 triangles around the circle

2nd IOP - put 6 triangles around the circle

(these 2 IOP outputs will now serve as new instances consisting of triangles in circular array)

3rd IOP - put 1st array of 10 triangles on begging of a short straight curve/line

4th IOP - put 2nd array of 6 triangles is

on end of the same short straight curve/line

(Just to recap - 3rd and 4th IOPs now again act like one instance consisting of two circles that are offset in axial and radial way to each other)

5th IOP - copy this line with two circles of triangles on it to points of longer more complex curve consisting of several points.

Now all I want is to somehow make bunch of random selections. Each one of them would accommodate certain number of randomly located triangles. The reason for this is to have option to slightly scale and rotate them (maybe even transfer them a bit) etc. to achieve more organic pattern instead of this geometrically perfect one.

Maybe some of you know some way how to address these triangles. After all it just uses one object and then just coping it in certain patterns. Thank everyone who will give this a thought. I'm stucked on this for a very long time.

I know that there is maybe a better way to do all this and I would love to hear it but I already have a pretty complex node tree with something similar to this so I would really use a solution for this layout.

I ran out of ideas the only thing left is to somehow make selection based on vert. numbers as they piled up in this process but that would probably be insanely complicated and I'm not experienced nor educated enough to figure that out- assuming that it's even possible.

• In the provided GN graph pictures, you are using Align Euler to Vector nodes. Does it mean that you want to control not only the position, but also the orientation of the instanced objects ? In other words, a point cloud will not do it for you, as you need also some normals (not just positions) ? Commented May 31 at 10:32
• Could you provide your Blender file using blend-exchange.com ? Commented May 31 at 10:32
• File uploaded. Yes, preferably I would like to change all three things (position, rotation, scale). Each triangle is align to face the center so it needs to rotate on it's own coordinate system not the global one if that's what you impling.
– Andy
Commented Jun 2 at 8:41
• Could you clarify "(...) is aligned to face the center" ? Which center ? For example, in the provided figure, it seems that the normal of each triangle is pointing towards/away from the curve drawn as a thin black line. Commented Jun 2 at 8:49
• First 2 Align Euler to Vector nodes rotate each "triangle" in circle to face the center of that circle (1st (on left) node Curve Circle). And the last one rotate those circles to follow the main long curve (perpendicular to axis so it forms tube). I can't find better way to explain it but the best way to show its function is to dissconect Align Euler to Vector node from IOP node (muting the node doesn't work right so it needs to be disconnected).
– Andy
Commented Jun 2 at 9:28

One way to make your structure more organic could be to plug in a noise node in the "scale" parameter of your "instance on points" nodes (add a map range node between the two to have more control on the effect) . For rotation you can mix the result of the "Align euler to Vector" with a noise with a mix vector node. Hope this is useful !

• This unfortunately change parameters in one ring for example and then it's copied all over the whole thing making visible pattern because every ring is the same. (Consisting of same randomly scaled triangles) Hope that makes sense:)
– Andy
Commented May 31 at 6:09

(Using Blender 3.6.8)

### Approach

A point cloud is firstly generated, recording successive rotations. Then triangles are spawned using a single Instance on Points node. So each resulting triangle is an instance whose position, scale and rotation can be randomized individually.

This figure illustrates the original generated object (on the left) and the object generated by the proposed GeometryNodes modifier (on the right). Its input parameters, controlling a white noise, are:

• Noise-Position: a distance $$d$$ to shift each coordinate by $$\pm d$$.
• Noise-Scale: a factor $$s$$ to scale isotropically the instanced object by $$1 \pm s$$.
• Noise-Rotation: an angle $$\alpha$$ to rotate the instanced object around each axis by $$\pm \alpha$$.

### GeometryNodes modifier

#### Point Cloud generator

This graph is derived from the original one. But its purpose is to generate points, collected in a Point Cloud, where triangles are instanced afterwards. Because points have no orientation, rotation information are stored as Attribute. It is to notice that Align Euler to Vector nodes are removed.
1. For both circles, the Rotation vector provided by the Curve to Points node is recorded using a Store Named Attribute node under the same name ("rotation 1" for the demonstration).
2. The second circle is instanced at one end of a Bezier Segment. A Realize Instances node is used to make "real" the points along this circle. The attribute "rotation 1" is preserved by this process.
3. Both sets of points are joined in a single object.
4. Following the same procedure of step 1, the Rotation vector provided by the Curve to Points node applied to the input Bezier curve, is recorded using a Store Named Attribute node (named "rotation 2" for the demonstration).
5. This attribute is transferred to the objects instanced by the last Instance on Points node.
6. Consequently, after a Realize Instances node, a cloud of points with both attributes ("rotation 1" and "rotation 2") is returned.

#### Instances randomizer

This graph is attached to a cube, whose position, scale and orientation are the only relevant information. Its geometry is irrelevant because the generation process is based on Object Info nodes to recover the curve and the triangle geometries.
1. A Transform Geometry node is applying a 90 degrees rotation around the X axis to the triangle. This transformation replaces the original Align Euler to Vector nodes.
2. Before randomization, the Rotation of each instanced triangle is computed using a Rotate Euler node. Following the generation process of the point cloud, "rotation 2" is applied to "rotation 1".
3. To randomize the orientation, a second Rotate Euler node is used.
4. To randomize the position, an Offset is drawn then input in a Set Position node.
5. To randomize the scale, the Scale socket of the Instance on Points node is directly connected to the noise generator.

Blender file: