Can I use stage recorder to export a2f?

Hey, I have here the a2face running inside Composer:

However the a2face movements are not made by skeleton. That is why I have to ask is there any way to export this animation ( I have also a2gesture movements on her body )
so the full combination could be opened by other artist?

Is stage recorder a useful tool here?

I have selected the camilla main Xform in the above image, but should I now also select the prim? What prim? Since the rec button is gray I assume it is not ready to start recording?

Yours,
Pekka

It did record something!!
117 Mb USD appeared :D

But when I open it, its just empty mesh but nothing visible…
What is the workflow of this tool please can someone explain to me?

Hi @pekka.varis

Unfortunately currently there’s no tool to do this automatically. But both Audio2Gesture and Audio2Face have the ability to export SkelAnimation clips.

When you have these, you can combine them using script or AnimGraph.

1 Like

Yes, we know how to do that combination.
I am trying to figure out what would be the best way to export this combined talking & gesture animated character as a USD scene to other users. Basically that is the power of USD, right?

If you have both animation clips from A2F and A2G, you can combine them into one clip using this script. Then you can apply this animation clip to your rig without using AnimGraph. But your rig should obviously have the correct body skeleton + face blendShapes.

import omni.usd


def mix_body_and_face_animations(body_anim_path, face_anim_path):

    stage = omni.usd.get_context().get_stage()
    
    body_anim_prim = stage.GetPrimAtPath(body_anim_path)
    face_anim_prim = stage.GetPrimAtPath(face_anim_path)
    
    bs_prop = face_anim_prim.GetProperty("blendShapes")
    timesamples = bs_prop.GetTimeSamples()
    for time in timesamples:
        bs_values = bs_prop.Get(time)
        body_anim_prim.GetProperty("blendShapes").Set(bs_values, time)
    

    bsw_prop = face_anim_prim.GetProperty("blendShapeWeights")
    timesamples = bsw_prop.GetTimeSamples()
    for time in timesamples:
        bs_values = bsw_prop.Get(time)
        body_anim_prim.GetProperty("blendShapeWeights").Set(bs_values, time)

mix_body_and_face_animations(
    body_anim_path="/World/A2G_Take",
    face_anim_path="/World/Blaze_A2F_Solve_Weights_bsweight"
)
1 Like