Geometry Nodes

Easy solution is to use two align rotation nodes, one for Z alignment and other for X or Y

5 Likes

I would be very interested in this as well. Until now it’s not completely clear to me what the relation is between the density number you put in and the number of points you get out.

3 Likes

If we go back to the basics, when distributing, the monkeys are aligned with the normals. When only instanced, they are all aligned with the original monkey. My two cents: maybe it should be consistant?

I know you just need to add an align rotation to vector to align the monkeys to the normals but if you want to do the opposite, distribute but get them all aligned like the first monkey, it’s a bit more complicated. I think by default they should not be aligned to the normals so I don’t need to counteract the rotations.

5 Likes

"When only instanced, they are all aligned with the original monkey. " Its not aligned to the monkey, the instances are inheriting the monkey’s rotations.

When you Instance with using Point Instance, all point Rotations are zero. ( actually 0,-0,0 ?? )
If you add is a Point Distribute Node you now have random Rotations per point.

Use the Spreadsheet Editor to see whats happening.

Its working as intended albeit a bit confusing. The Point Distribute could have a " Grid " option that distributes to the Vertices.

1 Like

Re-iterating a question (haha) that is perhaps on the internal roadmap: Whether there is a plan for iteration, recursion, or the like in geometry nodes. Could be useful for many things, a couple of obvious examples are L-systems or array-modifier like nodes. I’m not personally invested in which style, just curious on the if/when it would happen.

1 Like

Hi, there are no specific plans for any of those things right now. A “for loop” node has been mentioned a few times, but a good design would be needed for something like this.

More recently we’ve been talking about list sockets. The first use case is to specify multiple attributes at the same time for things like the attribute remove node or for choosing which attributes to interpolate in the attribute transfer node. I know that’s not what you had in mind, but it’s slightly related.

4 Likes

Are list sockets ordered multi-input sockets ?

@HooglyBoogly Just wondering if this is a known issue or not? The parameters from a geonodes modifier aren’t named correctly in the dopesheet or timeline, which makes it a nightmare to animate with. You just get “input_7” etc. Only by mousing over the parameter in the modifier do you even know which input relates to which parameter.

You also get the parameters listed in the order they were keyed in which just further aggravates the issue. They ideally should be listed in the order that is shown in the modifier. If you have a vec3 parameter and only key one component of it, then come back later and key another component, they will be listed in the wrong order.

Really hoping that this may be able to be fixed before 2.93 is released. I was going to lodge a bug report, but it is hard to know if this is classified as a bug or a feature request :slight_smile:

2 Likes

I’m really loving geometry nodes. It definitely feels like there’s a certain mindset to get into when designing nodes; it’s not immediately intuitive, but I feel like it’ll click someday. It reminds me a bit of switching to a massively-parallel mindset for writing shaders or material nodes. Not the same paradigm as that, the whole “everything is one geometry struct” is severely serial, but it’s just the same experience of “I have to learn how to think about this differently.”

I just designed a set of geometry nodes to create a displaced hull outline, with displacement being measured in screen space or something like it, with the intention of reuse, and I suddenly realized a potential problem that might impact the portability of geometry nodes like this: scope of variables.

I’m using implicit attributes, naming them as appropriate for my particular node group, but if I reuse these nodes, I can’t know that the next geometry I use with it won’t have those attributes as explicit attributes, in the form of named vertex groups (for example.) I could initialize them with an attribute fill, but that’s wasteful, and will still lead to the problem that those vertex groups will no longer be usable after the geometry nodes evaluation.

I would recommend making a distinction between implict and explicit attributes because of this. An explicit distinction :slight_smile: How? Via explicit and implicit attribute input nodes. Explicit attribute inputs can be dropdown lists of existing attributes, which also helps with the current discoverability problems. Implicit attribute nodes can have names that are merely handles, with the actual name of the attribute being determined at time of compile. This will also help with bugs caused by misspellings.

Note that it would be ideal for this scope to be on a node group basis-- node groups are as important for reusability as node sets. An explicitly implicit attribute inside a node group shouldn’t be the same as one with the same name outside, unless that attribute is used as an input to the group.

(Although it looks like VGs aren’t being written in the 2.93 I downloaded, which solves half the problem-- still, I imagine that’s a bug, since it’s such a clear step backwards from 2.92.)

2 Likes

In terms of attribute names, it would be nice if every attribute name string input (the blue sockets) got an output blue socket on the other side.

This wouldn’t change functionality or the way or order the node graph is evaluated at at all, but users could use it to make the flow more visible, by only using the text box when creating new attributes, and then dragging connections beyond that

4 Likes

I think the proposed Attribute Processor (T85655) is going to be a better approach to solve the current UX issues.

While inconvenient, the current UI at least correctly conveys the idea that the strings only reference the attributes existing on the geometry.
Having string outputs could create potentially misleading node graphs:

Try explaining to someone, that input A and B in the third node actually refer to the same values, without making it seem, like the system is actively made to be confusing. :smiley:

Don’t get me wrong, I totally agree that the current workflow can be frustrating, but at least it’s not intentionally misleading.

3 Likes

Yeah, I think the socket would look the same. The key is using a single noodle to pass around multiple strings though, otherwise it doesn’t have any benefit over a multi-input socket. But I think any socket that accepts lists would also be a multi-input socket.

Isn’t it important to communicate order clearly ? in case operations are heavy and non-commutable (such as booleans)
Not to mention these would have to be reorderable

Yeah, unfortunately that’s a known issue currently. That’s just the way that unique names are generated for group node sockets. It would be good to improve that in the future, or at least make the animation editor aware of the corresponding socket labels.

1 Like

Hello, is there a way to invert the normals of a mesh ? I was trying to create a mirror modifier node group but scaling -1 along an axis obviously produces inverted normals.
It seems the face normal attribute is write only. I understand that it is tied to the actual geometry and modifying it may lead to unexpected shenanigans, but a “Recalculate Normals” or “Normal Edit” like the modifier would be nice.
Cheers

I’ve put a copy of my experimental script node for geonodes on github, be sure to read the readme front to end as it contains important information on what this experiment is/meant to be.

12 Likes

Yeah, the normal attribute is read-only. That’s because normals are inherent to the mesh topology and the vertex positions, changing them requires changing one of those two things. In the future we can support custom normals on the face corner domain.

2 Likes

But also, an “Invert normals” node that would reverse the order of the vertices for each face would be very simple to implement, that’s a good idea.

4 Likes

Thanks, at least I know it is on your radar! My current workaround is to key all parameters on frame zero, even if most are not used. This at least gives me the same order of the animation channels that are in the modifier.

image
When I create new group input through the UI, how do I define the type of that input?

Dragging a node socket type into the Group Input node certainly isn’t the only way to specify the socket type… that would be embarrassing.

1 Like