Tutorial: Authoring Secondary Animation in Maya and Unreal with Pose Driver Connect

A comprehensive look at authoring secondary animation in Maya and importing into Unreal via Pose Driver Connect.

https://dev.epicgames.com/community/learning/tutorials/r04p/unreal-engine-authoring-secondary-animation-in-maya-and-unreal-with-pose-driver-connect

1 Like

Fantastic work! Thanks for your efforts!
I give it a try today, It works fine when I edit driver bone following the video. But when I create a blend shape in Maya, It seems the blend shape not be imported in engine. So I’d like to know if import blend shape to engine is supported for now, or just I missed something…

Thank you for this, it’s very appreciated.

How do you deal with separate meshes? Metahumans contain the body and head, so what’s the workflow to get the shoulder and clavicle deformations working with the head mesh?

It looks like joints can only be driven by one solver. Would there be any way to (for example) get the shoulder and clavicle to drive the chest at the same time?

Hey! The blendshape workflow is still experimental in Maya and not currently supported by the Pose Driver Connect plugin in Unreal at the moment, although you can use the PoseDriver node inside an AnimBlueprint to drive curves.

Great questions!

For the head and body, we have duplicate joints in the head skeleton that overlap with that region of the body. The body joints are driven inside the body’s post process animation blueprint via Pose Drivers and the head skeleton follows the body using the CopyPoseFromMesh node inside the Face_AnimBP.
In terms of skinning, we have a single mesh that contains a head merged with the body and we use that to author all of the body skinning. We then mask out a region around the clavicles on the head mesh and transfer the weights from the body to create a seamless blend.

That is correct, joints can only be driven by one solver, however you can have more than one driver transform that influences the solver. This can be achieved in PoseWrangler by adding another transform to the driver transforms list.
Alternatively, you can also layer transforms and solvers on top of one another. For example, a clavicle solver could drive a chest joint and a shoulder solver could drive a joint that is a child of the chest joint to achieve similar results.

1 Like

Thank you for your answers, they are very helpful.

I’ve encountered a problem and need assistance. In my scene, I have only two bones. When adding a pose, I receive the following error message: // Error: L1_UERBFSolver: Duplicated targets found. What could be the reason for this?"

That error is normally caused if more than one pose is set with the same transforms.
In your setup are you moving your joints into the pose position before adding a pose or adding a pose and then moving the joints?
If you are adding a pose before moving the joints, updating the pose should be enough to fix this error.

1 Like

My operation is as follows: In the scene, I create joint1 and joint2, neither of which belong to any hierarchy. Then, I select joint1 and create a solver, naming it UP. After that, in the DRIVE TRANSFORMS/BLENDSHAPES section, I select joint2 in the scene and click on ‘Add Drive Transforms’. There is already a ‘Default POSE’ in the POSES section. Next, I move joint1 and joint2 to new positions, click on ‘Add Pose’, and name it. Then, an error message appears: ‘Error: UP_UERBFSolver: Duplicated targets found.’ I am not sure if there are any prerequisite rules for using Pose Wrangler? thank you very much for your answer

Thanks for the response! I’ve managed to reproduce your setup with the steps you’ve given and I also see the same error when I create a new pose.
This is because by default the RBF solver uses rotation instead of position to interpolate between the poses and the rotation of the default pose and rotation of the up pose are the same. Whenever there is more than one pose with the same position/rotation you will see this error.
In order to fix this, if you select the solver node (right click on on the solver in the RBF SOLVERS section and press Select > Select Solver Node(s)) and change the Input Mode from Rotation to Translation you should see it behaving as expected.

1 Like

Thank you very much for resolving my confusion; I believe I now understand the rules for using Pose Wrangler. If possible, I would really appreciate seeing Pose Wrangler support rules that accommodate both displacement and rotation attributes simultaneously. This might be a bit much to ask, as I am not familiar with the internal workings, but in projects, displacement and rotation are often used together. Thank you again for your explanation.

This is dynamite !
Thank you for bringing this out.

Also massive props to Gabriele Pellegrini for the video in the early days.
MH control rig Deep Dive UERBF pose wrangler

Cheers,
b

Hello, I would like to ask, after Export All Drivers from an adjusted Metahuman project, the Import Drivers failed in another Metahuman project, RuntimeError: No valid objects supplied to ‘xform’ command,how to fix it?

1 Like

Hi Chris, many thanks for your video on the Maya pose Wrangler. I initially was hoping it could work as a way of bringing blendshapes into unreal with similar functionality to Braverabbit Shapes tool but from your previous comments it sounds like the Blendshape functionality isn’t available yet, Do you know when this will be up and running? Also I don’t appear to have the POSE EXPORTER section in utilities, and when I try file-export selected driver it creates only the json file, not the fbx file. The version I’m using is Pose Wrangler 2.0 but I see in your video you have 2.2, is this the issue?
Many thanks,
Adam.

Hi! I’m not sure without a little more information, it sounds like the setup of your two scenes are different. Do both scenes have the joints named the same i.e. without namespaces?

Hi @ChrisTheodosius, many thanks for your response!

If by two scenes you mean Maya and Unreal I think the issue I’m mentioning is all Maya, and my main issue is that my export from Maya is failing.

If you look at the above left image you have a pose exporter in your video, on the right you see I don’t. I tried using the file-export all drivers(which I thought might do the same export process but that appears to only export the .json, not an .fbx file(see below):

image

Is this a bug or have I not opened the UI correctly?

The only other question was when do you think the Blendshapes workflow will be available as it will be amazing to be able to transfer both driven transform and blendshape data from Maya to Unreal?(I assume the blendshape functionality isn’t working yet as above you say: Hey! The blendshape workflow is still experimental in Maya and not currently supported by the Pose Driver Connect plugin in Unreal at the moment)

Adam.

Hi Adam,

The blendshape support is currently experimental in Maya and I don’t currently have a timeline for blendshape support via the exporter/importer. That being said, blendshapes can be driven by a PoseDriver in engine by changing the PoseDriver Drive Output value to Drive Curves. This will drive a curve for each pose which you can use to activate your blendshape.

For your other issue, It looks like you are using the old version (pre exporter update, the current version is 2.3.0) either downloaded from Github or via the Quixel Bridge Maya plugin. Removing the old version and using the marketplace release should fix the issue of the missing PoseExporter section for you.

Hi @ChrisTheodosius
Im trying to mirror rbf solvers but, “Mirror Solver” button doesn’t work.
and search help DOC theren’t info. plz help
What I did

  1. create Soler. name with "arm_l_UERBFSolver " Driver : BN_l_arm, Driven BN_arm0_Se_subry2, POSES name y75.
  2. excute “Mirror Solver” than error show up

2024-02-05 13:47:36 ERROR: Unable to mirror transform ‘BN_l_arm’. Target transform does not exist: ‘BN_r’
2024-02-05 13:47:36 ERROR: Unable to mirror transform ‘BN_l_arm’. Target transform does not exist: ‘BN_r’

Hi @jaechul79

It looks like the names that you have for your joints do not follow the default UE5 naming conventions. It is possible to support custom joint naming conventions, however in order to do so you will need to set up a custom skeleton config that contains a mirror mapping.

There is some documentation on this included with the tool under Help > Documentation and then click on the Skeleton Config page. If you run into any issues trying to generate one, let me know and I’ll try to help!

1 Like

thank you for reply.

I will check mirror mapping.
so If I set joint name with default UE5 naming conventions. don’t need to mirror mapping right?