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

Hi all,

I created a set of tools for editing vertex normals. Please, visit the following link to download the addon and read the documentation:

Here are some articles that explain the usefulness of editing vertex normals:



I installed it correctly, but I can’t find it in the tool shelf :S

It is available in Edit mode only. 3D View > Tool Shelf > Shading/UVs

Nice addon. It’s a bit tedious to edit the values with numerical input (although it’s great if you want to set a bunch of stuff to the same value), having a way to rotate the normal in the 3d view could be interesting. Mostly because this never actually got into Blender itself.

Although that may be my “if I were to remake Guilty Gear Xrd, what would be nice to have?” part of my brain speaking. :cool:

Edit: It seems you can rotate normals with the blend4web addon, so combined with this you get the best of both worlds!

You’re absolutely right. While it is possible to use the numeric input fields for manual editing, they exist mainly to support the Get command.

I don’t have any plans at this time to implement a better way of manually transforming vertex normals. I’ll consider it, though. For now, if you really need a normal to have a specific orientation, you can get one from a vertex of a dense icosphere.

Why don’t you put up a video here in the post to show everyone how it works?

Thank you! This is going to be very nice addition to use with other similiar kinda of addons, can’t wait to give it proper spin around. Only problem might start raising is that, every similiar normal weighting tool/addon is cluttered in different places which slows down the process (this seems to be located where it should be).

I have been following that polycount thread as well and one thing missing from blender to complete the family, would be something like The quad chamfer plugin mentioned in there. Something like that for blender beveling modifier would be mighty useful (like for example hardops[addon] style of workflow). Modifier weighting normals at same time instead of using sharp edges for bevels shading to correct surfaces to get nice preview of the model shading, before applying all the modifiers and weighting normals manually. I tried to do that with data transfer modifier but it was limited for that kinda of use.

You’re welcome. I hope this addon proves useful.

Yes, there are a few other addons for editing vertex normals, hence the ‘Yet Another’ part of my addon’s name. Perhaps, you will find this one comprehensive enough to no longer need the others.

Here are some ideas regarding missing features:

  • Automated Update: Blender operations can introduce shading artifacts if a mesh has custom split normals. Pressing the ‘Update Vertex Normals’ button corrects the shading, but this can be tedious. An alternative would be to run the update command whenever a mesh changes. However, this might be problematic for dense meshes for which the update operation is not instantaneous.

  • Manual Editing: The ability to interactively rotate vertex normals, ideally with OpenGL rendered manipulators, might be useful in certain circumstances.

  • Tree/Grass Shading: Blender already does this with the ‘Normal Edit’ modifier. Maybe, adding a couple buttons to my addon would be a welcome convenience.

  • Average Normals: 3ds Max allows users to average groups of vertex normals. Would this actually be a useful feature?

Hmmmmm… Need to test this addon. It looks great anyway. Thank you for your hard work.

am I the only one that cant spot the addon in the toolshelf bar? xD

1 Like

Can you not see it in Edit mode?

What version of Blender are you using? I tested on 2.76b.

EDIT: It is also working on my end with 2.76.11.

yeah, sorry, of course edit mode… my bad!

Yeah I can see this includes most of the functions that is needed for editing vertex normals but I’m trying to wrap my head how to do similiar task with this addon, that some of stuff can be done bit faster with my current knowledge in Masked Smooth Normals [addon] and Weighted Normals [addon]. Though maybe I could start using yavne exlusively instead when I just learn it bit more.

I assume you have used those 2 other addons I mentioned previously, so think I could get away without sending any pictures and use simple explanation what looking after:

-In Masked Smooth Normals [addon] I can select group of faces on mesh and I hit addon’s “Soften” button which weights normals mainly for those selected faces and makes normals pointing straight along their direction, ignoring neighbouring unselected faces.

Doing same in Y.A.V.N.E. atleast what I have found of and not sure if there is better way: Reguires first selecting group of faces and weight them using Face area or Combined modes. But this does not yield same results yet and reguires using “Face Normal Influence” to minimize neighbouring unselected faces weight afterwards. This seem to add few extra steps that can start to creep up on more denser meshes.

Though I can see having this extra level of control can be useful along the way with all the different settings, what I like a lot. But I hope there would be quicker a way to Weight normal vertex using Face area mode (or any other) and it would minimize Influence of neighbouring unselected faces at same time with single click. Maybe having a just simple checkbox or something for this kinda of behaviour? This would be great at the beginning of the work when quickly tweaking larger areas at once.

And setting Face Normal Influence afterwards would be nice way to give more proper tweaking and have futher control. Maybe even have numerical values to add how much weight there is, if something like that would be possible at all.

-Automated Update would nice option, having checkbox for that and maybe few settings how/when it updates itself. Could use this at early work.

-Manual editing (blend4web) single faces is something very nice for futher tweaking and polishing of more problematic areas. Having that in yavne would make interface less cluttered having all these tools in single place in tidy little big package. :slight_smile:

-For tree/grass maybe have operation/button that would make whole process setuping up more faster, someone might find it useful.

edit: kinda first point answered to averaging group of faces/normals, but having this could provide usefull as well.
-Average all normals in object or/and edit mode would be nice too (like Weighted normals [addon] but having own button for it), when quickly want preview or create starting ground where to beging futher weighting. Even though doing this can be now achieved in edit mode selecting all the faces and just hit use Vertex Normal Weight in yavne, but having button in object mode for this might make whole process bit faster with optional keybind even. If going back and forth of fully smoothed and weighed for comparing results along the way (depending what you are doing if auto update would be more usefull in certain situations).

p.s. for others who are less familiar with weighting normals, it is also useful for normal maps baking to low poly (hardsurface) when can have less seams for shading and UVs to get more optimized and better results in certain cases. Can’t remember if this was mentioned in that polycount thread but just wanted to inform it here as well.

Actually, it is unnecessary to change the vertex weights in this scenario. You simply select the faces that you want to be ignored, and assign weak influence to them. If you prefer, instead, to identify which faces are not to be ignored then you would need to first assign weak influence to all faces then assign strong influence to the ones you want to “soften”. I may add “medium” influence as the default, allowing users to follow either workflow without requiring additional steps.

The advantage to Y.A.V.N.E. in this case is that it calculates split normals from state stored in the mesh. Therefore, you can make changes and update the shading as needed. Masked Smooth Normals, as far as I can tell, simply writes directly to the custom split normals data, which makes its operations more destructive.

Since vertex weighting and face influence are independent from each other, I’d prefer to keep the operations separate.

That’s certainly doable. By default, each face would have a weight of 1.0, and users would assign lesser or greater weight. This could affect all face influence types, not just face area and combined.

I agree.

Do you mean aligning all vertex normals of a face to the direction of the face normal or the ability to rotate all vertex normals of a face simultaneously?

Sorry, I don’t understand what you mean. If you want to quickly compare Blender’s smoothing vs. the Y.A.V.N.E. result, toggle the “Auto Smooth” button in the “Object Data” tab of the “Properties” editor.

Yep, it can be used to mitigate gradients that don’t compress well.

Setting all the faces Influence to weak at first and after that going over to faces that want to have strong influence seemed to do trick, should have though that my self earlier and/or read manual more :slight_smile: This will work quite well now, thanks again! Having medium influence as default might be useful, but in this case would have to set everything to weak and then use strong influence for selected group of faces anyway.

What I meant by this is when using “Vertex Normal Weight” as “Face Area” mode it would minimize influence of neighbouring unselected faces weight automatically (when imaginary checkbox would be enabled), but doing the thing what mentioned at very first sentence seem to do trick quite well and this would not be needed anymore.

That sounds good! Having that option could come handy in some cases.

Ability to rotate manually selected vertex normals, having both numerical input values that can be typed as well some kinda gizmo would come handy. Like blend4web has: rough quick tweaking with gizmo and futher more accurate numerical values by typing.

Yeah think I wrote this kinda in haste but in short… Having a button in object mode that would function as what does Weighted Normals [addon] do in similiar way. For yavne this would mean something like this kinda of operation:
-Going in edit mode
-Select all faces
-“Vertex Normal Weight” all faces by “face area” with Strong influence
-Back to object mode.

Toggling auto smooth on and off would work as well but in this case when using modifiers like bevel, just toggling auto smooth would not work. To be able to preview need to first apply every modifier and then repeat that process in y.a.v.n.e [addon] everytime.

Though if only would have modifier in blender that would have similiar functions to Y.A.V.N.E.[addon] that can automatically Weight Vertex Normals using “Face Area” mode interactively, while being at bottom of modifier stack and see results after bevel and other modifiers. If Blender would have anything similiar to this then could notice possible bigger problems early in shading and fix those to geometry, before applying any modifiers and progressing to weighting normals manually.

This would come rather handy in something like Hardops[addon]. Currently hardops uses sharp smoothing on edges what are beveled with modifier, so can avoid some shading artifacts but causes visible seams on smoothing. When observing at close or just being big beveled form without too many of segments.

few wip examples:

-Selected objects using bevel modifier and sharp shading on beveled edges to avoid any auto smoothing errors but this causes hard seams near edge smoothing itself.

-Beveled edges shading were smoothed using Shading/UV panel edges->smooth and now smoothing causing visible shading artifacts on the surface. Weighting normals does not help yet, untill have applied all the modifiers.

-To fix this need to apply bevel modifier, select all the faces and use Y.A.V.N.E.[addon] to Weight Vertex Normals using Face Area for weighting to get initial preview. Now we can have correct smoothing and no more hard seams on shading, but after this part it is possible to encounter problematic areas that may reguire going back before have applied any modifiers and edit geometry.

Yeah, struggled with that problem (wrong shading on beveled edges with hard edges). In maya it works like a charm, but maya has interesting shading overall. And I cant quite understand is it bevel glitches or just shading method in blender - some flat surfaces showing you weird shading. BTW have anyone tried to bake normals from shadingmanipulated object onto a low poly? I got problematic gradients all over the place, thats not the problem if I got just high poly sub-d model (and low poly is controlled with hard edges and splitted UV’s of course)

Yeah, that would be amazing. Too bad Blender’s Python API doesn’t allow for the creation of modifiers.

Blender weights vertex normals by corner angle whereas Maya, if I’m not mistaken, uses face area. On top of that, the incredible viewport in Maya renders shading well.

Have you tried using xNormal? Maybe it’s an issue with Blender’s bake tools.

Version 1.3.0 released.

  • Added “Merge” feature
  • Added “Medium” face influence type

NOTE: If you want to convert a model that was edited with the old face influence types, perform the following steps:

  1. Select “Strong” faces.
  2. Assign “Weak” influence to selected faces.
1 Like

I just tried to bake some normals to low poly from weighted “high poly” (using bevels instead of subd), seems Blender Render handles baking from that ok but Cycles bakes like there is no weighting at all on high poly. Have to try this bake with Substance Designer at some point, which I use for baking stuff mainly.

And great, new version of addon! Gotta put in use later on.

Weighted vertex normals are often used in conjunction with floating decal geometry for game asset creation. I want to post a brief overview of the technique for anyone interested. See this link for more detailed information on the practice:

Let’s say we have a mesh called Surface with a UV layout named Base.

Assume that it is not practical for Surface to have its own unique normal map due to memory limitations. Therefore, we need to add detail with floating decals.

Here is the floating decals mesh with one UV layout named Decals. Notice that the detail maps are generic; they are not specific to this particular mesh. The following image shows the floating decals mesh with detail maps to better convey the geometry’s purpose. However, a material does not have to be present on the object at this point.

Add another UV layout named Base to the floating decals. Project this UV layout onto the corresponding one of Surface by adding Blender’s Data Transfer modifier. Use another Data Transfer modifier to project shading from Surface to the decals so as to improve the blending between floating geometry and underlying surface. Both modifiers should use the “show in Edit mode” option in order to visualize results in real time.

Smooth shading is required for any object that uses Blender’s Data Transfer modifier to project interpolated data. Such objects–in our case the floating decals–must also disable Auto Smooth within the object data tab of the properties panel, as this option interferes with the modifier.

(Continued in next post)