Surbsurf modifier: Compensate the gap introduced
Something that drive me nuts a lot in Blender. Especially when you are working with precision and want things perfectly aligned! The subsurf introduce a gap reducing the original size or radius of a mesh. Can we imagine blender take a measure from the original vertices and compensate this offset ?
10 Comments
Maybe you could add a checkbox in the modifier to indicate "keep the maximum size" or something similar. It would be very useful.
I'm sorry to tell you that this gap comes from the underlaying algorithm. This hasn't been developed by the blender developers but Edwin Catmull and Jim Clark. It is the industry standart when it comes to smoothly subdividing a Mesh and should not be changed. What you can actually do is using a cast modifier to compensat the imperfect circle.
@finnlheinemann: So we can't change a standard and do better thing ? I don't know how a cast modifier could help here... An other example:
You are measuring your unsubsurffed mesh from the farthest to the farthest point(peak to peak), but that doesn't represent your entire mesh. If you measure it not from the peaks, but from edge to edge, you'll get a lower diameter. It just happens that you have positioned a peak close to the floor. If you rotate your cylinder a little bit, you'll see that it will not touch the floor. You're just not comparing apples to apples.
@fabiocroldan: Yes there is an algorithm, which I referred to earlier, that works like your right example. But it has horrible issues when you take it to the third dimension, or when there are coplanar, or near coplanar points. You end up with very wavy surfaces, because when you get to multiple inset edge loops, it starts to cycle between extending beyond the cage surface and recessing into it. This algorithm is also very unpredictable because the undulation and shape vary depending how the cage mesh is traversed (ie what is my starting point).
In other words, you're replacing one type of offset with another.
One of the algorithms presented here offers automatic volume preservation, but preserving the volume doesn't necessarily keep any certain point to remain in the same place. I think the solution to this problem may be picking the exact point that you want to preserve a location of and having an autmotaic scaling of all faces along thier vertex normals until that vertex returns to its original location. This could cause issues as well, though.
I don't think this is mathematically possible. The offset varies depending on topology. You would need to tell blender which peak needs it's offset maintained.
In the image below, you can see that two shapes with the same subdiv settings have different offsets based on the topology. Sharper angles have a bigger offset. Longer distances between edgeloops cause bigger offsets. If both of these shapes were in the same mesh, which offset will the software use? There are algorithms for passing through cage mesh points, which would give you a predictable offset, but result in other issues that make them practically unusable.
@dpdpforlife: effectively it might not work in some case but maybe as said previously a setting in the modifier that you can enable in some other case...
Please remember that Blender is not a precision modeling tool. It doesn't have the numerical accuracy for that and if it did, you wouldn't be using mesh objects as your fundamental building blocks.