Morph by proximity?

In Lightwave it is possible to trigger a morph by proximity to an item (usually a null). This was at a POINT level, not an object level, so you could have a portion of an Object go into it’s morphed state, based on it’s distance to an item.

EG: you could have a portion of a map elevate itself as a null/Empty flew over it.

How is the equivalent effect accomplished in Blender?

It’s not easy. You need to use some proxy techniques.

  1. Duplicate your shapekeyed object. Using a surface deform modifier, bind the duplicate to the original. Make the original non-rendering.

  2. Give the duplicate a vertex group (“prox”), assign all verts to it, then create a vertex weight proximity modifier, above/before the surface deform. Set up the vertex weight proximity modifier to affect prox, and to get proximity from whatever.

  3. Set “prox” as a vertex group used by your surface deform modifier. Your duplicate will echo the shapekeys set by your original, but only for verts that are close to whatever (or far, depending on how you set up the vertex weight proximity modifier.)

1 Like

Thanks, I’ll give that a whirl.

BUT: Is there a way to drive the morph directly from the Weight Map? At individual point level, that is?

You can limit shapekeys by vertex group, but the modifiers aren’t calculated until after shapekeys are evaluated, so you won’t get live vertex weight proximity effects.

Ahh, so this is like the Deformation Evaluation Order situation in LW.

In LW, iirc, there was eventually a way to re-order the deformation stack. Anything similar in Blender?

You can reorder your stack of deformation modifiers just by reordering the modifier stack. Not shapekeys though. In a way, the technique I described is just a method of moving shapekeys to the modifier stack, via the surface deform, so that you can reorder it.

Like I said, it’s not as easy as it could be.

Roger that. I’m still struggling thru (will run out of time soon), so another question: in your step #1, that’s a LINKED duplicate, right? Not just a copy.

Thanks for your help in this. Still wrapping my head around the process.

You can achieve this with Animation Nodes or Sverchok.

I actually made a morphing modifier long time ago, but it was never accepted into Blender’s main. The morph modifier basically was just a modifier that could be put in any order in the stack and accepted weight maps. That way you could run the Vertex Weight Promity first then use this modifier underneath. Unfortunately it is not in the current builds.

It is possible to use it to patch Blender and you will have the morph in the actual stack.

The patch

Doesn’t matter whether it’s a linked duplicate or not.

Here’s a demo, with a bit of animation: proxSK.blend (169.6 KB)

It’ll shapekey based on proximity to the little cube.

1 Like

Fantastic. Thanks!

I’m running into a problem with my Target object, “Target has edges with more than 2 polygons”.

Is there a way to SELECT such edges? “Select By Trait”??


SpinnerMorpher_210111a_3.blend (1.1 MB)

Ahh, at least I’ve located the issue, it’s at the corners of the ‘fingers’, where 4 polys intersect on the diagnol. So, I’ve located the problem, I’m not so sure if I can fix it w/o rebuilding the object.

It’s because you have edges with more than two polygons :slight_smile:

Enter edit on the mesh, vertex or edge mode, and use “select non manifold operation”. (You can uncheck “boundary” in operator box because that condition doesn’t matter too much.) See everything that gets selected? All of that is bad geometry, and it’s going to bite you over and over again. (In particular, here, it makes it impossible to surface deform. But it’s bad in so, so many other ways too.)

One of the qualities that makes a mesh “manifold” is that each edge connects two and only two faces. If you look at the edges that get selected, they’re getting selected because they’re shared edges-- they actually connect four different faces. This is basically going to screw up anything you ever want to do with the mesh (including, render it with smooth normals or subdivide it.)

Right, I got there by when I posted “I’ve located the issue”. I’m out of time, but I think the way forward is to reduce the object to 1/12 of its repeated section, and re-extrude the ‘fingers’ with EXTRUDE INDIVIDUAL – there might have been a way to “rip” the fingers apart (a command I’ve yet to use), but with this particular, peculiar object re-extruding is probably easier and opens the door for some interesting animation down the road.

Then circular array it back.

Thanks for the help, I’ll let you know how it goes.

Bandages, so I’ve been trying to replicate your effect, which is exactly what I want, thanks, BUT haven’t yet succeeded.

So, I reloaded your blend above to see if I missed anything, it still works… until I Unbind and attempt to RE-Bind the Target object: that is, all I’m doing is toggling the Bind button. After I toggle it once (off>on), the effect no longer executes.

Are you seeing the same thing?

Why are you unbinding and rebinding?

Whenever you bind, you have to be very careful about the position & deformation of both the target and the modified mesh. For what you’re doing here, you want them to both be in the same world space orientation and you want them to both have the same shape. Once you’ve bound them, you can move them (in object mode) if you want-- the surface deform modifier is designed to compensate for object-level transformation, after the bind.

To examine the effect and how the controls work.

EDIT: but in this case, I didn’t move ANYTHING. The morpher was distorted by the previous animation though.

Right. If they’re bound while in different shapes, you will get different behavior from the surface deform. It binds them to their current shapes.

Is there some threshold distance beyond which binding does not apply at all? I’m not surprised this didn’t ‘work’, but I’m a little surprised there was no visible change at_all.

No, but it is possible to get bad binds that don’t work great (generally from doubled verts, other bad geo), and the further a bound vertex is from any targeted faces, the more of those faces’ deformation will affect it-- the effects of the suface deform gets more and more diffuse as it is bound further and further from the target.

Just enter edit on the bound mesh and see what happens when you move verts, faces, everything around.

I’m sure that was almost as painful for you as it was for me – driving nails of knowledge into solid wood is difficult Thanks!

I did find one thing that’s annoying: as the morph happens, the vertices within the influence of the trigger object can actually morph thru and OUT of the influence sphere, and so stop morphing. Annoying. Probably a different shaped trigger would address this: this one is essentially a point, but a cylinder might be the ticket. Guess that will be my next experiment.

Thanks for all the help! Here’s the concept done:
SpinnerMorpher_210113a_SingleWedge1.blend (4.0 MB)

They’re not morphing through the prox. But remember the modifier order: they’re getting proximity, then they’re deforming. In other words, the proximity is from the undeformed shape. (You can get proximity to a different shape by data transferring weights from something else with a prox mod…)

1 Like