Here’s a way to update shape keys to the base modifications

If anyone is interested I have added a feature that allows you to update the selected vertices of an edit-mesh of a shape-key to that of the base (basis) shape. I’ll explain why this may be useful shortly.

If you would like to try it I have a compiled version for Windows using blender 2.40 sources, it’s about 3.5Mb (it also includes my source code changes):

Simply unzip and copy the “blender.exe” into your “C:\Program Files\Blender Foundation\Blender2.40” directory (rename your original if you want to go back to it). The blender save file format is exactly the same as 2.40 because all that code is still the same, so there are no incompatibility issues.

With the release of Blender 2.40 I found the new shape keys very useful. You can now assign a vertex group to a key so that only those vertices within the group are involved in the rvk calculations (I don’t think that was available in 2.37 but correct me if I’m wrong). What this means is that you can modify the base shape and those changes can be immediately seen in object mode for all the shapes keys.

But once you go into edit mode for any of the shape keys you only see your stored original.

While modelling I find it is essential to be able to view the current mesh as I am modifying the vertices for the keys which means I would have to constantly switch in and out of edit mode to be able to see it.

But with the modified blender, I’ll describe how it works now.

First download the blend file here:

It is a trivial file that started with Suzanne. Then three mesh keys were added to the upper and lower eyelids to allow for eyelid opening and closing using the eyelid control seen in the bottom right of the picture below. In the ipo window you can see the three mesh keys (ulid1, ulid2 + llid).

Each shape key has an assigned vertex group in the “shapes” button group so that only those vertices are affected by the rvk calculations.

I then modified the base shape so that Suzanne now looks like that in the picture below.

Now as I click on each shape key in the ipo window in object mode, I see (correctly) that each shape key has the changes as well.

Above is the ulid1 shape, below is the ulid2 shape.

But now, if I go into edit mode while having a shape key selected (such as the one shown above), what I get is shown in the picture below.

It’s the original unmodified version of Suzanne. That’s not what we want.

To fix this (using the modified version of blender) do the following:

  1. Select all vertices (hotkey A).

  2. In the “Link and Materials” button group make sure the “upperlid” vertex group is selected then press “Desel”. Now all vertices except those assigned to the shape key should be selected.

  3. From the mesh menu select “Restore Basis Coords” (hotkey Ctrl + Semicolon).

  1. Answer OK to the pop up and you should now have the modified Suzanne for this particular shape key as shown below. And because we didn’t have the upperlid vertex group selected they don’t get restored – so we’ve now got our shape-key edit-mesh just the way it should be (see the picture below).

Just repeat this for each of the shape keys, or just update those verts that you think are necessary.

Initially I tried using Python to add this feature but it appears that it’s just not possible to do it using Python, so it has been done using the Blender 2.40 sources instead. See thread

I added the feature to make it easier on myself while modelling (because I seem to make a heck of a lot of changes to my shapes while modelling). I haven’t bothered to submit a patch but if anyone finds it useful, please tell me and I’ll try submitting one.

A final note about the undo. I have implemented Blender’s standard undo with this feature, but just be mindful that it looks like Blender’s undo does not fully recognise the different shapes, which means you can restore undo data from one shape to another, and that can be confusing at times.

Hope this is of some help,
Peter Eisfelder

Hello there,

Thank you for sharing this feature, I surely do find it very interesting! I have not tried out your new binary yet, but I assume that you can use this feature also very nicely when making derivatives from base meshes (i.e. to make different characters from a “default” human etc.). :smiley:

Matt :slight_smile: