2
$\begingroup$

When you add a Solidify modifier to edges that have no faces, it still tries to "solidify" the mesh, but it leaves a gap between them, refusing to fill in the space between with faces.

Is there a way to bridge these edge loops, without applying the solidify modifier?

Here's an image of what I mean. You can see the mesh, and the result of the modifier. I would like to bridge these edges without applying the modifier. enter image description here

$\endgroup$
4
  • $\begingroup$ Are you simply wanting to put faces between surrounding edges? You can select the vertices that surround where you want a face and press F for "fill" if you're in Blender 7.9 $\endgroup$
    – Susan
    Dec 2, 2021 at 21:23
  • 1
    $\begingroup$ In some cases you can do it the other way round, using Screw through 0 degrees to extrude plain edges to faces, before Solidifying.. but unlikely to suit. Can you give an example case? $\endgroup$
    – Robin Betts
    Dec 2, 2021 at 21:35
  • $\begingroup$ Added an image. $\endgroup$
    – Legoman
    Dec 2, 2021 at 21:56
  • 1
    $\begingroup$ I've always wondered how to take advantage of this weird quirk of the solidify modifier but it's really inconsistent so it's hard to say... you can try using a screw modifier set to angle 0 and really low screw value along Z before the solidify, and then at the end of the stack use a weld modifier and increase the value slightly until the solid collapses to faces i.stack.imgur.com/QqjPi.png $\endgroup$
    – Gorgious
    Dec 2, 2021 at 21:58

1 Answer 1

3
$\begingroup$

We can't do that with a solidify modifier. But, yes, we can do it, non-destructively, with modifiers, at least in 2.93.6. It is not the simplest thing in the world, but once done, we can just link modifiers from one object to another to copy it elsewhere.

The first thing we're going to need is a modifier that creates faces. There aren't a lot of those; let's use the screw modifier:

enter image description here

On those settings, that modifier duplicates the edges, moves the duplicates up 1 unit in local Z, and bridges the loops.

Unfortunately, even though it made faces, it didn't make them where we need them to be. We'll have to move the vertices it created. Unfortunately again, we can't easily distinguish the vertices it created from the vertices that were originally there, because a screw modifier doesn't let us assign generated verts to vertex groups like a solidify modifier does (one of my favorite recent modifier improvements!) But with a little use of geometry nodes, we can distinguish:

enter image description here

What's different between the two sets of edges? The z position. We'll store the z position (and everything else) as an attribute with a geometry nodes modifier. We can compare our old positions to new positions to see if we're the same afterwards, and then displace the original position of our new vertices-- only our new vertices-- in the direction of their normals:

enter image description here

This is bigger, so let's walk through what those nodes are doing. First, we're recreating our pre-screw position ("oldpos") from our x, y, and z attributes. Next, we're checking oldpos.z against position.z to see if they're different, and marking the differences with attribute "diff". Then, we're creating a normal from the old positions (our normals have been changed by our screw modifier), knowing that the normal of faceless vertices in Blender is just the normalized vector from the object origin. Then we're multiplying that normal by whether or not the vertices are "diff" or not, and adding that to their position.

On my first iteration of this, I was working with vertex groups to store positions, but was pleasantly surprised to see that Blender stored the attributes directly. Note that this is not a solution for 3.0, which dramatically changes how geometry nodes work. A solution in 3.0 may or may not be possible.

If we'd rather not just use oldpos to determine our normals-- like, if you don't trust me that that's how Blender calculates the normals-- then we can always store the old normals as attributes, similar to how we store the old position as attributes, and use that to displace instead.

This is just like solidifying a line, with offset 1 and thickness 1. If we want an offset of -1, we could multiply our displacement vector by -1; if we want a different thickness, we would multiply our displacement vector by that thickness. Offsets between -1 and 1 are a little more complicated-- we'll also need to adjust the position of verts that have not been changed by the screw modifier-- but it is possible.

$\endgroup$

You must log in to answer this question.

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