Yet Another Vertex Normal Editor (Y.A.V.N.E.)

@Jamez - The typically workflow can be summarized in three steps:

  • Assign sharp edges to create split vertex normals.
  • Set beveled faces to have lesser influence than the surrounding geometry. Since Y.A.V.N.E. defaults to “Medium” face influence, this means assigning “Weak” influence to bevels.
  • Tweak problematic areas using the remaining features.

In your example, as mentioned previously in this thread, Houdini seems to be automatically setting sharp edges according to face angle. This sounds similar to Blender’s “Auto Smooth Angle” option in the “Object data” tab of the “Properties” pane. Unfortunately, this option is not available with custom normals. Others have described a workaround that involves selecting edges by face angle and tagging them as sharp.

I agree that a “Cusp Angle” or similarly named option would improve my addon. It would involve very little effort to implement. My priority, however, is to address the issue that Adder1812 described earlier.

Hi Umdee, thanks for your reply and thanks for the great work on this addon! Yeah, it took a few days for the proper workflow to sink in for me, as I have spent so many years using a SDS workflow, that the realtime workflow has taken a bit of mental adjustment :slight_smile:

You are correct, Houdini is adding the sharp edges automatically and must be using a very clever weighting algo on top of the standard face weighting as it always gets it right without any user intervention. My revelation with your plugin was the proper use of the “update vertex normals” option and using strong weighting on the correct faces. Also in my first example, I had stupidly missed tagging a couple of hard edges This also helped me understand the best way to add bevels for this type of workflow, since the shading can still look wrong if there are too many hard edges near to the bevels.

If you ever get time to add that angle option it would be very cool!

2 questions if I may:

  • forgive my ignorance, but how exactly do you select edges by face angle?

  • how did you create the first model in the github documentation page, was that done with hardops?


@Jamez - You’re welcome. I’m happy to hear that you enjoy using my addon!

Blender provides the “Select Sharp Edges” operator, which adds edges to your current selection based on a “Sharpness” factor (angle between faces). It can be found under the 3D View’s “Select” menu.

No, I didn’t use hardops. It’s just some simple geometry built using primitives, insets, intersects, booleans, and bevels.

Aha! For the life of me, I didn’t realise this was an actual operator with a sharpness angle. Works nicely…thanks!

Hey, @Umdee, thanks for this awesome tool, though I was recently looking for a weighted normal solution that would give zero influence to the smaller face near the bigger one. Essentially weighted normals without those strange subtle gradients, would this feature be possible to implement? It’d be insanely helpful and it’d make a lot of people’s life way easier.

Perhaps an option with the bevel modifier to assign custom normals to the created faces / verts? It’d be so damn awesome!!! Please


it is already possibile but you should set up it manually.

@MmAaXx, yeah that’s the thing. I think it should be possible to automate it, especially when you only bevel the edges using the modifier. Those created polygons could have no influence on the normals and thus produce even cleaner weighted normals with almost no extra effort. No?

Holy damn, this looks useful! Gonna test it as soon as possible.

Interesting idea. It might be possible by implementing a threshold for “Face Area” and “Combined” vertex normal weight types in order to clamp influence. What would be the meaning of “theshold” for a face relative to the other faces that share a vertex?

  • Area relative to average area
  • Area relative to total area
  • Area relative to largest face
  • Area relative to faces that share an edge

  • It’s certainly worth a try.

I agree. That would be nice, but currently there’s no clean way to do that in a Python addon. It would be necessary to modify internal Blender source code (MOD_bevel.c).

Hey, the threshold thing sounds nice! Great idea. The modified bevel would just be a welcome addition, if it’s difficult to do might not be all that worth it. Thanks for the response!

I tried this but noticed a few things. First this doesn’t seem to work with modifiers? I made a simple car wheel. Made one spoke and used yavne to adjust the vertex normals. Then used the array modifier to create the full wheel by rotating and duplicating the part. But after I apply the array modifier all the normals point to same direction as in the first spoke that was rotated by the array modifier.

Doing rotational array manually is not working either (duplicating, rotating and joining in edit mode) because joining any parts togehter with adjusted normals seems to rotate the normals to random directions (in the vertex normals in the seam of the two objects).

Also if you are working with a symmetrical object it is super difficult to copy values from one side of the mesh to other because the numbers are weird. One vertice could be pointing to (0.26, 2.97, -0.92) and when you simply want to mirror it in y-direction you end up with (0.26, 3.79, -0.92). That alone means every vertice that I want to adjust needs to be done individually by trying random numbers until it points the right way. It could help a little bit if you use the “get” to fetch the face normals and then edit those. Also is there a difference if you use (0.26, 2.97, -0.92) or (26, 297, -92)?

I like the addon overall but the issues I described makes this very difficult and cumbersome to use. I hope you keep working. The idea to just ignore beveled narrow faces and automating that would be amazing if it works.

@indecipherable, just press update vertex normals, that should solve it. :slight_smile:

Hello, I really want to learn how to use this addon, however all my experiments yield no results, I’m simply not getting how to use it.

Is there a tutorial somewhere that teaches how to use the addon? I understand the idea of changing shading on the faces on a low poly by changing the angle of a vertex normal, what I don’t understand is how the buttons on the addon are supposed to be used to change the mesh normals, when I click the buttons, there seems to be no visible effect on the mesh, (Im in edit mode of course, other wise I would not be able to see the addon)

In the past I only used soft or hard edges to make my low poly assets, but I would love to be able to set other types of weigths on my vertex normals, I would be very grateful, if some one could explain how the addon operates with a sort of (Y.A.V.N.E.) for dummies approach.

Can some one please post an example, with a few images of how one is supposed to use the addon? the examples on the Github page has images, but the explanations do not directly correlate or explain how one is supposed to use the actual buttons on the addon to get an specific result, or in which order the buttons are to be used to get the normals to change, or what one is supposed to select on the mesh then click on the addon to change the normals.

The only button I managed to make do something is the “set” one if I change the numbers on the X Y Z boxes, then hit Set on a selected vertex(s), the normals change, however in the Gibhub examples I got the impression the addon is capable to give automatic weights (angles) to selected vertex or faces, that functionality I have not been able to make it work.

Ok, after a good nights sleep I looked at the addon again, Im grateful to the author for making it, however I think the workflow is a bit counterintuitive, having some of the buttons looking the same makes things a bit confusing to new users, however I think I figured more less how to make the addon work to some extent, if I got some if this wrong please feel free to let me know, so I use a workflow that is good, I also made this chart, so maybe it helps someone else that might have tried this addon and was discourage by not getting the workflow of it.

1 Like

Hello Umdee!

I have a question. Currently, using the triangulate modifier breaks the manually set custom vertex normals, is there any way to retain the vertex normal when triangulated?

I find a rather un-elegant way to maintain the normals… I duplicate the object, making it the reference object that has no modifiers, and are in quads.

Then, the original mesh will copy the face normal from this reference duplicate using the Data Transfer modifier, after the trangulate modifier.

I hope the Blender Foundation can somehow improve the trangulate modifier so that it doesn’t break custom normals. And that will be just perfect.

Honestly you should submit a bug report for that.

Actually rohanrathni is making a gsoc for custom normals, i talked with him about lost custom normal when apply somethings but I dont talk about that, we could to tell this

I submitted a comment on the issue/bug tracker related to this issue, and From the new comments I read, they acknowledged this “issue” and rohanrathni seems to be going to take action about it. If this is improved, production for game assets that involves high quality normal maps will be sped up a lot, IMO.

I have told the same by the forum. Will be really good to have this.

Hey, this looks like very powerful tool and exactly what I need.

I was toying with it for a few hours, usually getting very sattisfying results, but there are some situations, where I cannot get the desired result out of it. I also encountered a situation, where each part of the mirrored mesh got different result, so I am wonedering why.
Also if I am understanding the vector value right, it doesnt matter what value it has if it is ony in one axis, i.e. “0,1,0” gives the same result as “0,100,0”, am I right?


Both sides of this lockbox are identical, after using the FaceArea/Strong upon the whole mesh the front looks okay, but the rear is not flat. I tried different combinations, but none gave me the desired result, then I tried to set the individual vertex normals by hand.

But even if I align all the verices of the outer (selected) face loop by hand, it still shades as round. Also if I set the vertex vector by Set and then press Get, it will give me the former value, so I don’t know if it actually got set or not.
I am wondering what I am doing wrong.