Tips for binding\painting weights


#61

Originally posted by SpiritWalker
what does Replace,Add,Smooth and Sclae means? i know how to work with them but i dont really know the definition of each one.

Replace, will change the weight value to whatever value you set times the opacity.

Add, will add (value * opacity) to the existing weight value, if you set the value to negative value it will do substract instead of add.

Scale, will scale (or multiply) existing weight value, value larger then 1.0 will scale the weight value up, while value less than 1.0 will scale the weight value down.

Smooth, will distribute value to surrounding vertex/CVs, so it works like smudging the value around.

To get value larger than 1 or negative you might need to adjust Min/Max value, and to keep value between a certain range you can use clamp Lower/Upper.

Flood will flood the value to all vertex/CVs like bucket paint in paint apps.

Unfortunately you can not mask the vertex/CVs like in artisan with the weight painting.


#62

Here’s the Quote from Jason S.

The best skinning rigs need NO paint work, as the model can change quite often within a production… and if you don’t have to manually paint anything, it’s much easier to swap in new geometry. The best thing to do is set up your skeleton so it works with minimal painting… that means putting influence objects and bones close to the skin & setting up influence objects which can help parts stretch and stuff.
:bowdown:


#63

but OMG I wish I’d have read some of this before I wasted so much time already : ) :wip:


#64

of course if you are working in games with a limited bone count…

We have manged to reduce the time spent weighting characters from up to a day (when we first started with Maya) to about 30 minutes, simply by modifying the mesh (edgeloops and vert placement) and the position of the bones within the mesh.

The techniques were not immediately apparent and sometimes contradict most of the info you read about modelling and rigging - the biggest issue we found was centreing the pivot in the mesh rather than pushing it to one side as you would do with a shoulder or elbow. This was also because we have to deal with multiple character meshes that all have to fit on the one rig, so a generic central position allowed greater variation in the mesh.

–magilla


#65

Quote by magilla:

the biggest issue we found was centreing the pivot in the mesh rather than pushing it to one side as you would do with a shoulder or elbow.

That makes a lot of sense. If you feel the tip of your elbow while rotating it, you will notice that it moves back and forth quite a bit, making it an inapropriate place to put a joint. The actual axis of rotation seems to go through two lumps on the end of the upper arm bone (humerus). I think the anatomical names of these lumps are medial and lateral epicondyle. (note: I have no formal anatomical education whatsoever, I just conclude this after studying my own elbow and consulting Sarah Simblet’s Anatomy for the Artist).

Personally, my biggest problem with skinning is in the workflow of transfering weights between meshes. A.t.m I’m working on a low poly character, where the topology of the mesh is very dependant on joint deformations, so I keep having to change the topology when I skin and thus having to re-skin. Now, since my topology is skin-dependant, I don’t want to start UVing seriously until I know my topology is right, and Maya’s weight export relies on proper UVs. So I’ve made a preliminary UV mapping, just making sure the UVs don’t overlap and are within the 0,0-1,1 UV space. But as soon as I make changes to my topology, I usually mess up the UVs. Quite a catch 22 there. Seems like your model and mapping has to be 100% finished before you even start skinning.

Anyway I really want a way to work more flexibly with modelling/UVing/skinning, where you don’t have to take a sort of assembly line approach (1 model; 2 UVs; 3 skin weights), so I decided to start coding a weight exporter/importer that’s more flexible (albeit slower) than the availible skin weight transfer scripts (Maya’s UV-dependant one, which, to add to the drama, produces huge filesizes, and S.D. Serbos’ and M. Bazhutkin’s exporters which are quite limited in respect to topology and that you can only export/import for single skin clusters and whatnot).

The one I’m working on will be
*UV independent.
*Topology independent.
*Able to transfer weights form poly to Nurbs, Subd to poly objects and so forth.

The way it works is it only exports the world space coordinates of the control points (verts/CVs) and their weights. When importing, it checks which points in the export list are closest (world space-wise) to the “importee” point and averages the weights of the exported points around it.

I’m quite new to both Maya and Mel (I’m a Max/Maxscript native) so it’s taking its time, but I should have a version up for testing next week. Also, I might have missed a feature or two in Maya, so if there’s any way to get around the above problems before I do any (more) unnecessary work on the script, please let me know.


#66

I have mentioned this very problem (UV weightmapping being absolutely useless) to the Maya development people - obviously to no avail, because 5.0 still perserveres with this ridiculous method (can you tell I’m not a fan of weightmaps?). It makes me wonder why they bother asking our opinions if they pay no attention - We even had a tech rep out at our office who couldn’t make it work properly. I think the problem is in the workflow - as Anders suggests - we always want to begin weighting and animating before doing final UVs.

Big Idea save weights mel (from highend) does exactly what you’re proposing with saving world co-ords, it also gives the option to use vert number. i find that either the MB weightsave script or the Big Idea script will give you the results you need dependant on whether you change topology or influence objects.

–magilla


#67

Big Idea save weights mel (from highend) does exactly what you’re proposing with saving world co-ords

:banghead:

Note to self: must remember to do better research before starting a script :hmm:

This is so typical! I just got some useful results from my script last night, only to find out today that I’ve been reinventing the wheel (well, that may be exagerating the significance of a weight exporter, but still).

Anyway, I think I’m gonna go ahead and finish it. I haven’t tried Michael Comet’s (Big Idea) script (don’t know if it works for PC even), but I’ve browsed the source and it seems to work a little bit differently. For one, mine’s not limited to one skin cluster. Secondly, mine doen’t just match the closest point within threshold, but finds any number (set by the user) of exported points within the distance threshold and either averages their weights based on their distance from the selected point or averages their weights evenly or mixes between distance averaging and even averaging using a bias value. On the other hand, mine doesn’t give the option to use any local space, only world space, but I might add that.

I’m also planning to do some kind of mirroring stuff, i.e. ignoring exported points on one side of the mirror axis, plus some kind of interactive export joint/import joint linking (in case the import joints have different names than the export joints), but not in this version.

Regarding weightmaps, I think they’re supposed to be very useful when working with Nurbs, since Nurbs get proper UVs on creation, but a lot of users never touch Nurbs, especially for character stuff.

Thanks for the heads up about the Big Idea script.


#68

mirroring:drool:
I’ll be looking forward to that…

–magilla


#69

mirroring:drool:
I’ll be looking forward to that…

–magilla


#70

OK, I’ve finished a test version of the script.

Get it here.


#71

hi guys and gals, have you ever thought while painting smooth skin weights with artisan that the influence object list is pretty short in the Tool options window? If this is the case I may have a useful hint for you (unless you already know it of course) how to make this (short) list loooonger.

The length of the Influence list is defined in a MEL file called artAttrSkinProperties.mel which should reside in your maya/scripts/others directory. To change the length of the list do the following:

  1. make a backup of artAttrSkinProperties.mel !!!
    1a. Read the notes on the top of the file (modify at your own risk!)
  2. open it in your favourite text editor
  3. change line no. 149 which should read something like:
    frameLayout -l "Influence "
    to
    frameLayout -l "Influence " -h 800
    this changes the height of the frameLayout in which the list resides
  4. change line no. 66 which should read something like:
    textScrollList -w 240 -nr 7 -ams false
    to
    textScrollList -w 240 -nr 56 -ams false
    this actually changes the number of Rows displayed in the Influence object list.
  5. save it and restart maya
  6. check the list (you might have to make the values fit your screen/personal comfort, I use it on a 1600 * 1200 screen)

You should be doing this only if you feel comfortable and know what you are doing. Your Admin/coworkers might not like the idea either of changing standard MAYA scripts, so make sure you don`t get yourself in trouble.

cheers
(back in skinning biz)
buexe


#72

edit to my last post:
3. This line is actually line no. 120 ( I claimed it to be no. 149)
frameLayout -l "Influence "

sorry about that : )
buexe


#73

David Walden wrote:

I think I would almost prefer weight painting…

First, I’d be using Blendshapes for almost every joint anyway, with or without weight painting. I love it, it’s the only tool that can give me the control and feedback I need in order to get in the Zone when sculpting. Clusters? Maybe, but would probably take about as long to set up, I guess it’s a matter of taste.
Second, I do what kmp3d does, I skin and unskin a hundred times before a character is done, so I save a LOT of time if I can skip the weight-painting.
Third, if I did paint, it would probably be slightly different each time, and so probably screw up my Blendshapes (or whatever Clusters or Influences you prefer), and so require lots of additional tweaking for each new unskin-skin cycle.

kmp3d, hey I thought I was the only one doing it that way! :slight_smile:


#75

Skinny Version 1.3 for Maya

With Skinny you can make Sets for all the body parts and area you want the paint individual.
That way you wouldn’t affect other areas by mistake. As you know Maya have “normalize weight”- feature that change skin value, special while using the brush Smooth.

Body part Sets is the best way to skin huge amount of joints and influence objects. If you ever tried to skin a character with lots of joints + influence objects, you got hard time dealing with all of them. with body part Sets ( “IndexFinger”, “LeftLeg”, “Neck” ) you can work on selected joints without huge list of all the joints in the character

More Features:
-Smaller and faster Paint weight UI then Maya’s
-Rotating Joints while skinning. Excellent feature for seen the skin in action without leaving the skinning process.
-List Joints by: alphabetical, By Hold , Graph order.
-Hold Joints & influence by: Selected or All
-Mirror weight, Prune Weight.

You can download it from Highend3d.com
http://www.highend3d.com/maya/mel/?section=artisan#2950
Or search “Skinny”


#76

Stahlberg wrote:

I’d be using Blendshapes for almost every joint anyway, with or without weight painting. I love it, it’s the only tool that can give me the control and feedback I need in order to get in the Zone when sculpting.

I find this appealing, especially as weight painting suddenly becomes somewhat of a non-issue. However I have found it very difficult to “sculpt” with any precision when the bone is rotated because the vertices local axes are in some wierd xyz-space.

Now I think I have found a partial work-around. I would be interested in comments, since I have only done limited testing.

Smooth bind meshA to the skeleton.
Rotate the joint as required.
Duplicate meshA (without history) - this is meshB.
Make a connection: meshA.outMesh --> meshB.inMesh
Edit the shape of meshB as required.
Return the joint to the bind angle.
MeshB will straighten out, and most likely look strange.
Duplicate meshB (without history) - this is meshC.
Create a blendshape for meshA with meshC as the target shape. The blendshape must be created with deformation-order=“parallel” in the advanced tab.
Use driven keys to associate the joint rotation with the blendshape target amount (or do you guys use expressions for this?).
(You can delete meshB)

This method allows the sculpting of the blendshape target to be done much more easily. A limitation is that you cant interactively rotate the joint during the sculpting process.

So far I have been pleased with this work flow, but have yet to use it in a complex character rigging.


#77

That’s a very cool method, it is a pity it is rather complex to setup for every joint. I have been using this (http://www.animagicnet.no/maya/bodyShape/) to do exactly the same thing - in a rather brute force way. It takes rather a long time to compute on heavy meshes, but works perfectly for low-poly (or sub-d) meshes.
btw - I never use expressions in character setup, if you use referencing the expressions don’t work anymore since they are name based (and referencing changes the names of everything). Unless of course DW has made another magic mel that deals with this :slight_smile: .


#78

re: Bodyshape

Thanks Magilla. I just had a look at the website, and it looks like a great solution. Do you know if it works with maya 6 ? (I wont get a chance to try it myself for a while)


#79

no, it only works with 4 (haven’t tried 6, but it doesn’t work with 5). I make (import) my mesh and unrigged skeleton in 4, default weight/bind to skeleton, create all of the blendshapes and bring them back into 5 and connect the rig.
–magilla


#80

There is a version of bodyShape at highend3D (version 1.1) that supposedly works with Maya 5. I haven’t actually tried it (yet), but you might want to try it, since it sounds like it’d take a fairly large chunk out of your workflow.