Actor joints, disable a joint ?

I am now controlling a human model’s facial expression by moving the joints on the face. I prefer to use the Shape Key feature in blender but it is not supported at this moment so I use armature.

By moving the joints, I can create some acceptable facial expression:
youtube.com/watch?v=uvXcrUza5j4

But when I move forward to make the model speak, I find it not easy to continue. Especially the mesh near the mouth, I need more precise control to simulate a talking man.

I would like to ask if you have any advice on how to do it.

Or if it is possible to temporary disable some joints and enable some joints on a model ? If so, I can make specific bones for some specific pose, and enable when it is required.

And, just find an interesting demo

youtube.com/watch?v=I1ObQnae … annel_page

I believe it is more difficult for this question. If I have the Shape Key information of a model, how can I integrate it and make the actor performs something like this demo ? (I am not referring to the facial expression detection part, but just the animation part).

for your first post. you can create actions, such as eye-blink . or just eye-open, mouth open etc in blender. (while you have the model in the base-position). once you have all your facial expressions together you can use the action editor to apply/blend those actions without the need of modifiying the bones directly. almost like shape-keys.

for the second question. it should be doable with the usual panda-animation interfaces. guess thats not the real problem.

You mean, within Panda? You can’t “disable” a joint per se, since every joint always contributes to the final pose. You can control the animations on each joint independently, though, so that you can pose a joint to a particular frame of a particular animation, and then not animate it for a while. Is this what you have in mind?

Not entirely sure your question here either. Do you mean, if you had a converter that successfully translated the Shape Key information into Panda, how would you use it? It would appear in Panda as a series of sliders, which can be controlled very like joints.

David

Hi Thomas,

Can you explain a bit more on the flow, if I want to make the human model handle arbitrary facial expression changes, e.g. for a talking character ?

For the second question, how would you approach this as all the poses are captured dynamically, and may not be able to map to a predefined actions in the predefined set of animation ?

Actually I want to disable the contribution of a joint to the pose if I need to. I believe it is not possible, after reading your answer.

For the shape key support, do you mean it is already there ? Where can I find more information on this support, e.g. the Egg file format, API in panda ? So far it seems only Armature support is mentioned, or I miss something important ?

this is only true for blender. panda itself can handle shape keys quite well. but afaik the maya-exporter is the only one beeing able to handle the actual export.
it is possible to extend blender to support those,too. but so far noone added it to the chicken exporter.

So what the egg file already support shape key ? What is the tag/syntax ?

They are called ‘morph targets’ in Panda, I believe.
panda3d.cvs.sourceforge.net/view … iew=markup

Thank you very much for the information. Do you know if there is any sample egg files and corresponding panda python code sample ?

The ripple.egg file is implemented using morph targets. Python code is precisely the same as for any other animated egg file; to Panda; joints and morph targets have the same interface.

David

I see. Thank you for giving a starting point.

In ripple.egg, there are 7 morph descriptions, (1-7), how can I code in python to control this morph targets individually ?
(say I want morph 1 to be 0.5, morph 2 to be 0.7)

Use:

morph1 = actor.controlJoint("1")
morph1.setX(0.5)
morph2 = actor.controlJoint("2")
morph2.setX(0.7)

and so on.

David

I try this on the ripple.egg:

        for i in range(7):
            morph = ripple.controlJoint(None, 'modelRoot', "%d" % (i+1))
            morph.setX(0.5)

It is ok. But then the animation no longer played, as all the “joints” are locked:

ripple.play("ripple")

Is it possible to give back the control to the animation play ?

Yes, call actor.releaseJoint() to return control to the animation.

David