… surely it’s just easier to have an explicit “mode” for weight painting that acts like the maya one… either automatically acting on bone weight groups or acting on an arbitrary user defined group…
you could just toggle it “on” or “off”
when on:
all bone influences are visualised normalised (and perhaps actually set to a normalised value?) and whilst I paint more influence into one map all the other bone maps influencing the painted vertices get the value proportionaly reduced…
the values i paint are explicit and stay as I painted them…and the values on all the other bone maps are normalised to reflect the values in this “active map”…
if this mode is “off” then it acts exactly as now…
no complicated rules or special cases… just a mode toggle for those that want it.
Just want to clear up a couple things I think might be confusing you…
so this functionality runs in the bacground
No, it is an executable script. You click the button, and the weight maps update according to the rules I mentioned.
What if multiple groups are at 100%?
Please read rule 2 again…
Not necessarily… if the head map was originally 90% and the jaw was 75%, the head map would end up with greater influence, and they would even out closer to 50% each… 90%+70% = 160% becomes 56.25%+43.75% = 100%
not what you want in most cases
Not on the first pass, but then you paint again and click again… keep updating the weights and you eventually hit your target.
Remember this script would work in conjunction with the traditional blender workflow as well!
from a workflow POV this doesn’t solve a thing… In that example and moset I want an explicit 75-25 split…
In this case, you would have to manually paint the explicit weight you want for each group… Once you’ve painted one group 75% and the other 25%, it equals 100% so it will stay that way unless you change the weights yourself.
… surely it’s just easier to have an explicit “mode” for weight painting that acts like the maya one… either automatically acting on bone weight groups or acting on an arbitrary user defined group…
you could just toggle it “on” or “off”
when on:
all bone influences are visualised normalised (and perhaps actually set to a normalised value?) and whilst I paint more influence into one map all the other bone maps influencing the painted vertices get the value proportionaly reduced…
the values i paint are explicit and stay as I painted them…and the values on all the other bone maps are normalised to reflect the values in this “active map”…
if this mode is “off” then it acts exactly as now…
no complicated rules or special cases… just a mode toggle for those that want it.
Yes, regarding this issue I think it’s best to quote Peter Sikking: “This is not a case where we can rundown one change… ever done and everybody is happy, so we gonna need two modes”. I just hope I’m not misquoted him)
blender’s bone weight system as it is right now has a big issue–like in my video, a single vertex or group can be affected to have an infinite% influence from other bones. A vertex that has a max 100% influence is easier to work with.
I think a toggle is a great option–keeps everyone happy
My only question about the toggle method is how do you turn it on and off?
I mean… how does it handle the groups. If you have overlapping weights and you turn it on, it would have to re-balance the weights according to the 100% limit. How would that be done?
Mr Zombie: you need to take account of the initial normalisation and then the results of editing to scale it back to the standard blender way of doing things…
It’d either normalise the weights when you turn it on as if you’d actually run the normalise command…
or it’d work in “display” only… the results could just be scaled as if normalised… then calculated back to whatever the original values were…
as an example with three bones… all at 100% influence…
in this mode they’d each show as having 33% influence ( the normalised result)
As I weight paint into map #1 (say I paint some vertices with the brush at 50%) those vertices will display as 50% (what I painted…) if I look at the other two maps in this mode they’d look like those vertices had been reduced to 25% rather than 33%…
on exiting the mode we wither keep these "normalised"values or scale the strengths of the original influences… the vertices in question for map 1 would now be (50/33)*100 = 151%
like in my video, a single vertex or group can be affected to have an infinite% influence from other bones. A vertex that has a max 100% influence is easier to work with
Ummm … where is the “infinite% influence” in your video ? … In so far as I understand 100%/red is the max … and always less then then 100% in actual influence when another bone overlaps the group never mind the color …
I usually either let bone heat do the skinning or manually assign weights in Edit Mode or a combination of both and usually avoid weight painting all together, and I usually just work out the weight relationships if they overlap … Having said that I can see why some one would find it disconcerting that the color map often seems to not reflect the actual behavior/influence of the VG …
Weight Paint seems to have some more display issue along side this one (try using the face select mode with a mesh with interior faces) …
My only question about the toggle method is how do you turn it on and off?
I mean… how does it handle the groups. If you have overlapping weights and you turn it on, it would have to re-balance the weights according to the 100% limit. How would that be done?
How about this - when you want weights to overlap you can select more then one bone to weight paint on when you toggle on the normalizing weights option ? You keep the color scale when painting, but depending on the number of bones selected the normalizing mode calculates the actual weight . The actual weighting would be done on the last bone selected, but the weights for the others would be visible . One of the reasons why I avoid weight painting is that you have to annoyingly switch between bones to see the weights …
I mean… how does it handle the groups. If you have overlapping weights and you turn it on, it would have to re-balance the weights according to the 100% limit. How would that be done?
If ‘auto-normalize’ had just turned it on, I’m assuming it wouldn’t enforce itself until you began to paint. And then, as Micheal W says, the group being painted would take precedence over its neighbors.
So for the head/jaw example, if you had ‘auto-normalize’ off - and say some vertices were done at Jaw = 25%, Head 80%.
You then turn on ‘auto-normalize’ and you began to paint the Jaw with 75 % opacity, the Jaw would take 75, and the Head 25.
Whatever group, and to what strength you painted would determine how exactly the rest of the armature got normalized as well.
Because the jaw is the child of Head, and it took precedence, and then the Head takes precedence over any overlap between it, and say, the neck, or clavicle, or whatever is further up on the hierarchy.
The only question is, what happens if the hierarchy is broken?
It’d either normalise the weights when you turn it on as if you’d actually run the normalise command…
or it’d work in “display” only… the results could just be scaled as if normalised… then calculated back to whatever the original values were…
I’m not clear why you would want to change the weighting at all when turning it off? I mean, to introduce the mode… you need to normalize. In other words you need to do exactly what I was saying with the idea I presented. The advantage of doing this with a script instead of a whole mode in my opinion is it allows both behaviours to co-exist. You can run the script from the console that will normalize the weights… and then you can continue painting as usual…
But I also see what the problem you mention, that when you’re in a mode the updates to the weight maps are instantaneous, and so as you add to one group, it removes from the others, instead of averaging all of the groups periodically.
Vertex Pusher,
One of the reasons why I avoid weight painting is that you have to annoyingly switch between bones to see the weights …
I agree, some sort of display for all the weights at once, which also clearly shows which ones you have selected, would be a very clever and useful thing to have! Selecting more than one bone for the normalizing to act on is a good idea too. Certainly would offer control over the process.
Mikahl,
I am unsure of what you are thinking here… taking the hierarchy of the bones into account for weight values sounds like a quick way to create a mess! Also,
I’m assuming it wouldn’t enforce itself until you began to paint.
I don’t see how that could work. If the weights are more than 100% while you’re in a mode that only allows a max of 100%… just doesn’t seem logical to me. Maybe I’m wrong.
@feelgood comics:
the option to normalise or not is simple with the maths I outlined… It means that you have the option to work visually and yet remain compatible with the existing systems… it doesn’t force normalisation upon you but acts easily as if it has.
the “problem” as you put it of instantaneous updates to the other maps is the whole point? it’s the feature isn’t it?
On another note:
With visualising multiple bones I “get it” if theyre just “1 bit” 100% or 0% weighting situations… but how do you tell what is weighted to what when you have a range of values between bones?
It’s quite nice to just click through them to check.
the “problem” as you put it
I was referring to my idea. The script would average the weights between all groups, and not give precedence to any except ones that are 100%…
edit: If it was a mode preference would be given to the active group - as you painted, values would be taken from the other groups and added to the active one…
But I don’t understand your idea feelgoodcomics
Suppose you were in the usual mode, and had a vertex, being controlled by two bones, both at 100 percent. Both those bones would be given precedence in your script! Which bone would get it?
@ VertexPusher : That’s a cool idea! That way you could see the implications of painting one map on others quickly. But I think you’d need to use alternating hues, not the current coloring system.
But I don’t understand your idea feelgoodcomics
Suppose you were in the usual mode, and had a vertex, being controlled by two bones, both at 100 percent. Both those bones would be given precedence in your script! Which bone would get it?
both would get 50% weighting. If you think about it, that’s what currently happens when two 100% groups overlap… the behaviour is 50% each.
With visualising multiple bones I “get it” if theyre just “1 bit” 100% or 0% weighting situations… but how do you tell what is weighted to what when you have a range of values between bones?
Well if you are nomalizing then the function would update the weight scale accordingly so where the overlap occurs it would be “yellow” for 50% for say 2 bones (maybe as the default normalized value ?) . But if you decide you want to increase the value for one bone (the last selected) to 75% “orange” then you can and the map will show that so if you then multiple (shift-select I guess ?) select the other bone the changed weight value will be shown as 25% “green” where the overlap happens . You could always have the last selected bone as the “primary” bone where and if they overlap … This way you would know exactly where the overlap is visually . Right now it is a bit of a guessing game with the single bone selection …
Do I understand you correctly in that after you change “default mode” to “auto-normalize mode” and…
10.0, 50.0, 125.0 are normalized to 0.0540540540541, 0.27027027027, 0.675675675676…
and then, after you applied some changes in this “auto-normalize mode” you want to return to “default mode” and have 10.0, 50.0, 125.0 back, but with applied changes you done in “auto-normalize mode”?
If that is the case, then I didn’t take that in to account, because I didn’t think anyone would want it at all. Because as kakapo said in “Blender 2.5 Development Updates” thread:
Then why anyone would need old “non-normalized” values back? They could either not use “auto-normalize mode” at all or use normalized values since they will work just as fine.
Why would anyone want to jump back and forth between the two?)
I don’t know why someone would want that, and you’re probably not missing anything…
BUT in most cases where you think “no one will want that” someone comes up with a strong case where they would…
I made the proposal deal with all cases flexibly so that it’s easy to see that it’d work with weight as they are now or outputing normalised values… it doesn’t matter to the proposal.
One case I can think of is someone just entering the mode then exiting… if just entering then exiting the mode normalises your maps then it’s counterintuitive to have to undo those changes that have occurred to your data… that could very well be seen as a serious bug…
…but only because you’re not looking at the normalised influence of that bone
Well yeah, but even when you use bone heat sometimes the weighted values are somewhat mysterious - areas that do not overlap are not designated at 100% red influence either (I believe this had to do with the distance of the bone to the vertices) …
I just think that it would be nice to be able to see all the weight maps in relationship to each other … Come to think of it, I vaguely remember that the BBB team was able to show the entire weight map of BBB himself when they introduced the custom weight map option … or is that a wishful memory ? Maybe it was a UV map tool ? …
Then why anyone would need old “non-normalized” values back? They could either not use “auto-normalize mode” at all or use normalized values since they will work just as fine.
Why would anyone want to jump back and forth between the two?)
Or am I missing something completly?
Well as the first post points out, the current way weight maps are visually represented can be disconcerting and disorienting when in Weight Paint Mode . A VG can have any range of values from 1.0 to 0.01 but still have 100% influence if there is no overlap . And also as discussed here where and if VGs overlap has no clear demarcation where no normalizing visual feed back is available …