Controlling vertex normals

I doodled a shape with no faces to which I intend to use for instancing a child object (Instancing → Vertices → Align to Vertex Normal). However, the automatically assigned normals are not what I’d like them to be. Here’s what I see:

What I’d like is for the normals to be orthogonal to the corners, essentially like this:

I feel like I’ve tried every single option under MeshNormals, but none of them have any effect. I really would have thought that Rotate would rotate the normals of my selected vertices, but it too does nothing.

What am I misunderstanding here, and how can I make my vertex normals point where I want them to?

P.S. If it’s of any help, here’s my Blender 3.2.2 file:

normals.blend (807.9 KB)

Hmmm, it does appear that the vertex normal editing tools are pretty limited.

So, unfortunately, I don’t have a direct answer to your question, but I do have a workaround, with a little geometry nodes:


mesh to curve normals.blend (710.4 KB)

3 Likes

If this flat thing is extruded a bit into Z then the normals are like you want them… so using a little help with GN to do so and then delete this additional geomtrey… you can also instance this the old way:

@SterlingRoth: Your workaround works; thanks!

What’s the intuition for why converting from a mesh to a curve to points should produce the normals I was hoping to see?

@Okidoki: Thanks, but this isn’t working for me in Blender 3.2.2. That is, extruding into Z does indeed give me the normals I want, but as soon as the additional geometry is deleted the normals revert to their original direction. I tried this both with your Geometry Nodes setup and manually and observed the same behavior each time.

It’s not obvious to me why extruding should make a difference, but this is an interesting thing to keep in mind.

The curve normals are more predictable. vertex normals are really haphazard and are usually just an interpolation of the adjacent face data, so in a situation with no faces, it’s unlikely to generate useful data.

Curves however, calculate the normal and tangent pretty predictably, so getting the normal data from them is pretty reliable. converting to points just allows you to pinpoint where you want your instances to be.

1 Like

I see. Thanks for the explanation.

Ohh i made hasty reaction : my GB doesn’t work :sweat_smile: … but

The original idea came from the fact that pure edges does have these weird normals in blender (seams to be all only pointing away from the center and not using the directions of the left and right neigbour to compute the normal)…but:
Have a look (your geo copied to the right and extruded and you wish)…

@Okidoki: I hadn’t noticed until you pointed it out that my original normals are all pointing to the object’s center. So there is a pattern to the weirdness!

I don’t suppose there’s a way to instance objects only to selected vertices, is there? That way, I can keep the extruded geometry with its orthogonal normals but ignore the vertices added by the extrusion.

Yes add wanted verts to a vertex group.

@AlphaChannel: I created a vertex group, but I didn’t find an option to select it when choosing what to instance:

instancing

I was able to instance at the vertices in the vertex group using the following geometry-nodes setup and associating the vertex group with the Selection port:

Did you have a simpler, non-GN-based mechanism in mind?

You are almost there:
After connection the selection to the geometry node input itself (like you did) on the right side in the geometry modifier there is right to Selection a crossed flagged like icon like this: :sweden: … click it and then click the right text field … there you can choose your named vertex group (or for example any uvmap and more…).

1 Like

Like Oki said.

2 Likes

Thanks, @Okidoki and @AlphaChannel, but I miscommunicated. When I wrote, “and associating the vertex group with the Selection port”, I meant that I indeed had clicked the flag icon and chosen my vertex group—and this works.

From your answers, I’m inferring that geometry nodes are required in this situation and that there’s not some sort of simple “Use this vertex group” option associated with the

instancing

panel, right?