1
$\begingroup$

Using 3.1.

(This question has been edited. The previous sample file incompletely matched the description and didn't allow full answers. I've just aligned the description of the problem and the sample file.)

I'm working on the base of a tutorial to create procedural grass: A leaf is created, then instanced on points of a small surface to create a tuft. Several tufts are then distributed to cover a larger area. I've reduced the leaf to a tube for simplification.

A tuft composed of randomly oriented and scaled tubes:

enter image description here

The nodes to build this geometry:

enter image description here

The tuft is built from leaf instances which are rotated and scaled randomly. So far, so good. The problem arises when tuft instances are used to make a grass area:

enter image description here

Tufts are built from leaves similar in number, orientation and size. Not very realistic. Here my tree for the tuft:

enter image description here

What would be the correct way to introduce variations in tufts?

From quellenform's answer I learned instances are all based on a single mesh, but can be realized into separate entities and vertices positions changed using Set Position nodes. Still I can't see how I could do this adjustment to perform rotation and scaling of individual leaves. The reason is leaves to be modified are now instances of instances made real. This nesting prevents me to access them from the top-level node group.

The corresponding file:

$\endgroup$
2
  • 1
    $\begingroup$ Can you post a simplified version of your .blend using Blend-Exchange? (The sky texture and any other textures etc. are not necessary. Try to keep the file small.) $\endgroup$
    – Mentalist
    Commented Jul 22, 2022 at 10:46
  • $\begingroup$ @Mentalist: I added a sample file. $\endgroup$
    – mins
    Commented Jul 22, 2022 at 13:15

1 Answer 1

2
$\begingroup$

With the node Instance on Points you always create copies (!) of a single object.

You can find this problem in several posts here on BSE.

During or after an instantiation you always only have access to the transformation of the objects, but the mesh remains the same for all instances.

Instance == Duplicate!

But you can use the node Realize Instances afterwards, and move the single vertices with Set Position to a new position:

enter image description here


EDIT

You can achieve the desired end result, but you would have to structure it differently.

If you create a node group for the grass bale and instantiate it, all instances (copies) are identical.

After an instantiation you only have the possibility to change the rotation, position or scaling of individual instances, or, if you convert the instances with Realize Instances into a mesh, to move the individual vertices.

However, to create individual grass balls with different distribution of points and to keep the parts parameterizable, you would first have to create the individual surfaces of the grass balls, and then collectively distribute the individual points for the instantiation of the grass blades.

enter image description here enter image description here

The node group for this could look like this:

enter image description here

$\endgroup$
9
  • $\begingroup$ That's a helpful explanation. "Instance" use by Blender is misleading, in type theory an instance can have its own state, only the behavior is fixed. To clarify furthermore Realize Instances seem to be the new wording for converting clones (aka linked meshes) into independent meshes, is it correct? $\endgroup$
    – mins
    Commented Jul 22, 2022 at 13:59
  • 2
    $\begingroup$ @mins Well, this is not type theory... and this definition of instancing is not limited to Blender. Quote from Wikipedia: "geometry instancing is the practice of rendering multiple copies of the same mesh". The same mesh is crucial here. You can scale, rotate, move instances as well and create random versions of them in Geometry Nodes, just like e.g. doing those transformations in Object Mode. But you cannot change the underlying mesh, and if you do it in Edit Mode, the instances change as well. So if you want to change them invidually, you have to unlink them somehow. $\endgroup$ Commented Jul 22, 2022 at 14:16
  • $\begingroup$ @mins That's right: Realize Instances means that each individual instance is converted into a mesh and these are packaged together in one Geometry. This geometry can then be further processed as usual. "Independent" therefore only in the sense of Mesh Islands. $\endgroup$
    – quellenform
    Commented Jul 22, 2022 at 14:49
  • $\begingroup$ Now I understand (a bit) better instances, your comment mentioning Mesh Islands makes me think my original problem (rotating and scaling leaves) cannot be solved after the leaf instances are realized, because they are not anymore a single object. E.g. if I use a Transform node, I can rotate/scale the whole mesh created, that is all leaves at once, but not the individual islands. Or do I miss something...? $\endgroup$
    – mins
    Commented Jul 22, 2022 at 16:53
  • 1
    $\begingroup$ @mins You can also rotate/scale single vertices (or parts of your mesh) with the node Set Position. But you would have to calculate the vectors (for example with Vector Rotate or other vector nodes). $\endgroup$
    – quellenform
    Commented Jul 22, 2022 at 18:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .