Subdivision surface in Blender 2.8 behave different compared to Maya and ZBrush

Hi people.

I was in the middle of a comparison and I found that Blender subdivide the mesh in a different way compared to other softwares, like ZBrush and Maya. It looks like blender is using a different algorithm (?)

Since at work I often go back and forth from other packages it would be cool if the subidivsion surface model was the same of the other software.

ps: in blender 2.79 it was correct.


The only project that I know of that would solve this problem is a OpenMeshEffects but it is in its a very early stage and is not ready for production.

I think they need to inplement subdiv as all the other software do.

subdivision surface is so a common and standard technique that it should give the same exact effect across multiple app, in this case Blender is the one that behave differently (considering the standard)

low poly mesh made in blender >
zbrush for detailing >
bake displacement >
aplly displacement to blender, bjt the result is different form the zbush one.

This is a huge problem if the production is not entirely blender based.

the old good 2.7x produced just fine results.
Of course I reported this as a bug, but they closed it as invalid, even this is a clear regression.


1 Like

I don’t know what subdivision algorithm Zbrush and maya use but I know blender uses opensubdiv

Maya should be using OpenSubDiv by default now as well in recent versions[1]. However, there is a note in their documentation about non-manifold meshes like Suzanne. Strange that it would still apply in this day and age[2].

[1] OpenSubdiv is the default subdivision method when you smooth a mesh using Mesh > Smooth or when you create a subdiv proxy.
[2] Maya automatically defaults to Maya Catmull-Clark for meshes that contain non-manifold components.

1 Like

Blender will indeed match other apps and renderers that use OpenSubdiv or similar subdivision surface algorithm.

Part of the reason Pixar released OpenSubdiv was to get a common standard across various application, and Blender is now following that. It may not match the specific apps and settings you tested, but it will match others.

Hi @brecht
thanks for the reply.

So it is something planned for the future?

I made a comparison with the 2 most used software in the industry (maya and zbrush), so since Blender is going in the “industry standard” direction and since blender 2.79 behavied just fine I was wondering why now is so different.
Here another example, as you can see the difference is huge in 2.8.

those are the default settings in maya (the ones I used for the comparison, that match with b2.79 and zbrush))

Blender always positions vertices on the limit surface, what you get when you would subdivide the surface an infinite number of times. I think this is closer to what you would get with adaptive subdivision in the Maya viewport and USD viewers, or adaptive subdivision in a renderer like Arnold or PRMan.

It means that your vertex position (and the displacement on it) stay the same regardless of the subdivision level, which by itself is generally a good thing if you intend to use adaptive subdivision and not bake a displacement map that is only valid for one particular subdivision level.

ZBrush may not be able to bake for that case, or maybe it’s a matter of tweaking settings, I’m not sure. We could consider supporting the subdivision where vertex positions change at every subdivision level, but this will not work for adaptive subdivision in Cycles or OpenSubdiv GPU acceleration.


From looking at this: it seems to be possible to evaluate control cage on GPU.
I think the “adaptive” word is a bit overloaded as it means different things in Cycles and in OSD docs.