Best way to rig support bones for two intersections(knee, elbow)

Recently i saw a Maya adaptation of Tissue called Ziva Dynamics. Haven’t tested it yet tho. I don’t know if you aware of this, but there is a big update planned by Ton called “Animation 2020 Project”. I guess that’s the reason why Animation/Rigging got almost no attention in 2.8. Not much info yet but i found this:

Yes and i heard a lot of praises about Houdini how fast it evolved. I think we even use it for FX in house but its not part of the Animation Pipeline (which is as you can guess - Maya), So i never saw a reason to learn it yet. Maybe i should(after i mastered 2.8 :wink: ).

@Helmut: I was playing with your cast technique some more, trying to use it to create bony protuberances-- ribcages and such. Didn’t have much luck with the cast, but I ended up discovering a technique that you might appreciate.

You can pretty much replicate a cast with a dynamically bound mesh deform evaluated after an armature. There are a few advantages to the mesh deform. The biggest is that you can control the exact shape of your cast, rather than be limited to spheroids and cuboids. This can be great for things like a hip bone or scapula. It can also do the exact same kinds of things that your cast modifier technique can do, but with more control if you need it, because you can also weight your deformer if you want. It’s self-limiting and can be designed to be self-smoothing, without needing any vertex group assignments, and you can stack a huge number of deformations inside a single modifier instead of needing ten casts for a handful of muscles on a watertight body mesh.

I don’t know if you’ve already played around with this. If you haven’t, you should. There are a few tricks, but they’re understood relatively quickly with some play.

@bandages: yes, I know about mesh deform, it comes particularly handy when rigging characters made up of a bunch of separate meshes you can all include in a single cage, and it smooths out deformations nicely.
To my understanding however you can’t get skin slide effects by w/ mesh deform, instead mesh deform always “pulls” vertices around similar to bone-based deformation, so I didn’t try for that particular purpose yet. I’d be interested in your results however, do you maybe have a sample animation around?

@Helmut_S Yes, with a non-dynamic bind, that’s true. But with a dynamic bind, the mesh slides through the deformer before being deformed. Then, when it’s time to to deform the mesh, only vertices that exist inside the deformer (roughly, there’s a slight aura) are deformed, and they’re deformed in a manner that depends on their position inside that deformer at the time of the mesh deform evaluation.

If the deformer moves identically to the surface it’s deforming, nothing interesting happens. But if the deformer acts differently-- parented with 100% weights while the skin has smooth, interpolated weights-- the skin slides. Edit: I was wrong about being able to armature parent the mesh deformer. It needs to be parented bone relative.

I’ll see if I can make a quick vid to demo…

Hmm, not sure the best way to get animations playing here, or if it’s even possible… Gif works when downloaded though, 1.3mb.

So what you’re effectively saying is that it is possible to make MeshDeform behave like Lattice, except it can use an arbitrary shape instead of a simple orthogonal box?
That would be a major discovery, the modifier documentation doesn’t give any hint about this, would you mind to post a test file here? Couldn’t replicate the effect so far …

I’ve never used lattice, I thought it was just a deprecated, primitive mesh deform, but maybe I’ll need to play with it.

Here’s a demo file similar to the one you provided for the cast: http://pasteall.org/blend/index.php?id=51907

Deformer was bound at the given delta, with armature in rest pos, from the basis shapekey. Depending on how you edit the deformer, you can slide it out of effect with a bone control (possibly automated) so that you don’t have to model your deformed mesh special to compensate for the deformation. I didn’t bother here though.

Best to leave the margins of the mesh deformer unedited, so that you have smooth interpolation to undeformed at the margins.

I still have a lot of playing to do with it. Not sure how it determines what gets bound and what doesn’t, how local space transformations interact with edited transforms, etc.

2 Likes

Cool, many thanks, tested the setup, it works!

I think I’ve seen it work in my own testing before actually, but didn’t realize the usefulness of it.
The effect seems to be restricted to the area affected by the bind only, and is based on the cage’s influence just entering or dropping out of that area. Which means it works slightly different when compared to cast or shrinkwrap, both of them being able to displace everything in range (as long as influence isn’t restricted by a vertex group), will be interesting to try it in a more complex setup. I expect the binding process will require a bit of thinking here, cages will need to be placed such that all the desired influence area is included by it during bind time, probably this means they’ll have to be bound at locations different from those they’ll be placed at rig evaluation time in some cases.

Yep, will do more tests too.

If the docs don’t lie and I get it right it is all the vertices inside the cage, as it is ‘dynamic’ also respecting all deformation happening in the modifier stack before the mesh deform bind is reached.

Looks like it works fine to scale it up for the bind and then reset scale afterwards. If you want. You do often want different bind positions than pose positions. Marking bind positions with deltas makes sense, although maybe bone parents with copy world space transformations (from bind orientation to pose orientation) would make better markers for when I unthinkingly a, alt-g, alt-r, alt-s on everything in object mode.

You can avoid denting + sharp transitions by only editing one side of the deformer, like is vaguely demonstrated in that gif above, but not in the demo file. Verts passing through an edited face will jump or dent, depending on bind size, but verts passing through an unedited face will smooth out to no deformation as they exit the deformer. That does mean you don’t want to use a single deformer to try to deform at all orientations. Best is roughly motion along a single axis, within known limits.

Looks good for tendons too. Of course you need the vert count and/or topology to support it all.

The main problem I had with trying to implement this is, that’s not quite the case. Vertices outside of the cage get bound as well. This is probably related to bind precision, and maybe precision 9 binds would work okay, but precision 9 binds take my computer days to bind. (The best example of this problem is using a low precision bind to do a full-mesh deform, as with Blenrig, on a T-pose model: look what happens to the groin as the legs spread.)

But I’m writing again, after a long time, because I’ve come up with a solution to this problem.

What I’ve begun doing with my mesh deforms (usually even my non-dynamic mesh deforms, because it’s a convenient solution) is to create two shells. In addition to the basic mesh, I’m also now creating an outer mesh. Normals for both of these shells point outwards from the center of the shells-- it’s not a hollow mesh, it’s not for drawing, it’s for calculating. Then, I never, ever manipulate the outer shell from its bind position.

What this ends up doing is creating a smooth envelope around the mesh deform where any affected vertices interpolate from fully deformed (at the border of the inner mesh) to not-at-all-deformed (at the boundary of the outer mesh.)

For a non-dynamic bind, this isn’t strictly necessary, because you can use vertex groups to smoothly limit the effect of the mesh deform instead. But for a dynamic bind, you can’t use static vertex groups, because you don’t know where the deform is going to be active; and there aren’t good tools to create dynamic vertex groups to smoothly limit it. (A “volume” mode for vertex weight proximity modifier would let you create dynamic groups, just in case anyone is listening.)

Like I said, I’m even doing this for non-dynamic mesh deforms, because it’s easier than weight painting, and it doesn’t seem to create any slowdown beyond, possibly, a slightly slower bind.

But for dynamic mesh deforms, it’s totally essential, and these are now working well for me. You may still want to do some weight painting-- it’s easy for an arm to enter both the outer and inner area of a scapula deformer, for example. But the weight painting is often unnecessary, and can be very, very crude.

This innovation is enough for me to be using dynamic mesh deformers now. The main reason I prefer them vastly over the cast modifier solution is that I don’t have to model in anticipation of a cast modifier. Instead, I can model exactly how I want my model to look, and only later worry about how my mesh deformers should expand the mesh, and where. After all, if I don’t do anything to an armature modifying the mesh deformer, the mesh deformer won’t do anything. (And usually, what I’m doing is some combination of XZ scaling from volume conservation and Y axis translation.)

Thanks for providing more detail on this. I admit, I still don’t really get how you’re doing this, but I have to admit I didn’t invest any further research effort on it after I tried to recreate the example you posted above, which worked … kinda, but seemed somewhat cumbersome to set up to me if I remind it properly, because as you stated above …

Not sure how that will affect a more iterative sort of workflow where you might apply changes and rebinds incrementally … I expect it will mess up and make you (or better: me! :slight_smile: ) curse wildly very soon.

I’d love to see some character animation samples showing the deformation you’re able to get out of that magic though.

Btw, in case you’re interested, I posted a sample animation making use of a combination of several techniques I’ve been playing around for a while now: shrinkwrap, cast, smooth & displace driven by vertex proximity (nude female model, so NSFW): NSFW (artistic nudity): female character/rig test, mocap ballet dance

That’s a great anim!

You were kind enough to give me a demo file, least I could do is to return the favor :slight_smile:

mddemo.blend (544.8 KB)

That’s about as simple as it gets; it’s plenty tunable though.

With the shell to control interpolation, now I just scale it up, object mode, x100 for the bind, then reset scale after the bind. That gets everything in the bind, and I don’t have to worry about distant stuff picking up nasty deformations.

You can see here I’m using a vertex group too, assigned very clumsily, just to keep it from affecting the forearm.

1 Like

Thanks so much for the sample! Stuck in a lot of other stuff at the moment (3D is such an overwhelmingly complex and diverse matter …) so I didn’t have the time (again) to go deeper, but it does look very promising indeed!

In case you happen to have some rendered sample animations around showcasing the trick’s qualities in a more complex setup I’d still be very interested to have a look. :slight_smile: