I don’t know if I ever posted a thread to discuss this in the past, but the curiosity has definitely been on my mind since forever. Currently Blender has two methods of preforming Subdivision Surface operations on meshes: The classic one is a fixed number of subdivisions, meaning twice more vertices are going to be added everywhere on the mesh. The newer one is adaptive subsurf which is unfortunately still just an experimental feature in Cycles, adding vertices based on the view distance and render resolution.
Both methods share a common problem although they distribute it in different ways: You need to add a lot of vertices to avoid sharp edges, but when you do everything becomes really slow! This is an unavoidable issue of 3D rendering for obvious reasons… however I believe there is a way to deal with it far more efficiently: Subdividing a mesh only in the parts where more detail is needed! It’s a very simple concept, yet to my surprise I’ve never seen any attempts to get such a thing implemented.
Imagine having a complex mesh with both smoother / rounder and sharper / squarer areas, like say the monkey head. When used with this feature, the subsurf modifier would have a maximum number of subdivisions but only apply them where necessary: In smooth areas like say the top of the monkey’s head, it might only apply 1 subdivision since that’s already smooth enough… in places like the ear tips where there’s more sharpness however, it could apply 2.
The algorithm would only need to detect how sharp an angle is between two connected faces, an ability already present in the Decimate modifier; If an edge is too sharp or a vertice is too pointy, only subdivide the faces neighboring that edge / vertice around that connection point. If a surface is flat enough, that part may not need to be subdivided in the first place… a series of planes (flat relative to each other) would never be touched for instance. Since the resulting distribution of vertices won’t be even, the faces connecting subdivided and untouched areas will need to be either triangulated or use n-gons… a small annoyance but decent price to pay for such a feature (especially when it’s a non-destructive modifier so the original mesh remains all quads).
Regarding the settings I’d have 3 options for this mode: Min angle, max angle, max subdivisions. So if you gave it: 10*, 50*, 3: Edges sharper than 10 degrees will be subdivided once, those sharper than 30 will be subdivided twice, those sharper than 50 would be subdivided three times.
The advantage? Artists could get away with far less vertices and wasting fewer seconds for the same visual gain! Subdivisions are only needed in round areas where you don’t want to see low-resolution ridges, if a surface connection is fully or almost flat there’s no need to subdivide there. Yet both classic and adaptive subsurf add vertices everywhere indiscriminately which is a big waste of resources.
The bevel modifier kind of already does what I’m thinking of, when used with the angle limit option. It is however meant for other purposes and will create edges where none are desired… also you can only give it a fixed number of segments, they don’t vary based on the sharpness of each zone. Perhaps some of its code can be reused to create a hybrid between it and the subsurf modifier?