Possible to force cylinder UV projection center? Undesired warping on 2.81

I reproduced the issue on a basic .blend for demonstration, just make a cylinder, delete the top+bottom, and do an object-aligned cylindrical projection. It ends up as-expected, with a UV grid tex evenly distributed around the cylinder. But then, take a quarter or a half of the cylinder, and subdivide it a few times, and do it again. Suddenly the projection is warped. This seems like it only happens on 2.81, when I tried on old 2.69 and 2.78 installs it worked as I expected it to.

I’m assuming that this happens because the “center” of the object may be determined by adding all positions + dividing by number of verts, which drags the center towards more high-density portions of the mesh. I don’t want the center to shift though, I want it to remain at the origin and keep the same uniform UV projection as before, without taking into account the denser portions of the mesh.

When testing on 2.69 and 2.78 I was able to do the same test and have the UV mapping stay at the origin as I expected it to. So is this just a change I have to find out a way to deal with in 2.81? Or is there a setting somewhere to control this now?

What texture coordinates are you using to map the image to the mesh? Can you show us a screenshot of your Shading workspace?

It’s working for me in 2.82:

Fresh .blend (downloaded 2.82 and re-made it in that to see if it still happened), it’s just using the UV that the projection generates + Eevee, I didn’t touch anything else. Swapped the file viewer here to show off the unwrap (Cylinder, Align to Object, Polar ZX, Radius 1, though those last 2 don’t seem to matter)

I can apparently upload .blends now so if it’s useful: cylinder.blend (873.4 KB)

Guess I wasn’t using enough verts. Yup, it looks like it’s taking the average position of the verts as the origin of the cylinder space rather than the origin of the object:

Which, yes, is irritating.

Actually getting cylindrical mapping coords isn’t that hard-- you’re doing atan2(pos.y, pos.x), pos.z. Rescaled to bounds. That assumes an origin at 0,0,0; to do it about a different origin, subtract the origin from pos (ie, move it so that the origin is at 0,0,0.)

You can script that, if you feel like it; you can do it in nodes instead of using UV, if you feel like it.

If you really need it as UV and don’t want to script, like for an export, I guess you could data transfer nearest face interpolated from an even cylinder without any caps.

Yeah, if it becomes an issue I run into enough I could write up a script for it, but in the meantime I ended up figuring out a workaround after making this thread (make+apply mirror mod X+Y without merging verts to create 3 duplicates, which results in an even vertex distribution around center + forces the correct center, then delete the dupes after the project) which is fine enough to get me moving right now.

It just seemed like a strange change from something that worked in previous versions, and I felt like I must be missing something that’d give me the old pre-2.8 functionality.