Geometry Nodes

I personally think removing the output would make it work in the same way as attribute transfer, raycast and statistics- thus a smoother learning curve. From what I have seen, that is the intuitition for non-advanced users anyways. For example-




The way I see it, everything would work the same way it is now. As I have said before, Blender can always internally connect the (hidden) output of the attribute capture just after the point connected to the input. So everything remains same as before.

To summarise, Attribute capture should work like a special case of attibute transfer where the source/target geometry is a previous version of the current geometry

1 Like

I think the main problem is Capture Attribute itself, not how Capture Attribute works.

I really think that the Capture Attribute should be deprecated and eventually removed. It would be much better if we have explicit control of how attribute gets transferred each time the domain changes (Curve to Mesh for example), rather than hoping that the black box Attribute Capture node will just magically do exactly what itā€™s supposed to do along all the steps and possible domain conversions from the point where itā€™s used back to the point where itā€™s captured.

I think the interpolation is actually handled by each node -but I could be wrong. Hans didnā€™t touch on this when he last visited, still Iā€™d be curious to know.

1 Like

Yes, but somehow I just donā€™t believe it will do exactly what you need each time. Iā€™d imagine that on every domain conversion, I should be able to pick which domain to transfer the attribute to, and based on what.

So that you could chose to transfer your curve vertex attribute specifically to face corners or mesh vertices, and you could decide which parameter is the transfer based on, such as distance, and so on.

Iā€™ve found that when plugging an attribute (captured from a non outputting geometry) into a groupā€™s output (a group which switches domains internally), you need to capture it again on a geometry that is part of the output also, or it wonā€™t register outside of the group.
So, it is already pretty explicitā€¦

Yes, but itā€™s explicit in a way which makes the node networks very ugly and messy.

We are talking about capture attribute, not transfer attribute right ? If Hansā€™ extrude node is any indication, attributes present on the geometry at the time of a topology-changing node (such as extrude) will not change domain. I assume the rules of propagation would be different for every node, for instance bevel would probably interpolate adjacent facesā€™ attributes along the bevel geometry, etc.

In the case of curve to mesh, I canā€™t really imagine another way of transferring an attribute from the source curve to the resulting tube. Different interpolation between curve vertices for instance ?

1 Like

Do you have any mockups for how attribute handling should work? I think the balance between explicitly and auto-magically is pretty good right now. But I do also think there should be dedicated domain change nodes without any geometry input or output.

I think every node had its own way of attribute interpolation. I remember from Hansā€™ notes that the attribute interpolation for the extrude node took a lot of work and discussion.

1 Like

The problem with this kind of discussion is often, that the problem itself faces rather practical problems and not just semantic ones. And yeah its quite easy to state that it should simply connect to this and that node automatically. But in fact there is a lot of freedom built into how and where these connections are made. And eg there might be a big amount of nodes around that connection encapsulating the capture attr node and also on the geometry path. The parser will have to keep track of changes in split off subtrees at compilation time for attribute additions what have to be processed along the geoms path, what may hurt efficiency of the compilation and it leaves some definitory questions open, when exactly is the attribute present, when it is filled with dummy values, with attribute outputs. What happens if I try to capture an attribute that is created but not filled etc. But that shall not mean that your idea is not possible, I simply didnt take enough time to rule that out. So please dont take it as that.

Its just that its a strong argument for the user and the developer if there is a clean definition directly readable and built into these connection systems. Currently these attribute creations are placed quite clearly in a generally cyclefree tree that can be traversed from the leaves or root without implicit assumptions on changes done in bypassing splitted subtrees. To me thats a strong argument for it, also from a users perspective.

Attribute capture is an attribute create node, not just a getter. It modifies the geometry from the input socket. The attribute transfer itself does just offer a view on a geometries data to be processed in a completely different context. Its not modifying another geometry. That is done by another setter node in that split off geometry path. I really prefer this being transparent to the user.

4 Likes

I still canā€™t really see where it can go wrong :sweat_smile:. In all the situations the connections seem obvious. It really is just a visual change and nothing is changing underneath. You might even be able to make an addon which connects the attribute capture output just after the input.

That I think is a matter of perspective. You are just ā€œgettingā€ the attribute from a previous version of the geometry.

You can use it like that, but in general thats not true

The Capture Attribute node stores the result of a field on a geometry, and outputs the data as a node socket so it can be used by other nodes.

The result is stored on the geometry just like a regular attribute with a name, but instead of referencing it with a name, it is retrieved whenever the socket is connected to the input of a node. Later on when evaluating the node tree, the attribute will be removed automatically if it is no longer used.

1 Like

Internally, sure it is working differently. But form a userā€™s perspective, attribute transfer and capture arenā€™t really that much different. Both are bringing data from some other geometry, but by different transfer metods.

There is a fundamental difference that you seem to be missing, it is that capture attribute stores the attribute on the geometry, so subsequent geometry nodes operating on the same geometry flow will work on that attribute, modifying it to fit the modified geometry (as explained in the extrude mesh task linked above). That, as far as I know, is not possible in any other way.

Using transfer attribute from a previous geometry in the same geometry flow would exclude all nodes in-between (extrude, inset, bevel, etc) and all the attribute propagation work theyā€™ve done.

4 Likes

Yes it is technically something very different, it has different limitations and performance implications. But yeah in the end every node is modifying data of some sort. So they are all the same in this regard not just these two. Not sure, why you prefer that they are not clearly readable in a nodegraph.

I am not against knowing how these node work, but against having to sacrifice workflow and intuition for some information that is mostly useless for the user. As far as the usability is concerened, Attribute capture ā€œcapturesā€ an attribute from a previous geometry state.

Which is more easier to imagine-

  1. ā€œI will write this attribute into the geomtery using the attribute capture so that I can use it later on in the node treeā€
  2. ā€œI will use attribute capture to use this attribute from the previous geometryā€

Both are pretty simple. Its just that the second tells you nothing about what is really happening.

ā€‹But yeah we differ on the level of abstraction we prefer here.

1 Like

When working on large trees the second one saves a lot of brain power, mainly on trees where the flow becomes not-so-obvious

Itā€™s not about how they work, itā€™s about what they do. They donā€™t do the same thing ! Iā€™m not sure how else to explain it. Hansā€™ post above is what helped me understand. (Geometry Nodes - #2920 by HooglyBoogly

No this is just adding implications and assumptions that have to be known and so it makes graphs more difficult to understand. But I got your point, I just dont share it. Lets stop here. Its taking up too much time. :slightly_smiling_face:

1 Like

Of course they are very different. I am just asking for a sort of shorthand where the evaluator just assumes th geometry output is connected :slightly_smiling_face:. It will lead to much better better looking and readable node groups.