Morph Target Weights (Blend Shape Weights in Maya)


#1

I have the following two meshes:

Head with no smile
Head with full smile

I want to create left smile and a right smile morph targets for the “no smile” mesh. To do this, I need to extract the meshes for these targets from the “full smile” mesh.

To extract a left/right smile in Maya, I would make the “full smile” mesh a blend shape of the “no smile” mesh and paint blend shape weights to remove one side of the full smile.

I have had a difficult time finding the similar functionality (i.e., blend shape weights) in Cinema 4D.

I have an idea that the solution would involve vertex maps for the painted weights and a morph deformer tag (or other deformer?). However, I do not know how to impose the vertex map on the morph target.

How can this be done?


#2

You can use the morph deformer with a linear falloff to create the left & right shapes. Basically, this blends in a morph shape but with various types of falloff. Then you can bake to a morph target in the tag & delete the deformer.


#3

To use the pose-deformer (or any deformer) with a Vertex Map you add a restriction tag to the deformer. you can then add the vertex map to the restriction tag.

cheers
Martijn


#4

There used to be a Morph Brush in Cinema up to R11.5 but it was removed in R12 and hasn’t been replaced since, no idea why.

So, the methods mentioned above are the only real options now, note that they only work on the entire deformer, you can’t paint weights for individual shapes any more.

Cheers,
Brian


#5

Thanks! That’s the direction I needed. However, I now have a follow-up question…

Here is the process I am following:

  1. Add a Pose Morph tag to the “no smile” mesh
  2. Add the “full smile” mesh to the Pose Morph tag as a pose.
  3. Change the Pose Morph tag mode to Animate and set the “full smile” pose strength to 100%.
  4. Create a vertex map on the “no smile” mesh which paints the area for a half smile (left or right).
  5. Add a Morph Deformer as a child of the “no smile” mesh and identify the Morph as the Pose Morph tag from the “no smile” mesh. Set the falloff to Infinite.
  6. Add a Restriction tag to the Morph Deformer and add the vertex map from the “no smile” mesh as the restriction.
  7. Tweak the vertex map further, as desired.
  8. EXTRACT TO NEW OBJECT (How to do this???)

How can I achieve item number 8?

I have tried Current State To Object. However, this doesn’t work. It creates a new object with a full smile (not the desired half smile). This may be due to the fact that the Pose Morph tag mode is set to Animate. If so, how do I extract the animated pose?


#6

This is another of those things that changes from version to version, heh.

In R14 the only way I’ve gotten it to work is to :
Set it up as you said up to point 7 (although I usually just use Restriction tag/vertex map method here and don’t generally use the morph deformer falloff)
Then go to the Tools Menu > Execution and turn off Expressions.

Now go to the mesh and do a current state to object and it will work.
Now turn on Expressions again.

A couple of versions ago that extra step was not needed but I’m pretty sure it is in R13/14. Not a great workflow but hey it works :slight_smile:

On the plus side, it’s much easier to mirror morph targets in Cinema compared to Maya (just select the target in the morph tag and use the Flip X), no messing around with hacks like wrap deformers and scaling -1 in X.

Cheers,
Brian


#7

Brian,

That worked perfectly. Thanks!

I will explore your FlipX method. Originally, I was planning on the wrap deformer with -1 scaling method. Your way sounds much easier.


#8

Great, glad that helped. Yeah the FlipX command in the morph tag in Cinema is very handy, it means once you have a ‘Right Smile’ in the morph tag for example it’s just a matter of using that to create a ‘Left Smile’.

You right-click on the target in the morph tag to access that command BTW. You can copy targets there too (so usually I right-click >copy, paste, flip X and then rename).

Cheers,
Brian


#9

Brian,

The FlipX method works great. The one thing I noticed is that the Mixing mode of the target must be set to Relative. If it is set to Absolute, it will not flip.


#10

There is yet another way.

Disable your “base” Morph tag. You will find that the MorphDeformer still functions.
Add a new Morph tag. Enable ‘Points’. Delete ‘Pose Null’.
Use the MorphDeformer to set a Pose.
Make sure the ‘Base Pose’ is selected in the ‘New Morph tag’.
Shift-Click ‘Add Pose’, this mimics a ‘Current state to Object’ within ‘Morph’, deformers included (in this case the Morph Deformer).

Either copy the complete ‘Base Morph tag’ this way including Lefts and Rights
or just create the Left/Rights and when done select all of them and perform a ‘To Mesh’. Next drag and drop the new meshes on the base morph tag.


#11

Yeah the Absolute mode is always looking back at the source mesh (like the way blend shapes work by default in Maya), it’s handy for blending cloth sims and other tricks like that. I guess the flip X can’t work in that case as the connection to the original mesh is still ‘live’. If you use Relative then the shape is just based on the current shape of the source mesh when you create the morph target and ignores any changes you might make to the source after that (like if you deleted the source mesh in Maya).

Cheers,
Brian


#12

Thanks to all for your help.

Below is the process I used, in its entirety (including the creation of a corrective morph target for use in an Osipa style rig).

Available Meshes:

head_no_smile
head_full_smile

Objective:

Create three morph targets (left smile, right smile, smile corrective). When combined, these three morph targets should look identical to head_full_smile.

Process:

Create Left Smile
Use a working copy of head_no_smile for the following steps.

  1. Create a Vertex Map on head_no_smile. Paint the left smile area to your liking. This can be further tweaked later in the process.
  2. Add a Pose Morph Tag to head_no_smile. Set Mixing to Points. Delete Pose.0.
  3. Add head_full_smile to the Pose Morph Tag as a Pose. Set the Mixing to Relative. Set the Mode to Animate. Set the pose strength to 100%.
  4. Add a Morph Deformer as a child of head_no_smile. Set Morph to the Pose Morph Tag of head_no_smile. Set the Falloff Shape to Infinite.
  5. Add a Restriction Tag to the Morph Deformer and set the Vertex Map from step 1 as the restriction. You should now see the left smile defined by the Vertex Map.
  6. Tweak the Vertex Map to achieve the left smile of your dreams.
  7. Turn off Use Expressions (Tools->Execution->Use Expressions).
  8. Extract a copy of the current state (Mesh->Conversion->Current State to Object).
  9. Delete the unnecessary elements from the copy (i.e., Morph null, Pose Morph Tag and Vertex Map) and rename it head_left_smile.
  10. Delete the working copy of head_no_smile.
  11. Turn on Use Expressions (Tools->Execution->Use Expressions).

You now have the left smile mesh. You can move it out of the way for now.

Create Right Smile
Use a working copy of head_no_smile for the following steps.

  1. Add a Pose Morph Tag to head_no_smile. Set Mixing to Points. Delete Pose.0.
  2. Add head_left_smile to the Pose Morph Tag as a Pose. Set the Mixing to Relative. Set the Mode to Edit. Set the pose strength to 100%.
  3. Right click the head_left_smile Pose and select FlipX.
  4. Delete the Pose Morph Tag from head_no_smile and rename it to head_right_smile.

You now have the right smile mesh. You can move it out of the way for now.

Create Smile Corrective
Use a working copy of head_no_smile for the following steps.

  1. Add a Pose Morph Tag to head_no_smile. Set Mixing to Points. Delete Pose.0. Set the Mode to Edit.
  2. Add head_left_smile to the Pose Morph Tag as a Pose. Set the Mixing to Relative. Set the pose strength to -100%.
  3. Add head_right_smile to the Pose Morph Tag as a Pose. Set the Mixing to Relative. Set the pose strength to -100%.
  4. Add head_full_smile to the Pose Morph Tag as a Pose. Set the Mixing to Relative. Set the pose strength to 100%.
  5. Set the Pose Morph Tag’s Edit mode to In Place. This combines the effects of the above morph settings.
  6. Delete the Pose Morph Tag from head_no_smile and rename it to head_smile_corrective.

You now have the smile corrective mesh.

NOTE: Please note that the strength settings for steps 2 and 3 above are set to -100%. This method is used to extract the difference between the combined left and right smiles relative to the full smile (i.e., the correction).

Verify The New Meshes (optional)
Use a working copy of head_no_smile for the following steps.

  1. Add a Pose Morph Tag to head_no_smile. Set Mixing to Points. Delete Pose.0.
  2. Add head_left_smile to the Pose Morph Tag as a Pose. Set the Mixing to Relative. Set the pose strength to 100%.
  3. Add head_right_smile to the Pose Morph Tag as a Pose. Set the Mixing to Relative. Set the pose strength to 100%.
  4. Add head_smile_corrective to the Pose Morph Tag as a Pose. Set the Mixing to Relative. Set the pose strength to 100%.
  5. Change the Pose Morph Tag’s Mode to Animate.
  6. Compare the result to head_full_smile. They should be identical.

All three meshes are ready to implement into your Osipa style rig.


#13

I’m curious why you go through the process of creating that corrective shape? If you split the full smile into left/right smile shapes correctly then having both of those at 100% should be the same as having the full smile at 100% anyway. You just have to make sure that the values are normalized (adding up to 100%) on both sides.

Here’s a video I made a couple of years back to show my usual workflow, it works without corrective shapes in this case. (this was done back in R12 when I didn’t need to turn off Use Expressions before using the Current State To Mesh command but otherwise the same workflow still works in R13/14).

http://graphite9.com/MiscClips/SplittingSymmetricalMorphs.mov

It’s a while since I’ve read Stop Staring, but off the top of my head the only reason I can think of why he would create that corrective shape would be that the wrap deform+scale-1 method doesn’t really give you 100% accuracy in the resulting shape, you do get that though with the flip X command.
Edit - thinking more about it I guess the other reason might be that if you paint out the morph with non-absolute values, or if the mesh is very dense then getting it normalized might be tricky.

Cheers,
Brian


#14

Brian,

You’re right. When the weights are normalized properly, the corrective shape is not necessary. In Maya, I guess I was more loose with painting my blend shape weights. I was more focused on getting the look I wanted (e.g. for a left smile) without seriously considering symmetrical weighting. This bad habit required that I use corrective shapes to achieve the proper full smile. That bad habit stops today! :thumbsup:

BTW, that video is very helpful. I’m sad that I had not seen it sooner. :slight_smile:


#15

Glad it helped, to be honest I had forgotten about it but your previous post made me think of it again, so I fired up my FTP and saw that it was still on my server :slight_smile: You’ll notice some of the Morph tag stuff looks a little different as that was recorded in R12 but the same functions are still available, just moved around a bit.

Cheers,
Brian


#16

This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.