Retarget apex blendshapes from animated skeleton

   977   11   3
User Avatar
Member
1 posts
Joined: April 2021
Offline
Hello everyone,

I'm looking for the best workflow to retarget blendshape animation from an original animated skeleton to the sliders on a new Apex rig.

My source skeleton has animated attributes that drive the blendshapes. My new Apex rig has corresponding blendshape sliders created by the auto-rig tool. I want to use the animation from the source skeleton to drive these sliders procedurally.

I've been exploring how to connect them, but I'm not sure of the standard approach. Is there a way to drive these abstract slider controls from skeleton attributes?

As an alternative, I was wondering if it's possible to procedurally generate or modify an Apex .clip file with this animation data. Could a script be used to write the skeleton's animation into a clip that I can then apply to the rig?

Any advice or examples on how to achieve this would be a great help.

Thanks in advance!
User Avatar
Member
8076 posts
Joined: July 2005
Online
Here's an example I had lying around for just the eyebrows. Basically, you just need to remap the animation values in to a detail attribute named "parms" that changes every frame. Then the APEX Add Animation SOP can create channel primitives inside your APEX scene using it.

Attachments:
blendshape_example.png (668.4 KB)

User Avatar
Member
322 posts
Joined: May 2007
Offline
https://vimeo.com/user3971456/videos [vimeo.com]
User Avatar
Member
1 posts
Joined: Dec. 2020
Offline
I have problems with the python...Can you shear an example?
User Avatar
Member
8076 posts
Joined: July 2005
Online
Here's the code. But you need to make sure you customize this for your FBX file and rig so that the names match. Also, if you have too old a Houdini version, you might not even have the "fbx_custom_attributes" geometry attribute when you import.
node = hou.pwd()
geo = node.geometry()

old_attrib_name = "fbx_custom_attributes"
new_attrib_name = "parms"

old_attrib = geo.findPointAttrib("fbx_custom_attributes")
old_dict = geo.points()[0].attribValue(old_attrib)

new_attrib = geo.addAttrib(hou.attribType.Global, "parms", {})
geo.setGlobalAttribValue(new_attrib, old_dict)
User Avatar
Member
9307 posts
Joined: July 2007
Offline
in case your parms are on point 0 as suggested in the above code you can also use
Attribute Promote SOP
- Original Class: Point
- New Class: Detail
- Promotion Method: First Match
- Original Name: fbx_custom_attributes
- New Name: Parms

then you can append Attribute Adjust Dictionary and its Rename Keys multiparm to adjust your mapping, you can also use wildcards when renaming
e.g. (again using above example)
From: browDown*
to: CTRL_*_brow_down_start_x

etc...
Edited by tamte - Oct. 14, 2025 16:37:33
Tomas Slancik
CG Supervisor
Framestore, NY
User Avatar
Member
7 posts
Joined: Aug. 2020
Offline
Hello everyone,
I'm working on a project with MH and trying to do the same as OP.

I used the approach described here, but only for sliders from `fbx_custom_attributes`. I created a JSON file with the mapping I found on GitHub for the Maya plugin.

Attached project with mapping file (drop next to hip file). I tested with 2 MH characters and 2 exported animations (baked to ctrl rig)

My current result looks like this: the facial animation seems correct, but there's no head or neck movement.
Also it is slow as hell.
Edited by Mishazawa - Oct. 17, 2025 15:20:02

Attachments:
face_test.mp4 (400.8 KB)
metahuman_control_rig_retarget.hipnc (460.1 KB)
config.json (50.4 KB)

User Avatar
Member
8076 posts
Joined: July 2005
Online
I found the example scene that we used for the launch demos, maybe it'll be of some use.

Attachments:
mh_example.zip (17.4 MB)

User Avatar
Member
7 posts
Joined: Aug. 2020
Offline
@edward

I found the example scene that we used for the launch demos, maybe it'll be of some use.

How did you create FBX animation for FaceBoardControlRig? I tried (in UE5) to bake Animation Sequence to Face Rig and export it, but it has different joint names and many points...
User Avatar
Member
8076 posts
Joined: July 2005
Online
Ah, that I'm not really sure. But the idea hopefully remains the same in that we need to remap them.
User Avatar
Member
2 posts
Joined: Oct. 2019
Offline
The example project seems to work fine with the included animation, but when using new facial animation from UE exported to control rig, it doesn't seem to reference it correctly and im not getting an animation. any thoughts?
User Avatar
Member
2 posts
Joined: Oct. 2019
Offline
Edward, I am using your MH_example file and im not really sure where the disconnect is happening, I am trying to export my facial Animation from unreal to control rig and plugging it into the fbx animation node, but im getting several more points than the original animation had, which only has one point.
  • Quick Links