Subdivision modifier after array and simple deform - getting unwanted edges


I have a simple object which I am repeating in an array. Then I am applying a subdivision surface modifier at the end of that stack. I would have thought that the array modifier would have merged points where there is some overlap (like the mirror modifier) and so that if I applied the subdivision modifier after that it would be smooth. But instead I am getting the subdivision effect applied to where the individual segments of the model are repeated in the array. Does anyone know how to get around that? Or do I have to apply the array and merge verticies to make it work?

Here is what I mean: (you can see that I have temporarily added some supporting geo to make these indented ridges less of an issue, but eventually that will not work because there will always be some rounding).



Here is the same model with the subdivision modifier turned off…

The array modifier will not merge unless merge is turned on (merge first and last is a bit buggy though)

Here is my try (couldn’t get first last to merge though)


Array.blend (308 KB)

What you can do is apply the array modifier and fix the first/last problem to see that everything will still work for you, then Ctrl-Z back to the original state you are in now so you can continue working until you’re ready to permanently apply the array.

just a suggestion.

Hello again BVZ2000, im impressed with the resoult you got! good job.

First last on the array modifier works just fine. It’s for merging first and last duplicate of the array, the modifier doesn’t know about later modifiers in the stack or how they affect the geometry since the modifier order is from top down.

Array_ja12.blend (368 KB)

as i also pointed out in the video, that does work if you use the Object Offset, but it does not work when using the Simple Deformation Modifier (bend)

Thanks for the sample, that helps a fair bit.

That sounds like a good idea, if I can’t get it to work any other way I will give that a shot. Thanks.

Wow. That was bloody brilliant. Thanks again. You really have a knack of explaining these things in a way that is completely accessible and understandable. I really appreciate it. Not to mention the time you take to make these videos. Have you considered doing tutorials? (Or maybe you already have? Your youtube playlist doesn’t show up even the videos you have made for me.)

It also explains why I had so much difficulty with the tire before that. It was similar to the funky shape in your video and so when I tried to do relative offsets it had similar gaps. I solved that by rebuilding the mesh so that it had flat edges, but it looks like I could have just used the constant offset instead.

I will post back here (and on the other thread) my progress once I have a few days to play with it. Couldn’t have gotten this far without your help.

Thanks. That makes sense now that I think about it. Things like this help me to wrap my head around the whole modeling workflow. Thanks.

Ok, one other thing that I was doing wrong (though it wasn’t visible in the screen grabs) is that the object I was trying to use the array on had solid faces… Kind of hard to explain, but I can show a simple example.

I am showing this here in case anyone else comes along and does the same thing I did and gets stuck.

First this is how I used to have it in my scene (which is wrong and was part of what was causing the issues):

I am going to make an array of cube objects.

Here you can see that the cube is a complete cube (all 6 faces are still there)

Then I add the array modifier:

But note that this is going to cause problems. Since the faces that are “between” the elements of the array are still there, the edges that are currently touching the adjacent array elements are not actually the borders of the object. Since this object that is being turned into an array has no real borders, the subdivision modifier will soften the the entire object. It will look like this:

Clearly this is wrong.

In my next post I will break it down so that it hopefully makes sense why this happens.

The reason this is happening is because the subdivision modifier will smooth all surfaces that are connected to other surfaces, but will not smooth any surfaces that are the edges of an object.

For example, if we remove two of the faces of the cube so that it looks like this:

You will see that the edges along the “holes” in the cube are actually really the edges of the model. I.e. there are no faces for the top, bottom, or sides to blend into when the subdivision surface modifier goes to work. So these edges will remain sharp even as the rest of the cube is subdivided.

See the subdivided cube here:

Notice that where the faces have adjacent faces to blend into, the shape is softened. But where the faces are missing, the softening does not occur. In other words, the edges that are shared are softened, the ones that only have a single face remain sharp. So instead of a ball, we get a cylinder. And when we turn on the array, we now get a visually solid object, and not the individually softened items that we had before.

And that was part of the problem that I was having with my original model. I had faces “in between” the array elements. More specifically, I didn’t have a hard edge on the object and that is why it was being softened down into the seams between array elements. Once I deleted those faces (to have edges that were not shared with more than once face) then the seams between objects disappeared.

no i dont do tutorials cause there are better tutorials out there. but i like helping individuals.

the attatchments in ur second-last post did not show up so i dont really know what ur talking about there, but as far as i know everything is fine now?
ur last post was basically just explaining how you made it work? or do you have any further questions?

Yeah, everything is working now.

Basically what I had done wrong before was that I didn’t delete the faces between the objects that were in the array. So when the subdivision modifier was applied it softened the edges between the arrays.

Thanks again!