0
$\begingroup$

I'm trying to use Blender to create a custom emote for Sansar. I've downloaded the Sansar reference model and I have a BVH mocap file that I'm trying to apply to it.

I wasn't able to figure out how to apply the BVH to the Sansar armature directly, so I'm trying to use Bone Constraints to make the Sansar model follow the animation. For the left side this was easy, as the Sansar model uses similar bones to those in my BVH file.

But I'm having much more trouble on the right hand side of the body. This is because the Sansar model seems to have the rotation for all the bones on the right hand side inverted:

Inverted bones

The Sansar model has the joints in the right places, but then the bone is pointed in the exact opposite direction. For example, the Sansar R_hip joint corresponds with my BVH's "RightUpperLeg" bone, but the Sansar bone then extends into the torso.

I'm not able to change anything about the rigging, since then my emote wouldn't be compatible with any other avatars on Sansar.

I'm using the "Copy Rotation" constraint, but for all the limbs on the right hand side of the model this leaves them grotesquely contorted. I've tried using the "Invert" options on the "Copy Rotation" constraint, but this doesn't seem to do what I expected, only rotating the bones slightly instead of a full 180 degrees. I'm wondering if maybe the "Invert" options only work in local space, not world space? Or maybe I'm misunderstanding what they are inverting.

I tried rotating the bones manually in Pose mode, but this didn't have any effect. I think my rotation is being overridden by the constraint.

Is there a way that I can apply a rotation to these bones AFTER the constraint is resolved?

$\endgroup$
1
$\begingroup$

Hardcore, solve-anything animation retargeting, in this case from BVH rig to destination rig:

Make sure your destination rig isn't using any constraints. Duplicate it, then join the duplicate to your BVH rig. In edit mode, reparent all bones from the duplicate to bones in the BVH rig. Give all bones in destination rig a copy transforms (or copy rotation, that's fine for this) constraint targeting their counterpart in the edited BVH rig. All constraints in world->world space. I think that's default anyways.

"Is there a way that I can apply a rotation to these bones AFTER the constraint is resolved?"

Yes. Look on your copy rotation constraints for the "Mix" field. Change it to "before original." There are some issues with world->world before original copy rotation though (discovered through this question, deserves further investigation and maybe a bug report.)

$\endgroup$
3
  • $\begingroup$ I tried your second suggestion first, since it seemed like exactly what I'd asked for. Setting Mix to Before Original did allow me to rotate the bones after the constraint was resolved. But once after I clicked play all the bones rotated in strange directions. Would you be able to elaborate a bit more on the first thing you mentioned? I tried implementing it but I'm pretty new to Blender and got a bit lost. How do I reparent a bone? Do I need to align both my source and destination armatures in a pose first? Is there a way I can remove a constraint without changing the pose? $\endgroup$ Jul 13 at 3:09
  • $\begingroup$ @JoshuaWalsh SE sites like this are basically the worst place possible to have a conversation. You should think about asking on a forum-style site instead, perhaps blenderartists.org . If you want to ask all those questions here, they need to be asked as individual questions-- but you'll also be expected to have done your research before asking, and reasonable research should get you at least some of those answers. $\endgroup$
    – Nathan
    Jul 13 at 3:15
  • $\begingroup$ I wasn't so much wanting to have a conversation about it, I was just hoping you might be able to edit your answer with some additional details. In terms of reasonable research, I have already spent several hours searching for information around this, and several more on trying things out. I've tried using plugins like this one. I'm a self-taught programmer, so I'm familiar with Google. The reason I have turned to SE is because I can't figure it out myself. $\endgroup$ Jul 13 at 3:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.