Subdivide POP behaviour not consistent with SOP

The subdivide POP doesn’t seem to work the same way as the SOP and actually seems to just be broken. I can’t really get anything useful out of it.

The SOP appears to do a standard catmull-clark subdivision where on the first subdivision quads are quartered and triangles are split into thirds and converted to quads.

The POP doesn’t seem to be doing that…in fact it only seems to be generating mangled geometry in my simple test cases. It also only outputs triangles whereas the SOP will give you quads. I’d expect it to output quads with a toggle parameter to output triangles.

Here’s the comparison images of subdividing some shapes. One is the SOP, one the POP and one is my own script implementation in POPs. The crease weight is turned up in these examples and just breaks in the POP.


Another thing is Crease weight 0 doesn’t keep the edges sharp like in the SOP. It rounds things off.

Thanks,
Rich

Hi @Ennui

could you let us know what build you are seeing this in?

cheers
Markus

Hi @Ennui,

Currently the Subdivide POP is quite different and simpler than the SOP.
It only performs “loop” subdivision on triangles (Loop subdivision surface - Wikipedia), not catmull clark, so quads get triangulated first.

Otherwise it currently expects manifold geometry and it will fail with mangled geometry when that’s not the case - for example two triangles connected by a single point will fail.

Crease seems to behave the same as the SOP with a closed input, like a Box, so 1 is sharp, indeed the result is a bit funky with a Grid POP, we’ll look into that.

Otherwise Catmull Clark subdivision is on our list.

Do you mind sharing your first geo as another test case?
Thank you!

Confirming there was a bug here that has now been fixed, fix will be in the next release.

Hi Vincent,

I was just using a circle POP set to 3 points, attached a tox. Thanks for the fix!
base_triangle.tox (734 Bytes)

Thank you!
Confirming I’m seeing what’s expected with the bug fix, still different from the SOP though.

If you’re projection mapping the SOP would still be the way to go as triangles UV’s will crease and don’t play nice compared to just having nice interpolation on quads. I guess my post was half bug and half RFE here.

I am not totally sure what you mean, quads always get turned into triangles for rendering, since Vulkan I believe (quads are an openGL primitive though they’re slow, but were removed in vulkan), which you can see setting a MAT to GPU Tesselated Wireframe.

I mean that when you interpolate the uvs on a quad surface you don’t get creases like you do if you interpolate them on a triangle. Does that make sense? I’m not sure what the technical term for that is but you can calculate cleaner uvs if you do it on a quad by quad basis rather than treating each triangle individually. Eventually everything is a triangle but the interpolation is different between them.

After playing with subdivide SOP and POP a bit more I think I see what you mean.
Subdividing triangles with catmull clark (Subdivide SOP) adds some wobliness to the uvs indeed,
but it doesn’t seem to be happening with the subdivide POP and loop algorithm.

In any case you’ll be able to play with it more once the non buggy version is out, and we’ll eventually add catmull clark as well.

1 Like

Rather than my crap explanation here’s a tox to show the difference…my demo is in SOPs but the same applies to POPs.

This is obviously only really relevant for later but please bear this example in mind when doing the updates in the future.
base_subdivide_example.tox (9.5 KB)

Thanks for the example Richard, that fully clears things up. Indeed a limitation of POPs for now.