[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