1 child, multiple parents.
Would it be possible for 1 bone to share multiple parents? Thus, when you move the parent bones, the child bone would automatically move to the average of the transformations of the parents. That alone would be very beneficial I think. But to take the idea farther, could there be a way to alter the percentage of influence each parent has over the child. Say three parents influence a child, you could set 1 of them to 20%, one of them to 30%, and one of them to 50%. And the child alters its position accordingly.
Edit: The feature already exists as the "Armature" constraint.
8 Comments
So, to clarify, are you proposing that Bone Constraints work in the same way Vertex Groups do with Armatures (i.e. a single vertex point is influenced by multiple bones via vertex group weights)?
Have you considered using Copy Transforms? That constraint has an influence bar like you are describing, though the Vertex Group solution is superior, in my opinion. At the very least, the Copy Transforms could be used as a working example of what you are proposing.
I haven't thought of it in terms of vertex groups before. ๐ค But I guess it's comparable in the way you described. A single bone is influenced by multiple bones via the "weight" of each bone. Yeah.
I have played with Copy Transforms. And in some cases, it does get good results. However, Copy Transforms relies on the orientation of both the owner and the target. If they're not facing the correct direction, or rolled the correct degree, then the Copy Transform will cause the owner to go in some wacky direction.
BTW, ever since I posted, I've been re-thinking what I really want, am I'm not entirely sure it's multiple parents. I thought multiple parents would get the results I wanted, but after some thinking and further experiments with the Child Of constraint, I think I might have gotten the wrong idea. I want a bone that can find the average point between multiple bones. You know, like how when you select multiple objects, and then tell the 3D cursor to go there. The 3D cursor knows exactly where the center of the selected objects are. I want bones that are capable of doing that. But add to that, they can also be offset from the center point. So it's more like the average of multiple bones AND the local position of the owner. I hope I'm explaining that well.
Considering how complex this topic can seem, I'd say you are explaining yourself as well as words will allow!
I think your example of the way the 3D cursor calculates its position between two selected points, illustrates your idea well. This actually reminds me of the way stretchy bone-chains work.
If you can, generate a Rigify rig, take the IK hand (i.e. hand_ik.L) and stretch it out. What you'll notice is that the blue arm tweek bones (i.e. forearm_tweak.L) maintain their position precisely between the wrist and the elbow. Is this the kind of thing you're looking for? If it is, try dissecting the rig to learn how to approach it.
Regardless, hopefully, this illustrates that there are some existing ways to achieve your goal. Whether or not they ought to be simpler to find and use, is up to the Blender gods.
Good luck!
Oh my god. I'm freaking out right now, because I think I found EXACTLY what I was looking for.
So I was checking out the Rigify rig like you suggested, right? And I check this bone called "MCH-hand_ik.parent.L". I don't really know what it is. I'm only vaguely aware that IK/FK switching is a thing. I assume that's it's function. Dunno. In anycase, it has a constraint on it. The constraint was unfamiliar to me, so I checked what it was. It's the "Armature" constraint. A constraint I never paid any mind to before. Hell, the description barely makes sense to me. And yet, the description sounded kind of like what I wanted. I checked the help page, and it sounded very good.
I just tried it out on a few bones. And so far, it appears to work exactly how I imagined. Averaging the transformation between multiple bones. I can add as many bones as I like. I can change the weight of influence for each bone. There are even more options than I imagined. This is it! Some Blender god already blessed us! ๐Thank you to whoever made this constraint. And thank you for telling me to dissect the Rigify rig.
I searched if it was possible to average a bone between bones multiple times. And every time I looked, I got "Use Child of" as the answer. I want everyone to spread the word of the "Armature" constraint. Not Child of. Armature.
Haha - that's excellent! Isn't Blender great? If you're at all interested in coding your own operators, Sololearn is a very effective (free) teaching app, and it has multiple Python courses on it. You can be up and running within 3-4 months, making demos for new ideas to put on RCS, and then eventually maybe even Blender itself.
co-parenting an object? people already have enough trouble understanding how an object can be in more than one collection, that will just blow their minds. as L0Lock said, that's what constraints are for (the child-of constraint, specifically)
That's what you can do with child of constraints and its weight.
Child of contraints are a pain to set up. Because I have to return the pose back to a rest position, then press the "set inverse" button on all of the constraints. If I edit the bone again even slightly, I have to once again return the pose back to rest, and press all the set inverse buttons again. I don't see why the child of constraint works like that. It's adding a lot of tedium to my efforts.
I was thinking that something more automated could be put in place, with easier to use options. For example, normally, when you select multiple bones, the last one you selected can be made a parent of all the previously selected bones. It's as easy as pressing ctrl+p. Well why not add to the parenting menu the option to set the final bone as a child to all the previously selected bones?
And then over in the "Relations" menu, it displays all of the parents, with sliders for their influence. this would be much simpler and cleaner than creating child of constraints and pressing set inverse on all of them. It would also be easier to set up a bone to have many parent. Say 6 parents, 12 parents, etc. Imagine trying to set up 12 individual child of constraints for a single bone. That would be a nightmare.