4
$\begingroup$

As I understand, a capture attribute node takes the value of an attribute in the context of a geometry, and stores it into that geometry. What I would like to understand is why that attribute cannot simply be referenced later on in the network? I illustrated both cases in the node network below: both viewers yield the same values. Isn't the Capture Attribute node just 'syntactic sugar', which keeps node network a little more readable?

Node setup

$\endgroup$
3
  • $\begingroup$ As far as I understand it, the Capture Attribute node is mostly helpful to output an attribute from the node tree so it can be accessed outside the Geometry Nodes editor, for example in the Shader Editor via an Attribute node. $\endgroup$ Jan 25 at 12:48
  • $\begingroup$ @GordonBrinkmann: This is just one feature of it. Even better or at least the same worthiness is that you can "save" values from other node tree branches to your branch, e.g. if you want to color your instances. $\endgroup$
    – Chris
    Jan 25 at 13:08
  • 1
    $\begingroup$ Chris gives a good answer. For a different case requiring capture attribute, which is probably simpler, see my answer at blender.stackexchange.com/questions/251426/… . $\endgroup$
    – Nathan
    Jan 25 at 17:13

1 Answer 1

6
$\begingroup$

Here you see a very simple setup and i hope can explain it so that is is understandable:

enter image description here

Here i connected the viewer to the group input geometry which is a cube, so i see eight vectors in the viewer.

enter image description here

Now i connected the viewer after the instance on points nodes and the transform node, so i see the "new" vector values which have increased x values.

And this although it is the same position node (which always relates to the geometry where it's plugged into)!

With the capture attribute node i can now "transport" my 8 vector values to my nodes AFTER some other nodes and can there "do something" with these values.

node setup here:

enter image description here

Here i connected now the capture output to the viewer so i can see the "original" values before the transform node changed them.

Note: This is just a very simple setup so that you can easily understand the principle.

It makes not much sense so. But....capture attribute is a very powerful node with which you can e.g. give all your instances different colors.


With this setup you can colorize each instance independently:

enter image description here

it works, if you use capture attribute to "fetch" the index from the right geometry -> so captured index is right.

it doesn't work if you plug in the index directly to the output -> so index is wrong.

Shader setup with wrong index

enter image description here

shader setup with right index

enter image description here

So to finally answer the question:

No, you cannot reference that values later. This is exactly what the capture attribute does. Without it, the "values before the geometry change nodes" would be inaccessible. This nodes makes them accessible for "later" use or other node branches. And no, therefore it isn't syntactical sugar at all. It is a very powerful node which makes a lot things possible at all.

$\endgroup$
6
  • $\begingroup$ Except that there are other ways to color the instance differently that don't use the index. So sure, you can't use index in this way, but that's not the same as 'you must use' capture attributes. $\endgroup$ Jan 25 at 16:14
  • $\begingroup$ Your first comment is in line with mine, and you could do without the capture there, so the Capture Attribute is syntactic sugar there, which leaves the export from node group as valid use case, as Gordon Brinkmann suggests. I cannot get your second example to work right now, I'll take a closer look tomorrow. What version of blender are you using? $\endgroup$
    – eezacque
    Jan 25 at 16:20
  • $\begingroup$ i am using version 3.1 $\endgroup$
    – Chris
    Jan 25 at 16:21
  • $\begingroup$ I can just repeat, although i don't think both of you "see" it: The capture attribute node is not syntactical sugar. It might be in easy cases - but it is NOT a useless node. If you think that, you didn't get it. Maybe my explanation wasn't good enough. And i never said, that my "solution" couldn't be solved in another way. So i don't understand the sense of your - in my eyes - useless comments. It is just an example to explain the functionality!! $\endgroup$
    – Chris
    Jan 26 at 6:46
  • $\begingroup$ I'm afraid making stupid remarks and asking stupid questions is part of the learning process. My sincere apologies if my learning annoys you. $\endgroup$
    – eezacque
    Jan 26 at 10:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.