v1.0
Applies an operator that limits the number of envelope deformers that can
affect a given vertex. For a given integer limit, the operator ensures the
limit is met by removing the deformers with the minimum number of weights.
The remaining weights are then normalized.
The limit respects locked weights, meaning that if the minimum weight is
actually a locked weight, it is not removed. Similarly, if the only remaining
weights after applying the limit are locked, normalization will not be performed.
oReturn = LimitEnvelopeDeformers( PropObj, [SubComp], Limit ); |
Returns the newly created LimitEnvelopeDeformersOp operator.
Parameter | Type | Description |
---|---|---|
PropObj | String | Envelope weights property to be modified. |
SubComp | String |
List of points/objects/clusters to be smoothed. Default Value: Current selection |
Limit | Integer | The maximum number of deformers permitted to affect a given vertex contained in SubComp |
NewScene(null, null); // Create a cylinder to be deformed CreatePrim("Cylinder", "MeshSurface", null, null); SetValue("cylinder.polymsh.geom.subdivu", 20, null); SetValue("cylinder.polymsh.geom.subdivv", 20, null); SetValue("cylinder.cylinder.height", 12.264, null); Create2DSkeleton(0, -6, 0.6, 0, -5.25, 0.525, -5.7, 0, 0, 4, null, null); // Create a chain of bones to deform the cylinder with AppendBone("eff", -0.16, -2.5, 0.25, null); AppendBone("eff", -0.12, 0.6, 0, null); AppendBone("eff", -0.12, 3.4, -0.34, null); AppendBone("eff", -0.12, 5.7, -0.57, null); AppendBone("eff", -0.12, 6.5, -0.65, null); // Deform the cylinder SelectObj("cylinder", null, true); ApplyFlexEnv("cylinder;root,bone,bone1,bone2,bone3,bone4,bone5,bone6,bone7,bone8,bone9,eff", null, 2); SelectObj("eff", null, true); Translate(null, -4.8, -8.4, 0.84, siRelative, siView, siObj, siXYZ, null, null, null, null, null, null, null, null, null, 0, null); SelectObj("cylinder", null, true); SetValue("cylinder.polymsh.cls.EnvelopWeightCls.Envelope_Weights.autoenvassign.defnbskelobj", 4, null); // Open the weight editor to look at how the bones are assigned OpenView("Weight Editor", null); LockEnvelopeWeights("cylinder.polymsh.cls.EnvelopWeightCls.Envelope_Weights", Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), Array(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4), null); XSIUIToolkit.MsgBox("Note that in the Weight Editor each bone is affected by four deformers, and some of the weights of bone3 are locked. A limit of 2 deformers will now be applied."); // Limit to two the number of deformers that apply to a given vertex LimitEnvelopeDeformers("cylinder.polymsh.cls.EnvelopWeightCls.Envelope_Weights", null, 2); XSIUIToolkit.MsgBox("Only two deformers are permitted to affect a given vertex, and the weights have been normalized. Note that the locked weights were not modified."); |