2
$\begingroup$

I'm using Bevel Weights to control which edges I want beveled on my furniture models. To keep the workflow non-destructive, I’m using a Bevel Modifier on top of my object. The object contains multiple mesh parts (like wooden panels), and this approach allows me to selectively bevel edges for a clean, polished look. So far, it works well and the mesh topology consists of clean quads — subdivision is currently disabled at this stage.

enter image description here

However, when I enable Subdivision to get smoother, rounder edges, some weird shading artifacts start to appear, even though the mesh remains well-formed with clean quads and no overlapping geometry:

enter image description here

Here's the UV map which looks well-formed:

enter image description here

Here’s how the mesh looks after applying both the Bevel and Subdivision modifiers — as you can see, the geometry is fine with the Texture Coordinate node using UV:

enter image description here

Interestingly, when I manually add supporting loop cuts, the result looks much better and the artifacts somewhat disappear?

enter image description here

Well I can still see some small artifacts but not as clear so I think adding supporting loop cuts are not really the correct solution? Why is that? Is adding supporting loops the correct approach here, or is there something else I might be overlooking?

Here's the blend without the texture since it's not really necessary I think:

UPDATE:

Ah I noticed that the bevel is not a problem. It happens even with just subdivision:

enter image description here

Even if the mesh is clean quad topology on a rectangular plane and with proper supporting loop cuts:

enter image description here

$\endgroup$
1
  • $\begingroup$ To round and smooth the edges more increase, in the Bevel modif's settings, the number of segments as 3 is not enough. Try 5 - 10. $\endgroup$ Commented Jun 15 at 11:59

1 Answer 1

1
$\begingroup$

Interpolating the UVs from the original mesh to a subsurface smooth version is generally a tough problem. It's especially difficult to get a good result when the quads aren't all roughly equal-sized squares, as is the case here where you have a lot of very tiny, thin rectangles from the subdivided bevels. And it's also quite difficult to get good results when there are two layers of UV interpolation going on: the Bevel modifier needs to interpolate UVs along the bevel because the beveled edges have less area than the pre-beveled corner; and then the subsurface modifier needs to re-interpolate the UVs as well since the area and shape of the faces has changed.

You can get a much better result by changing your bevel to Segments=2 and Profile -> Shape=1.0. This will effectively add support edge loops to the faces without actually rounding the edge. This avoids one layer of UV interpolation (because Shape=1.0) and reduces the number of teeny tiny faces (because Segments=2 instead of 3). You can also switch the Subdivision -> Advanced -> UV Smooth to "All" which may be an improvement over the "Keep Boundaries" default.

Here's the before and after for these changes for a similar model to yours. (Note I did a bad Smart UV unwrapping job here, so ignore the seam along the curve of the pipe.)

enter image description here enter image description here

Still not perfect, but I think it's a huge improvement, especially for those areas not close to the bevel. You have less control over the bevel shape this way, but you can at least fiddle with the "Offset" and maybe some "Shape" values close to but not exactly 1.0 to see if you can get a good final result.

If that's not good enough, you can use a Data Transfer modifier to interpolate the UVs of the final Bevel+SS geometry from the original geometry. To do this, you'll need to make a copy of the geometry (a linked Alt-D duplicate is good enough). Remove all the modifiers from this copy, make sure it has a very nice UV unwrapping with explicit seams along the edges, and then add a data transfer modifier to the subdivided version from this copy. "Projected Face Interpolated" is a good Mapping choice. If you get some faces that appear to have really compressed texture, it may be that the corners of the face are interpolating UVs from faces from different mesh islands. Adjusting the "Islands Precision" setting or trying to remove the offending seam and re-UVing may help. Note that it is the UV mapping of the linked, modifier-free copy that will matter now, so you should do any UV unwrapping on that. The UVMap mapping on the SS version is completely overwritten by the Data Transfer modifier and will have no effect.

enter image description here

Here are my results applied to the original Segments=3, Shape=0.5 bevel, and it already looks very good.

enter image description here

If you go this route, it's a good idea to parent the modifier-free copy to the SS version, so it follows along when the latter is moved, and make sure you disable the copy in renders.

I've attached a Blend file with an example Data Transfer setup.

$\endgroup$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.