0
$\begingroup$

I have done some geometry instancing things in my Geometry Nodes and wanted to offset them a little bit by the normal of the face the instances are on. However blender doesn't let me plug the Normal node into the Translation property:

broken layout

This seems to be because the Transform node only supports single values, not values per-point. I tried using the Translate Instances node, but this does not seem to work either:

non-working translate instances

I assume this is because the Normal node somehow loses its information when the points are changed to instances, so I think I need to somehow store the information on the instance and then retrieve it for the Translate instances node, but I couldn't manage to make it work with any attribute nodes.

Right now I'm using a workaround like this:

workaround using the Rotation socket on the instance on points node, coming from Align Euler to Vector Node using the Normal Node as input

However this also rotates the instances, which is fine for the use-case I have right now, but would like to avoid to further extend what I'm doing. (offsetting with random rotation after having it aligned to the normal doesn't work like this, it would then translate not along the normal, but along the randomly rotated normal)

Do you know any way how I can make the translation work using the Translate instances node?

$\endgroup$
5
  • $\begingroup$ Does it go away when you actually plug a green geometry noodle into the node? $\endgroup$
    – Jakemoyo
    Sep 14, 2022 at 1:23
  • $\begingroup$ no, I ran into this issue with my actual setup. I'm generating geometry using a primitive and wanted to offset that by the normal at my vertex I am passing into Instance to Points. For rotation and scale there is an attribute on that, which works, but I wanted to additionally translate, which I thought I might be able to do with the Transform node, but couldn't do. Right now I'm experimenting with Translate Instances after the "instance on points" node, but I can't really get it to use the normal from the source mesh there right now. $\endgroup$ Sep 14, 2022 at 1:29
  • 4
    $\begingroup$ Hi Webfreak, this is "normal" behaviour. You are plugging field values (which means value per point) into a constant value, which isn't possible. You can recognize field values as the diamond shape, and constant values at the round shape. This question was asked several times before here. Instead of using the transform node, use the "set position" node. $\endgroup$
    – Chris
    Sep 14, 2022 at 3:56
  • $\begingroup$ Single values, not constant values. But anyway, exactly what Chris says. The Transform node is expecting you to transform a geometry in its completeness rather than moving its components like vertices independently via multiple values plugged in with the field values. It's like moving an object in Object Mode vs. moving vertices of a mesh in different directions in Edit Mode. $\endgroup$ Sep 14, 2022 at 11:01
  • $\begingroup$ thanks, that makes sense. I have adjusted my question to actually show full Geometry Nodes layouts and better specified what exactly I want to move using the Normal node here. Do you think this is still a duplicate of another question with this? $\endgroup$ Sep 14, 2022 at 12:18

1 Answer 1

2
$\begingroup$

If you want to translate the instances anywhere, you have to put values into the Translation input. After the Instance on Points node, the Normal node provides the normals of the instances (not of the original vertices from the initial geometry) which are all 0.

To move the instances along the normals, to have to save those values before you the instancing. You can do this with a Capture Attribute node plugged between the original Geometry and the Instance on Points node, then plug the outpout values into the Translate Instances:

capture normals

$\endgroup$
2
  • $\begingroup$ ah thank you! I was trying to use both Store Named Attribute and Capture Attribute, however I tried to do it per-instance and tried to put it on the generated Ico Sphere and then extract it after making instances, which seemed more natural to me, but obviously didn't work. I haven't really found any use-case for storing things per-instance yet, (or more precisely: I haven't managed to actually store anything meaningful on an instance yet) - do you maybe have some online resource for that? $\endgroup$ Sep 14, 2022 at 12:42
  • $\begingroup$ @WebFreak001 What do you mean per instance? An instance is a clone of an original object, every instance is exactly like the other - no individual "internal" properties. After instancing you can move, rotate, scale them individually but that's not changing their underlying base geometry. That's also a bit like Object Mode vs. Edit Mode. Moving, rotating, scaling an object in Object Mode doesn't change its underlying base mesh. If you use Alt + G, R or S to clear any transformation, it goes back to what it was before if you haven't applied those changes, in GN that's Realize Instances. $\endgroup$ Sep 14, 2022 at 12:51

You must log in to answer this question.

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