Page MenuHome

Weighted Normal modifier inconsistent with Auto Smooth.
Closed, InvalidPublicKNOWN ISSUE


Blender Version
Broken: blender-2.81-95f020c853d6
Worked: (optional)

Short description of error
When Keep Sharp option on the modifier is not set, the modifier smooths normals so long as the Auto Smooth option is set on the mesh. When Keep Sharp is enabled, the modifier would treat all edges as sharp unless you explicitly set faces to smooth shading, regardless of the Auto Smooth angle setting.

Exact steps for others to reproduce the error

  1. Create a new scene, remove default objects, add a Cone.
  2. Add a Weighted Normal modifier to the cone, and set mode to Corner Angle.
  3. Note that the cone is still shaded flat, and modifier reminds to enable Auto Smooth.
  4. Enable Auto Smooth, leave angle setting at 30.
  5. The cone would now be smooth-shaded overall.
  6. On the modifier, enable Keep Sharp.
  7. The cone would now be flat-shaded overall.
  8. Right click the cone and Shade Smooth.
  9. Now the cone appears smooth shaded with a sharp edge at the base.

This behavior is inconsistent, and defeats the purpose of the modifier. If (5) is the correct behavior, and the modifier smooths the normals regardless of face smooth/flat setting, then in (7) one should get a sharp edge between two smooth areas. There's no point in a non-destructive modifier if it relies on manual destructive editing (i.e. explicitly setting face shading). Ideally, one should be able to keep the edit mesh shaded flat and rely on edge sharp setting, Auto Smooth, and Weighted Normal modifier for smoothing shading.

Event Timeline

I'm not sure what should happen.
@Rohan Rathi (RohanRathi), if I'm not mistaken, did you implement this modifier?
What do you think?

Sybren A. Stüvel (sybren) claimed this task.

I don't consider this a bug. When the mesh is flat-shaded, ever edge is 'sharp', so selecting 'keep sharp' keeps all of them sharp and results in flat shading. Note that if you change the Auto Smooth angle to 9° the mesh is flat-shaded again. This means that with a smooth mesh, you have non-destructive control over which edges are sharp and which edges are smooth.

Excuse me? If the mesh is flat-shaded, how come in (5) it becomes smooth-shaded? Please examine the steps carefully: I'm not setting Shade Smooth until step (8). So, by your own logic, (5) should not be happening, i.e. it's incorrect. But if it is correct, then (7) is wrong.

In other words, if Auto-Smooth setting alone can (and does) make the modifier ignore the explicit setting of Shade Smooth, then it should do so consistently with Auto-Smooth (respect Auto-Smooth sharp edges, not default sharp edges).

Simply enabling Auto-Smooth on a flat-shaded mesh has no effect, one needs to actually shade some (or all) faces smooth. On the other hand, simply enabling Auto-Smooth with the modifier added, mesh becomes smooth-shaded. Like the title of this report says: there's an inconsistency here.

Sybren A. Stüvel (sybren) changed the subtype of this task from "Report" to "Known Issue".Jan 20 2020, 2:52 PM

It may be a bit inconsistent/confusing indeed. The Auto-Smooth checkbox also enables custom split normals from being handled, so it already has multiple purposes with one label, so there are already slightly confusing things going on. Of course this should be improved upon, but that doesn't necessarily make this a bug in Blender.

Doesn't it? Directly from the docs:

Edges where an angle between the faces is smaller than specified in the Angle button will be smoothed, when shading of these parts of the mesh is set to smooth.

If that's true, then we're back to the report, where (5) becomes incorrect behavior. But, if it were to be made "correct" behavior, then (7) needs modifying to not require explicit setting of smooth shading, as the modifier already wants to do that; as well as modifying the aforementioned documentation to include such a case.

Strictly speaking, the manual only states what happens to parts of the mesh that are set to smooth. It's like "smooth polygons ⇒ auto-smooth is active", which means the behaviour is undefined for flat polygons. This in itself is already not so nice.

This modifier was written during the GSoC 2017 by @Rohan Rathi (RohanRathi); @Howard Trickey (howardt) and @Bastien Montagne (mont29) were the mentors. Guys, can you shed some light on this? It feels like the modifier is under-documented. The 2.80 release notes don't even mention that the modifier requires Auto Smooth to be enabled, and they also don't mention anything about smooth/flat shading. As you can see above, the manual is also a bit incomplete in this regard. Also the user documentation written by @Rohan Rathi (RohanRathi) don't mention anything about this.

If the conclusion is that faces need to be smooth shaded for this modifier to work, I'd be fine with that. That would require some addition to the manual, though, so that this is explicit.

Sybren A. Stüvel (sybren) renamed this task from Wieghted Normal modifier inconsistent with Auto Smooth. to Weighted Normal modifier inconsistent with Auto Smooth..Jan 21 2020, 10:39 AM

Custom normals (clnors) superseed autosmooth basic shading logic, but are only active when autosmooth is on.

So ALL clnors operations (modifiers, but also actual clnor data layer on the mesh) require autosmooth to be on, otherwise they are always inactive. And clnors logic (either a defined data layer of normals, or one generated on the fly by one of the modifiers) take over the basic autosmooth logic (even though they may still use the angle value, and/or the flat/smooth flags of the faces, depending on their settings).

Weighted normal modifier behavior is indeed as expected, by default it behaves like the 'full smooth' shading ( a single same normal to all face corners sharing a same vertex), but with different weighting algorithms than Blender's default smooth shading. It will only take into account sharp edges/faces and autosmooth angle when Keep Sharp is enabled.

Also, docs can always be extended and made more clear, but please do not use this site as a debating/explaining place for features. This is a bug tracker, user support is to be handled elsewhere.

This is not a debate, this is getting to the bottom of whether there's actually an issue. Bugs aren't a matter of personal opinion after all. Now that things are more clear, it would appear that the actual issue, for the time being at least, is lack of documentation.

I will add that, at user request, the tools that require autosmooth to be on now enable it for the user if it is not already enabled. But it wasn't possible to do with modifiers because there was no way that I could see, with current code to have a modifier affect the Mesh's autosmooth flag. It would be possible to change the BMesh <-> Mesh interconversion code to make that possible, but that was not something I felt like doing at the time. Since the whole autosmooth usability right now is confusing, there is a modeling task T68893 to improve this, and hence it is probably not the right thing to do to make the change I just mentioned until that task has been resolved.

Tried to clarify a bit things in doc in rBM6103