Reusing 2.40 Shapes on duplicated then ALTERED meshes

I have a head mesh with Shapes (2.40) set up for facial animation.

I would like to use those Shapes on a duplicated mesh THAT HAS BEEN RESHAPED INTO A NEW CHARACTER.

ie. I have 2 characters based on the same mesh and don’t want to have to redo all the facial expression for the 2nd character.

I know the RVK1 to RVK2 script takes RVKs from 1 mesh and copies them to another but that’s not what I’m after because the 2nd mesh’s basis is quite different.

At the moment i’m using hooks (that remain “live” ie not applied) to alter the 2nd mesh (rather than the vertices themselves) and this works as far as the Shapes go but it’s not ideal as you can imagine.

I need the Shapes for the new mesh to say “what was this vertice’s postion relative to the basis mesh in the original” and then use that to move it RELATIVE to the new basis mesh - or something like that.

What other methods do you guys use to save you having to start from scratch each time you want a new character?


if you mean you want to permanently apply the deformation of a shape key, export it as another format like .dxf while the shape key is active.

Hey, how about making Face2 a shape of Face1? Then you can just use a linked dup of the mesh and they could share all the shape keys. Actor1 has his Face2 shape permanently set to 0.0 and Actor2 has it set to 1.0. I think that would work. :slight_smile:

Thanks for the reply Modron, but it not really what I’m after.

I 'll try to give and example of what I’m looking for.

Take the sample file from the 2.40 alpha, the one with the face controllers.

There is quite a bit of work in getting all those facial expressions. Say the animator wants to alter the mesh to make a new character, they would not want to have to make all those expressions again.

It would be great to reuse those facial shapes but relative to the new altered mesh.

In mesh “Girl”, vertex “left corner of the mouth” moves a certain distance and direction relative to it’s base location when “Smile” Shape is active.

Now take mesh “Girl”, duplicate it and alter it to make Mesh “Boy” so the vertex “left corner of the mouth” is now in a different location to what is was in mesh “Girl”. When “Smile” Shape is active, vertex “left corner of the mouth” will still need to move the same distance and direction as it did in mesh “Girl”, but now relative to it’s new base location in mesh “Boy”.

Does that make sense?

You wouldn’t have to start from scratch each time you wanted facial expressions for a new character.

You can append them as IPO’s (and maybe Actions). Unfortunately it’s more involved (but not impossible) to append that whole driver ‘Rig’, guideboxes and all.

What you really want to do though is replace the Mesh ME:Girl with the Mesh ME:Boy. That way, everything stays intact.


I think I know what you mean. You want the differences, not the absolute geometry of these emotion keys, so you can apply them (thus reusing) to a second character. I know this can work great. I realized this by myself by modeling face targets for the Makehuman project. At first I thought emotion targets and all those little “wide nose, inflated lips” targets would not work on top of my models, but they work great.

In fact I also plan to use this to make different characters out of one mesh and model the emotion targets only once. I am only waiting for the documentation for the new Python modules. I still don’t know if it will be possible to read and modify shape key geometry.

In the mean time the key for doing this this may be in the Maketarget script for Makehuman, only using one of your meshes as the base mesh instead of Makehuman’s to extract the emotion keys as targets. Those targets can then be applied to the second character and saved as new meshes to create new shape keys.

You can easily create new base mesh files out of a Videoscape format file modified with a text editor. But I will go into a detailed explanation only if you are interested and you already have your models done.

Yes, Yes, Yes, that’s what i mean…the DIFFERENCES!!

I just need to tell each vertex what the difference in location is.

I will certainly have a look at the maketarget mesh. I am just about to start modelling 10 different characters for a new project and didn’t want to have to repeat a whole bunch or work.

I would love you to show me how to use you maketarget script for this purpose. I might use the controller2 file as a test. It certain is a fine piece of work.

Thanks for you reply toloban and thank you too Fligh % although I wasn’t really sure what you were telling me to do (my problem not yours, I’ve only just started to look at RVKs/Shapes sinice 2.40)


yes, that example is the sort of thing I mean. How involved is it?

Hi neilh1

Maketarget is not mine but a small utility for modelers contributing to the Makehuman project.

But after some thought, maybe using it is not the best approach. I have been playing for the last hour with the new Python modules (without documentation, only using dir() and thanks to this thread) and the geometry of the shape keys is now accessible through Python, so it is not difficult to obtain the all the differences and save them as text files, which could easily be turned into shape keys for another mesh, provided of course it has the same vertex and face count.

I will have to play a few hours with both options tomorrow (gotta sleep now) to see what I can come up with.

Thanks for sparking the ideas with your challenging question. I know I want this too. :smiley:

Well I gotta go home (I’m at work now…but this is work related in case you think I’m being bad) but I sure do look forward to seeing what you come up with on the weekend!! This could make modelling multiple characters a whole bunch easier and as you say could be very useful for Makehuman.

Thanks for your interest toloban I’m so glad you hit my wavelength.


I am sorry to say that my results are disappointing. It turns out I can access geometry for every key, but the returned vertex coordinates are not where they should be. X,Y and Z are all exchanged. Since this is an undocumented feature of an unstable version, it can’t really say this is a bug.

If it worked as it should, it would be really easy to create a script that just transfers shape key differences from one mesh to another. Doing this under 2.37 would not be practical as it would require a lot of hand work from the user.

thanks for looking into it tolobán

with any luck the final release might shed some light. it would certainly be a useful script if it could be done. It’s not a big drama for me at the moment as it’s going to be a while before I was needing them anyway.

For now I just wanted to know if there was anything I needed to do at this stage of the process to allow me to do the shape transfering later. The answer is…model with the same base mesh.



for tolobán…

have you tried your tests on the new release?

looking forward to hearing how it goes.


Hi Neil

Turns out I made a bug report for the wrong results in the KeyBlock.getData() method and it was quickly fixed just in time for the 2.40 release.

I made a little script which can export the keys from one mesh to the other, really easy stuff.

But the keys in the target object are being added one on top of another, so the mesh gets more and more disfigured.

I hope this is some easy to fix stupid bug.