Page MenuHome

Fix T74483: Rigify Meta-Human Neck Bone stretching
Needs ReviewPublic

Authored by Demeter Dzadik (Mets) on Wed, May 20, 3:11 PM.

Details

Summary

This implements Ivan's suggestion:

all the constraints on spine bones have to be moved from ORG to its DEF correspondent.
all the spine ORG-bones have to be unconnected-childs of their correspondent tweak.

This is actually how chain rigs work in my own Rigify featureset, so as far as I'm concerned this is a tried and viable solution.

The result is that, if you want to parent something to your chain rig, you can do it in two ways: If you parent it to the ORG bone(ie. by default), it will not inherit any squash and stretch induced by the "tweak" bones. If you parent it to the DEF bone however, it will behave the same as before.

This raises a backwards compatibility concern; If you want the old behaviour, you have to express that in your metarig explicitly, by parenting your bone to the DEF bone in some way.

This patch also only affects the spine rig, which makes it inconsistent with other chain rigs in Rigify in this regard.

If this patch is option A, option B is to make this change in the TweakChainRig class, which would affect every chain rig in Rigify, and the aforementioned backwards compatibility issue will apply to all other rigs as well. I assumed what's in this patch would be the preferred solution, but personally I actually prefer this solution, so if you wish I can change this patch to fix it in this way.

Option C is to simply lock the neck bone's translation and consider it not a supported feature.

Diff Detail

Event Timeline

Demeter Dzadik (Mets) requested review of this revision.Wed, May 20, 3:11 PM
Demeter Dzadik (Mets) created this revision.
Demeter Dzadik (Mets) edited the summary of this revision. (Show Details)
Demeter Dzadik (Mets) edited the summary of this revision. (Show Details)Wed, May 20, 3:23 PM

@Demeter Dzadik (Mets) the only option i'd discard right now is C.
All rigify parts are meant to be moved apart from their socket.

This raises a backwards compatibility concern; If you want the old behaviour, you have to express that in your metarig explicitly, by parenting your bone to the DEF bone in some way.

I remember having a discussion about that. We implemented this option in "experimental.super_chain" rig type.
Basically we expose the "prefer DEF parenting" option in the UI so that user can do that.
This should be pretty easy to implement on other rig types too.

If you ask me, i believe (and wrote it in different threads) that if a DEF-bone parent exists then parenting between rig types should always be done at DEF level. The recent scale inheritance options hardcoded by @Alexander Gavrilov (angavrilov)
can avoid this limit and enable more complex interaction though.