Adaptive Subsurf For Hard-Surface Modeling

I’ve been playing around with using the new adaptive subsurf feature in cycles for hard-surface modeling. Below are two renders of the same model, the first uses regular subsurf (level 2 on most parts) with a bevel modifier and holding edges for hard edges, the second uses adaptive subsurf with edge creases for hard edges (I still needed a few holding edges to get good creasing, but why less than I would have needed otherwise). Dicing rate varies from part to part, most parts are around 3px.

Regular Subsurf



Time: 00:12.45
Mem: 197.04M

Adaptive Subsurf



Time: 00:12.90
Mem: 108.92M

As you can see, the adaptive subsurf model took a little more time and was a little noisier (does anyone know what causes the extra noise?), but it rendered using almost half as much memory. The file size is also a little smaller because you need a lot fewer holding edges.
I would definitely recommend using a dicing rate higher than 1 because otherwise it uses up a lot more memory (as a general rule, use as large of a dicing rate as you can with it still looking good).

I think this is probably the method I’ll use in the future, the memory increase is huge, you get a smoother surface and edge creases are much more manageable than holding edges. The big downside is that you can’t see exactly what the model will look like without going into render-view mode.

I’m curious to know if anyone else has used adaptive subsurf for hard-surface modeling.

Nice tests! I wonder if the extra noise is just from the tiny tesselations with a >1 dicing rate. Don’t know since I’m just learning about this too. It’s certainly powerful and good to see the memory boost possibilities.

i was thinking that someone acctualy got idea from zbrush and used… alphas/greyscale for modeling… details etc… but well xD I expected to much xD

well if u got less memory on adaptive model… and u don’t use it for alpha details/displacment… than you are modeling wrongly.

That sounds pretty cool! Do you have any links explaining how that works in zBrush? I’d love to give that a try :wink:

I’m not quite sure what you mean, how is it modeling wrongly to save memory?

The reason it saves memory is because Cycles is doing the work instead of Blender doing the work and handing off the dense subdivided mesh to Cycles (if I understand it correctly, Cycles never actually stores a subdivided version, it computes it on the fly as it’s rendering).

Take a look at these two renders of the exact same torus:

Regular Subsurf (level 2):



Time: 00:9.42
Mem:9.00M

Adaptive Subsurf (dicing rate 6):


Time: 00:10.94
Mem: 6.83M

As you can see, the adaptive subsurf takes less memory than the regular subsurf in that example. Sure, I could have moved the camera closer and it would have been the other way around, but this is a pretty simple model (only ~2000 faces), if it was a more complex model with lots of holding edges, adaptive subsurf would take way less memory than regular subsurf.

Some other things that you can do with adaptive displacement


That’s pretty cool! The procedural modeling possibilities are endless. I’d be cool to see some procedural rocks made using microdisplacement :slight_smile:

Here are some more tests that I did:

Adaptive Subsurf (dicing rate 3):



Time: 04:24.94
Mem: 166.27M

Regular Subsurf (level 2):



Time: 04:03.15
Mem: 424.10M

The overall trend seems to be that adaptive subsurf takes less memory but a little more time (I’d like to try it out on a larger scene to get a better feel for how much more time it takes).