[Bf-funboard] Some skinning feature ideas

Michael Crawford psyborgue at mac.com
Tue Apr 3 08:48:36 CEST 2007


On Apr 3, 2007, at 12:56 AM, Benjamin Tolputt wrote:

> Michael Crawford wrote:
>> Why do you need it to be red?  I usually use bright green as my  
>> "max"... it allows me the flexibility to later add weight should I  
>> need to.. It's all relative man... there is no need for absolutes :P
> No need whatsoever for it to be red - it just happens to be a blue 
> (0.0)-to-red(1.0) colour-scale in my default environment, hence my  
> usage of said hue :) It could just as easily be the Maya default of  
> black(0.0-to-white(1.0)
>> Actually, i believe the design is the problem, not the  
>> implementation.  forcing all weights per vertex to add up to 1...
> I disagree with this one. In essence, regardless of the value that  
> is present as the influence in terms of what you enter & see - the  
> end result IS a normalized value used in deformation. You may have  
> three bones affecting a vertex with each attributing a value of  
> "2.5". however internally - this is normalized to each bone only  
> having 0.3333 influence over the vertex deformation. I am of the  
> mind that if it WORKS that way I should SEE it that way.

I get that.  But What If I want to add influence to just one bone,  
without influencing the weights any other bone.  This makes a lot of  
sense when you have more than two bones influencing a single vertex  
if you think about it.  With any system, I grant you, painting  
weights can be a balancing act, but What I do is consider light green  
to be my "max influence".. and incase i ever want a little more  
influence here or there, i just add it.  or I can subtract it... I  
just have a sytem in my head (bright green = normal) and it just  
works.  Furthermore, how do you propose such a system would work with  
envelope "mult" mode?

Listen.. I used maya a lot... a lot a lot a lot.  I know the pain of  
having to use the component editor spreadsheet to find stray  
influences too small to otherwise see (float values have more  
precision than the 256 discreet values seen on screen, if your eyes  
are perfect)... Alias has a lot of money at their disposal and could  
easily fix the problem... As much as I knock them as idiots (ok...  
some of them are), If you've used maya for long enough you can see  
the design flaws in their system.  My guess is that they would scrap  
it if they could but they have already committed themselves to the  
system.

You have your mind around this "sand pit" idea, where you have one  
cup of sand and it needs to be evenly distributed in all the little  
containers to balance out to 1.  Think of blender's weight painting  
as masks, for the influence of bones... they can intersect and  
overlap etc...  I can get where your visualization problems are  
coming from your point of view, but in my experience, the real  
refinement to weight painting comes during the range of motion  
testing phase, during which it is really really handy to just be able  
to "add a little influence here" to get that one vertex where it is  
supposed to be.  In the initial painting, i just keep in mind: green  
= normal, red = bones close to skin (elbows and such)...  Since  
"sand" isn't constantly poured around, I don't need to worry about  
that stray .0001 weight becoming .25 when i try and smooth out  
influence.  The system, as it is, is much more flexible, than  
maya...  Thank St. Ton for Blender doing the normalization in the  
background rather than bother me with having to worry about it.  
You've challenged me to make a "can maya do this" rigging test.   
Perhaps i'll do it next weekend and post a link here.

> On a side note - technically, the only time the "smooth/subtract"  
> operations need to deal with where it will spread the other weight  
> values to is when there is only one bone influencing a vertex.

Well that too, but there is another case:  default weight assignment,  
and a casual mistake.  For example.  I'm painting the underside of a  
foot using maya (and I'm a student so I don't mask a selection in  
component mode first).. during that process, i accidentally spray the  
edge of the ear... the influence is small, say .1 .. later on, i go  
on to rig the head, and i'm smoothing out the influences between the  
head and neck.  It all looks really nice when I start smoothing, but  
when I animate... whee.. every time the foot moves, the charachter  
looks like spock....  This can result in some pretty humorous  
glitches, but i have seen students break down and cry when this  
happens during the last week of class and the animation is due.  Oh..  
but it's easy to fix right?  Wrong.  Most students don't know about  
the component editor, so they just "set influence" to 0 for the foot  
bone on the neck.. problem solved right?  Wrong... now you got that  
influence spread between the head, neck, and by default one other  
bone (3 influences per vertex default in maya)...  So now we have . 
333 added to each of those three bones.  now try smoothing again...  
and what happens?  the shoulder gets some stray influence... after  
which you end up harassing the teacher, saying "oops... i didn't do  
what you said and now it's borked... can you fix it for me"  You see  
the problem with pouring sand now?

What happens if i make that same mistake in blender? i simply go back  
and remove the foot's influence on the head.  I don't have to mess  
with the weights on the head or neck anymore.  Those won't change   
Most of the time, I don't worry about .0001 influences anyway since a  
little bit of random movement isn't going to hurt anybody...  If i'm  
really anal, i can use the afore mentioned script to prune those  
weights.

I'm begging the devs listening:  Don't change the way it works.  It's  
perfect... perfect, as it is.  Don't try and make it like maya.. It  
will end up being a 600 mb piece of bloatware, stuffed with stale  
code, thousands upon thousands of bugs nobody knows how to fix, users  
who hate you, many suicidal students, and your kids will grow up  
gay...  Keep it simple.  Transparently normalize per vertex in the  
background like it's done now.

> In these situations I am happy with two possible solutions.  
> Firstly, if there is less than 1.0 weight to the vertex overall -  
> let it only be "partially deformed". That is, make a "dummy"  
> identity (null) influence take up the slack and, when deforming,  
> the vertex only partially moves with the bone. The other solution  
> is to simply have an "all or nothing" approach. Either the vertex  
> has all influence tied up with the bone or none. If the user wants  
> to have the vertex move with another bone - it makes more sense for  
> them to add weight to that bone manually then to have Blender  
> "guess" where they want the left over weight to be attributed.
>> Your concern, as far as I understand, is for stray influences.   
>> Why not just use Paint>Clean Weight
> You are correct - my primary concern is stray influences. However,  
> I am also concerned that what I can SEE does not match how it WORKS.

Ok.  I get that.

But if I can wrap my mind around a new way of thinking about painting  
weights, so can you.  I've "converted" several maya users at my  
university to blender, and not a single one wants the old system of  
"paint weights" back.

> Given that I am painting the weights manually, I want control &  
> knowledge over what my painting this vertex to weight "1.0" means.  
> With the current system, when painting vertices to "full weight"  
> for a bone, the end results depends on how many other bones have  
> been allocated to the vertex.

Yes.  And it allows me to be flexible as to how many bones influence  
each point.

> If this has come from an "automated" method (e.g. having Blender  
> give you a starting weight based on bone envelopes)

There is a script for that if you really really want to do that.

- OR -

Use mult mode like I do until you get the weights nailed down for the  
adjacent bones (or keep it if it's good enough).  Go to edit mode for  
the armature (i think it works in pose as well), and turn the "mult"  
option on.

> - this is undefined and requires you to go through each vertex or  
> bone one by one and remove weights you don't want it to have.

You don't have to initiallly assign any weights as all.  Like I said,  
Envelopes can be used in conjunction with vertex groups.

> This negates most the benefit from having a weight "paint"  
> interface and an algorithmic method of assigning the starting weights

Again.  There is no need for start weights.  You're thinking "sand"  
again.  (does anybody else get my analogy or should I think of a  
better one?)

> (if I have to go through all bones anyway - where is the benefit of  
> precalculating "best guess" weights in the first place!)

none whatsoever  Use envelopes and mix influence with vertex groups  
via mult mode.  Red overrides completely...

> Regards,
> B.J.Tolputt

Peace,
Mike C




More information about the Bf-funboard mailing list