0
$\begingroup$

How do I prevent subdivision surface from moving an empty?

Here is a cylinder, a vertex group has been assigned to the topmost vertices. A plane sits on top.

enter image description here

I have fixed an empty to this location using Copy Location Constraint and indicating the vertex group.

enter image description here

I fix the plane to the same location as the empty with Copy Location Constraint

enter image description here

I want to bend the cylinder with a deform modifier and have the plane stay in the same place. When I add Subdivision surface it adds geometry above the top of the topmost ring, and the empty moves down taking the plane with it. The cylinder clips thorugh the plane.

enter image description here

How do I prevent this from happening?

I can't move the origin of the cylinder, and I don't want to apply the Subsurf, I will duplicate this object many times and animate, so need to keep faces low. I have tried adding an extra ring close to the top of the cylinder but it still doesn't sit perfectly on the top of the cylinder.

Thank you.

$\endgroup$

1 Answer 1

2
$\begingroup$

When I add Subdivision surface it adds geometry above the top of the topmost ring, and the empty moves down taking the plane with it. The cylinder clips thorugh the plane. How do I prevent this from happening?

Two different problems.

To prevent it from adding geometry above the top with C-C subdivision, edge crease your top face:

enter image description here

Notice the edge crease value in the sidebar, as well as the edge crease overlay.

The reason the empty moves down will become more apparent once we apply the subdivision and look at our vertex group:

enter image description here

The subdivision surface created new verts in the middle of every face and between every existing set of vertices, interpolating vertex groups. The "top" group no longer includes only our top vertices, but some vertices below it; the constraint is using the weighted average of all points in this group to figure out what location to copy. Notice the selected vertex, and its weight in the sidebar.

If we want to change this dynamically, one way is to follow our subdivision with a vertex weight edit modifier using a custom curve:

enter image description here

Here, the subdivision modifier is still creating those vertices assigned to 0.5 top that are not actually at the top-- but then, our custom curve vertex weight edit is reassigning all vertices assigned to top at 0.6ish or less to 0, while leaving vertices assigned to top at 1.0 untouched. And our empty is now back at the top of the subdivided cylinder.

If we were to use more levels of subdivision, we might want to be careful. If we use two levels, then some verts will be created at weight 0.75. If we use three levels, some will be created at 0.875. We'll want to use a curve to exclude any levels of subdivision that we're going to use.

$\endgroup$
1
  • $\begingroup$ Amazing, thank you! I don't think I would have gotten there, and I learned a new modifier. Thanks for walking through it and not just saying add the modifier. I sort of had already worked out why it was doing it, but didn't know how to change the behaviour. $\endgroup$
    – Aubrey
    Oct 19, 2022 at 17:02

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .