Remove influence from object's vertex


#1

Can we do it? just select a few specify vertex from bind skin object and remove influence from joint. For example, i have a sphere bind by 4 joint in a chains. I want to remove influence of half sphere vertex from 2 joint, and keep the other 2.
Anything would help. Thanks


#2
  Hi,
  I think any influence you remove has to go somewhere else.  So if you remove influence from a vertex it is the same as saying what thing should take up that vertex's weight.  Here are a couple of suggestions and there definitely may be some mistakes.
  
  1. If you don't want a joint to have any influence you may not want to bind it to the geometry in the first place.
  
  2. If youre okay painting lots of weights, flood and holding weights are tools that can give you lots of control.  It may be a little harder using these on the whole model and still take advantage of automatic skinning algorithms.
  
  3. If you want a joint to have a little influence but not none you may not want to bind it initially and instead use it as an influence.
  
  By adding it as an influence we can have full control of the specific vertices it will control (after adding it as an influence selecting specific vertices and flooding weight 1 only on those vertices). I think another reason this is favorable to 2 is because we can use automatic skinning algorithms and still have specific control of areas.
  
  4. It may also be helpful adding geometry as an influence.  Why add a geometry influence over a joint influence? I think one reason is the shape of the added geometry will give some automatic weighting for more areas when initially added than a single added joint influence, I may be wrong in this though.
  
  
  Hope this is helpful,
  Regards,
  Nate

#3

Thank Nate
I understand what are you saying, but look like it’s not what i’m looking for.
In my case, in the first place, i setup, and skin a model with max influence is 3, however, our company want it to be 2. Well, we can open all our scene and skin it over, or we can write a script to automatic do it for us. And if we do so, we will need to do on specific vertex, so that’s what i think.

if we use the “set max influence” in edit smooth skin, all the skin weight will be average, and we have to paint skin again. That not our purpose.

But if you have any better idea, please share it with me.
Thanks


#4

Hi Tuan,

Heres another suggestion and it still may be of no help. I haven’t tried this out yet to see if it worked and I may have made some mistakes.

say currently
vtx 5 now has max 3 influences.

joint_1		joint_2		joint_3		joint_4
0.3		0.6		0.1		0.0

And goal is for it to have max 2 influences.


What should be removed? Suppose its joint_3 then where does the 0.1 go is it
		
joint_1		joint_2		joint_3		joint_4
0.3		0.7		0.0		0.0

or

joint_1		joint_2		joint_3		joint_4
0.4		0.6		0.0		0.0

or

joint_1		joint_2		joint_3		joint_4
0.0		0.6		0.0		0.4

or instead should it be joint_1 going, or joint_2 ?

This is a suggestion based on what the furthest influence is to a specific vertex. As long as there are more than 2 non zero influences on this vertex,
the influence farthest from vertex eventually gets 0 weight for it. All accumulated weights from these “zero influence” joints get summed together and put on one of the 2 influences that are left.

I think this idea has quite a few operations like for every vertex were computing its distance to every influence (~ number vertices * number influences) many operations, probably a c++ solution is helpful, or this could be made more efficient.


For each vertex of character…
suppose were at vtx 5

  1. mark all that started at 0.0 (could have an epsilon so if started within .0001 of 0.0 then count it as 0.0) for vtx 5 as zero influence, example joint_4 marked as “zero influence” (it will not get any added weight later on)
    so it is something like
joint_1		joint_2		joint_3		joint_4
?		?		?		"0.0"   (the reason for quotes are that this is not "set" to zero yet just marked)

  1. if there are at most two joints un marked by 1) were done there are at most 2 influences already exit loop for this vertex. otherwise continue to 3)
    Here there are 3 unmarked so we continue to 3).

  2. of all the remaining influences (joint_1,joint_2,joint_3) which is furthest from vtx 5, suppose it is joint_3. So save its “accumulated weight” of 0.1 and mark joint_3 as zero influence.

joint_1		joint_2		joint_3		joint_4
?		?		"0.0"		"0.0"
  1. While there are > 2 joints with non zero weight repeat 3 and don’t overwrite saved weight but add to its weight.(0.1 + new)
    Here there is no new because we have <= 2 joints with non zero weight (joint_1,joint_2)

5)Once down to two joints (joint_1,joint_2), which of them is furthest to vertex, suppose in this case joint_2 is furthest. So mark joint_1 as “accumulate influence” (it will get all the accumulated weight)

  1. Heres is where we do all the setting of weight for this vertex. In one skinpercent command set all marked zero influence to zero and set the single marked “accumulate influence” to its original weight plus the accumulated weight here its original weight is 0.3 and the “accumulated weight” is 0.1 so joint_1 gets (0.3 + 0.1 = 0.4), set the other influence joint_2 to its original value of 0.6.
joint_1		joint_2		joint_3		joint_4
0.4		0.6		0.0		0.0

vtx 5 now has max 2 influences.


Hope this is helpful
Regards
Nate


#5

Thank Nate for your very detail reply.
I think i had misunderstand about the max influence, but way to go, that’s what i’m going to do too. I will get the smooth skin information of each vertex and compare it to each of other to find out which one is less, set it’s to zero. But create a distance beetween will make it much more accuracy, i will go with this.
Once again, thank for you help.

btw, the distance from joint to vertex is start from the joint local pivot, right?


#6

Hi Tuan,

yeah, i think so.

Regards,
Nate


#7

This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.