How to update corrective shapes when skin has been modified

127 views
Skip to first unread message

Webber Huang

unread,
Nov 29, 2013, 10:12:04 PM11/29/13
to python_in...@googlegroups.com
Hey,guys,have you ever meet some cases like setup a lot of corrective shapes for a rig,but skin has been modified for some reasons,so you have to update all these corrective shapes.It may be the most horrible thing in rigging.I'm thinking about this question in these days,is there any algorithm can solve this problem,an idea comes to mind like below:

delta = newSkin - oldSkin
newCorretiveShape = do_something_with_delta(delta) * oldCorretiveShape 

I'm lack in computer science and graphic algorithm,maybe there's a better way for this.Any one can help?

Daniel Lindsey

unread,
Nov 30, 2013, 4:12:41 PM11/30/13
to python_in...@googlegroups.com
You can always do the old, wrap deform your new mesh on your old mesh, and iterate through the shapes so you have shapes for your new mesh. Since IDK how much scripting ability you have this may be the easiest solution for you for now
Message has been deleted

Webber Huang

unread,
Dec 2, 2013, 12:42:47 AM12/2/13
to python_in...@googlegroups.com
Thanks for reply, but this's not my point. Let me explain it more clear,i have a mesh name Arm, three joints name shoulde_jnt,elbow_jnt and wrist_jntArm was binded to these joints and done right with weight painting, a correct shape name elbow_90deg_corrective was added to this mesh with blendshape, driven by elbow_jnt, but  for some reasons, i have to modify the skin weight of elbow (just the skin weight,not the topoly of mesh), it means that the corrective shape should be updated synchronization to maintain the previously shape of elbow.

Image, there're hundred of corrective shapes setup in full body, driven by a lot of things, when you modify the skin weight,  how to update all these corrective shapes?

在 2013年12月1日星期日UTC+8上午5时12分41秒,Daniel Lindsey写道:

Daniel Lindsey

unread,
Dec 2, 2013, 2:00:20 AM12/2/13
to python_in...@googlegroups.com
Ok, I understand what you're saying now.  Well, I would have to say, first off, this sounds like a serious workflow issue.  If the weight changes you're making are destroying your fixit shapes so much that they have to be redone, then you should first spend more time painting weights, before jumping into the making fix it shapes.  You should be able to get a character well on it's way to final without having to jump into fixit shapes if your weights are painted well to start, and you use additional deformers that are more easily adjusted than fixit blendshapes.  That being said, the data may want is, a list of all your joint poses that you made fix it shapes for (so you can iterate through all these), your old_mesh vert pos without the fix it shapes, old_mesh with the fix it shapes (get the delta's of these, you may even what to get the difference based on normal direction), then your new_mesh vert pos without the fixit shapes, get the delta of (new_mesh +  ((new_mesh - old_mesh) + (old_meshWFixit - old_mesh))).  This theoretically should put you in the same position as you had before.  >__<  at least that's what seems correct in my pea brain. the (old_meshWFixit - old_mesh) would be your actual blendshape difference, but, depending how you apply your blendshapes, it may be subtly different than the fixit shape with no deforms applied.


--
You received this message because you are subscribed to a topic in the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/python_inside_maya/QcQVbOUKaq8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/810e22c4-4d1d-40b4-b08a-e53eece743ca%40googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.

Andres Weber

unread,
Dec 2, 2013, 2:21:05 PM12/2/13
to python_in...@googlegroups.com
You might want to take a look at Chad Vernon's cvShapeInverter.  It creates a node that updates correctives based on the basemesh+pose.  I THINK this is what you're looking for but I may be wrong...
http://www.chadvernon.com/blog/resources/cvshapeinverter/
To unsubscribe from this group and all its topics, send an email to python_inside_maya+unsub...@googlegroups.com.

Webber Huang

unread,
Dec 2, 2013, 9:16:53 PM12/2/13
to python_in...@googlegroups.com
Yeah,cvShapeInverter is a great plugin,i use it quite a lot in my daily work,but it doesn't deal with the situation of skin weight update, or it's a part of the whole solution.

I think the solution mention by Daniel  drive me to the right direction, i will try it out.thanks guys!


在 2013年12月3日星期二UTC+8上午3时21分05秒,Andres Weber写道:

Chad Vernon

unread,
Dec 3, 2013, 2:25:32 PM12/3/13
to python_in...@googlegroups.com
Like Daniel said, you can iterate through all your joint poses and use the mesh with the old skinning as input to generate correctives for the mesh with new skinning.
Reply all
Reply to author
Forward
0 new messages