Overview

The DPK_bcs node implements the BCS deformation algorithm. It is the heart of the system and takes all its input data to produce the deformed output geometry. Furthermore, it is responsible for producing, converting and updating the deformation data of its dataPoints, using either previously stored data or connected geometry.

The internal relationship between the attributes of this node is extremely woven and hard to manage by hand. For this reason, you should use the DPK_bcs command for most of the operations that alter a BCS setup. This command knows the effects of its operations on the setup and handles all secondary actions required to produce a valid node configuration.

Node nameParentsMFn typeCompatible function sets

DPK_bcs

MPxDeformerNode
(has all attributes of “weightGeometryFilter”)

kPluginDeformerNode

kBase
kNamedObject
kDependencyNode
kGeometryFilt
kWeightGeometryFilt
kPluginDependNode
kPluginDeformerNode

Attributes

Note that the attributes of the weightGeometryFilter node are not listed here. Please refer to the Maya documentation for a list and description of these attributes.

The listed flags have the following meaning:

A

(Array)

This attribute contains an array of values of the specified type. To access an individual element, use the MEL construct “node.attr[#]” where # is the index of the element.

O

(Output)

You can connect this attribute to an input of another node.

I

(Input)

You can connect an output of another node to this attribute.

C

(Connectable)

You can connect this attribute to a compatible attribute of another node.

S

(Stored)

The value of this attribute is stored with the scene file.

K

(Keyable)

This attribute can be keyframed.

H

(Hidden)

This attribute is not visible in the attribute editor.

Warning

Please note that even though many attributes are configured as being inputs, outputs and/or connectable you should only access them as described below.

Long name (short name)TypeDefaultFlags

bcsIsDirty (bid)

Message

n/a

H

For Internal Use Only

This attribute will be set to dirty whenever the internal data has to be updated. It is used to minimize redundant calls to the updateNode() function.

freezeInput (fi)

bool

true

O-I-C-S

Controls whether input geometry changes trigger a complete update of all internal deformation data. Such input changes occur very often, even when the final object is just moved through the scene. It is therefore strongly recommended to leave this attribute true unless you really need the input data to be re-read. For more information, see Freeze Input.

You can use the -fi flag of the DPK_bcs command to access this attribute.

separationPatternL (spl)

string

"%sL"

O-I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -sep "l_%s" "r_%s";

The separation pattern for building the left weight names out of the weight’s main name. During name construction, the string "%s" will be replaced with the name of the control weight.

separationPatternR (spr)

string

"%sR"

O-I-C-S

Should be accessed through the DPK_bcs command only

Same as separationPatternL but for the right version of the names.

weight (wt)

float

0.0

A-O-I-C-S-K

This is the interface for animating the deformation of a BCS setup. The elements of this multi attribute are given alias names and appear with these names in the Channel Box. You can use these attributes like any other animatable attribute in Maya, including connecting it to other attributes.

There is much more information about each individual weight than just its value. To store and maintain this information, the node has a multi compound weightData with corresponding elements. Its children store all the info.

When the weight data is changed using the command, this multi attribute is updated to reflect the new weight configuration. This includes:

  • Removing elements - Happens when weights are deleted or bilateral weights are converted back to normal weights. This can affect both, the last element and/or inbetween elements.

  • Adding elements - Happens when new weights are created.

  • Duplicating elements - Happens when normal weights are converted to bilateral weights. New elements can also be added between existing elements. Note that the current value and all incoming connections are copied too. Animation curves, however, are duplicated in order to allow independent animation of the new element.

  • Moving elements - Happens when weights are reordered and when converting normal weights to bilateral weights. All data is preserved, including the value and incoming and outgoing connections.

  • Renaming elements - Happens when weights are renamed or when the separation patterns are changed.

This multi attribute is managed to never become sparse—that is, there are no unused indices up to the last existing element.

weightData (wd)

compound

n/a

A-O-I-C-S-H

Children should be accessed through the DPK_bcs command only

This compound stores the complete configuration of the weight space.

weightExists (wex)

bool

false

O-I-C-S

For Internal Use Only

weightName (wn)

string

NULL

O-I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -weight 2 -name "newName";

The name of this weight. If this weight is bilateral, the separation patterns are used to build the two alias names for the weight attribute.

weightIsBilateral (wib)

bool

false

O-I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -weight 2 -bi true;

Stores whether this weight is bilateral. If true, dataPoints using any of its weightPositions will have two automatically created unilateral versions—one left and one right.

weightNeutral (wne)

float

0.0

O-I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -weight 2 -wn -1.5;

Where this weight has its “neutral” value. Non-zero values are experimental and should be used with care.

wPosGrps (wpg)

compound

n/a

A-O-I-C-S

Children should be accessed through the DPK_bcs command only

Stores the configuration of the weightPositions and weightPositionGroups of this weight.

wPosGrpId (wpgid)

int

0

O-I-C-S

For Internal Use Only

The unique ID of this weightPositionGroup. No other wpg of this node can have the same ID.

wPos (wp)

compound

n/a

A-O-I-C-S

Children should be accessed through the DPK_bcs command only

Stores the data of the weightPositions of this weightPositionGroup.

wPosId (wpid)

int

0

O-I-C-S

For Internal Use Only

The unique ID of this weightPosition. No other wp of this node can have the same ID.

wPosPosition (wpp)

float

0.0

O-I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -wp 2 -wpp 0.75;

The position of this wp on its weight. If the weight is at exactly this value, the weightPosition will be reached to 100%. How much it is reached and how its interpolation is configured controls its influence on the dataPoint weighting algorithm.

wPosLayer (wpl)

int

0

O-I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -wp 2 -wpl 1;

The layer of this weightPosition. This influences how the interpolation curves are applied to this and other weightPositions of this wPosGrp.

wPosInterp (wpi)

enum

3

O-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -wp 2 -wpi "arc";

The interpolation that is used to calculate the influence of this weightPosition on the dataPoint weighting algorithm.

The values are:

  • 0 = linear

  • 1 = flat

  • 2 = precise

  • 3 = spline

  • 4 = enhanced

  • 5 = arc

  • 7 = inverseArc

  • 6 = disabled

For information about the individual interpolations, see WPos Interpolation.

falloffAxis (foax)

enum

0

O-I-C-S

Stores across which axis the falloff should be applied in order to split bilateral dataPoints into their left and right sub-dataPoints.

The values are:

  • 0 = X

  • 1 = Y

  • 2 = Z

You can use the -fa flag of the DPK_bcs command to access this attribute.

falloff (fo)

compound

n/a

A-O-I-C-S

This is a “ramp attribute” construct that is used as a temporary cache for the actual falloff curves that are stored as elements of the presetFalloff attribute.

When editing a falloff of the presetFalloff multi attr, this falloff is internally associated with the falloff to be edited. During data transfer, the current zoom and shift settings are used to transform the falloff to and from its original space and the 0–1 range.

falloff_Position (fop)

float

0.0

O-I-C-S

Position of this ramp key in the 0–1 range.

falloff_FloatValue (fofv)

float

0.0

O-I-C-S

Value of this ramp key in the 0–1 range.

falloff_Interp (foi)

enum

3

O-I-C-S

Interpolation of this ramp key. The values are:

  • 0 == None: No interpolation is done. Corresponds to an animation curve with “step” tangents.

  • 1 == Linear: The values are interpolated linearly.

  • 2 == Smooth: The values are interpolated like an animation curve with “flat” key tangents.

  • 3 == Spline: The values are interpolated with a spline curve.

falloffZoomX (fozx)

float

1.0

O-I-C-S-H

The zoom-factor for displaying the currently edited falloff of the presetFalloff element in the falloff attribute. Offsets the keys on the X-axis so that they occupy a wider range, effectively zooming into the curve.

You can use the -fzm flag of the DPK_bcs command to access this attribute without affecting the undo queue.

falloffShiftX (foshx)

float

0.0

O-I-C-S-H

The shift-value for displaying the currently edited falloff of the presetFalloff element in the falloff attribute. Offsets the keys on the X-axis so that they are scrolled left (negative values) and right (positive values).

You can use the -fsh flag of the DPK_bcs command to access this attribute without affecting the undo queue.

falloffPreset (fopr)

int

-1

O-C-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -fo 2;

Contains the index (ID) of the falloff in the presetFalloff attribute currently being edited in the falloff attribute.

presetFalloff (pf)

compound

n/a

A-O-I-C-S-H

This multi attribute contains a full “ramp attribute” construct and a name in each of its elements. The indices of this multi attr are used as values in elements of the dataPointFalloff int array.

pFalloff (pfo)

compound

n/a

A-O-I-C-S

The “ramp” (curve) of this falloff. It is edited indirectly by associating it with the falloff attribute and changing that instead of this pFalloff attribute.

pFalloff_Position (pfop)

float

0.0

O-I-C-S

Position of this ramp key.

pFalloff_FloatValue (pfofv)

float

0.0

O-I-C-S

Value of this ramp key in the 0–1 range.

pFalloff_Interp (pfoi)

enum

3

O-I-C-S

Interpolation of this ramp key. The values are:

  • 0 == None: No interpolation is done. Corresponds to an animation curve with “step” tangents.

  • 1 == Linear: The values are interpolated linearly.

  • 2 == Smooth: The values are interpolated like an animation curve with “flat” key tangents.

  • 3 == Spline: The values are interpolated with a spline curve.

pFalloffName (fn)

string

NULL

O-I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -fo 2 -name "newName";

The name of this falloff.

dataPointNames (dpn)

stringArray

empty

O-I-C-S-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -name "newName";

A string array containing the names of all dataPoints.

Indices correspond to the indices of the other dataPoint array data elements.

dataPointPositions (dpp)

intArray

empty

A-O-I-C-S-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -dpp {0, 12, 14};

An array of int arrays containing the position of each dataPoint. The contents of each int array is a list of weightPosition IDs that together define the coordinates of this dataPoint in the weight space.

The index of the element of the multi attr corresponds to the other dataPoint array data elements.

dataPointFalloff (dpf)

intArray

empty

O-I-C-S-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -fo 1;

An int array containing a falloff ID for every dataPoint. This falloff ID corresponds to the index of the presetFalloff attribute.

Indices in this int array correspond to the indices of the other dataPoint array data elements.

dataPointInstance (dpi)

intArray

empty

O-I-C-S-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -dpm 2 -dpi 1;

Contains an instance target for each dataPoint. Values can be the ID of another dataPoint or -1, which means “use neutral”. A value only has an effect when the dataPoint it belongs to is in “instance” mode.

Indices in this int array correspond to the indices of the other dataPoint array data elements.

dataPointModes (dpm)

intArray

empty

O-I-C-S-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -dpm 1;

Contains the mode of each dataPoint. Note that the value does NOT correspond to the argument of the -dpm flag. Instead, it is: 0 == unused, 1 == relative, 2 == absolute, 3 == instance. This is done because this array functions as sort of a “master” dataPoint array for finding out which dataPoint IDs really contain a dataPoint and which are empty slots ready to be filled with a new dataPoint.

Indices in this int array correspond to the indices of the other dataPoint array data elements.

Warning

Deleting a dataPoint by removing its data from all the dataPoint attributes will NOT work correctly. Much of the data is cached in the BCS node itself and can only be correctly managed by the DPK_bcs command.

dataPointDisabled (dpd)

intArray

empty

O-I-C-S-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -dpen false;

Each element can either be 1 (true) or 0 (false). A false value means the dataPoint affects the deformation and internal updating mechanism. True disables the dataPoint, so that it doesn’t affect the BCS anymore.

Indices in this int array correspond to the indices of the other dataPoint array data elements.

dataPointInGeom (dpigc)

compound

n/a

A-O-I-C-S

Children should be accessed through the DPK_bcs command only

Contains the attributes for connecting “edit” geometry to dataPoints.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dpInGeom (dpig)

geometry

NULL

A-I-C

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -go "newTargetObject";
or: DPK_bcs -edit -dp 2 -gt "edit";

The input for connecting “edit” geometry to the dataPoint.

Each element of this multi attr corresponds to one shape of the input geometry. If the deformed object contains just one shape, only the first element of this attribute will be usable.

dpInMode (dpim)

bool

false

I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -go "relativeShape" -gm false;
or: DPK_bcs -edit -dp 2 -gt "edit" -gm true;

Whether the geometry shape(s) of this dataPoint’s edit geometry should be interpreted as absolute or relative deformation data.

dataPointOutGeom (dpogc)

compound

n/a

A-O-I-C-S

Children should be accessed through the DPK_bcs command only

Contains the attributes to connect dataPoint “view” geometry to.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dpOutGeom (dpog)

geometry

NULL

A-O-C

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -gt "view";

Contains the relative or absolute geometry data of this dataPoint, depending on the corresponding value of the dpOutModes attribute. Can be connected to a compatible shape node in order to display this dataPoint’s data and visualize changes resulting from the internal updating mechanism.

Elements correspond to the different input geometry shapes.

dpOutModes (dpom)

bool

false

A-I-C-S-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -gt "view" -gm false;

Stores whether the geometry for the dpOutGeom attribute on the corresponding element should represent the dataPoint’s relative (false) or absolute (true) data.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dataPointRel (dprc)

compound

n/a

A-O-I-C-S-H

For Internal Use Only

Children contain the relative deformation data of all dataPoints, independently of whether they are relative, absolute or instances.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dpRelGrp (dprgg)

compound

n/a

A-O-I-C-S

For Internal Use Only

Elements correspond to the different input geometry shapes.

dpPointsRel (dppr)

pointArray

empty

I-C-S

For Internal Use Only

The actual deltas in a point array. Indices correspond to the indices of the dpIndicesRel attribute and NOT to those of the geometry points.

dpIndicesRel (dpir)

intArray

empty

I-C-S

For Internal Use Only

A mapping that stores for each point in the dpPointsRel point array the index of the geometry point to which it belongs.

dataPointAbs (dpac)

compound

n/a

A-O-I-C-S-H

For Internal Use Only

Children contain the absolute deformation data of all dataPoints that are in “absolute” mode, i.e., dataPoints that have a value of 2 in the dataPointModes array. For relative dataPoints that are bilateral, they store the total relative deltas.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dpAbsGrp (dpag)

compound

n/a

A-O-I-C-S

For Internal Use Only

Elements correspond to the different input geometry shapes.

dpPointsAbs (dppa)

pointArray

empty

I-C-S

For Internal Use Only

Non-zero relative deltas in a point array.

dpIndicesAbs (dpia)

intArray

empty

I-C-S

For Internal Use Only

Mapping with geometry point indices for the point array.

dataPointLeft (dpl)

compound

n/a

A-O-I-C-S-H

For Internal Use Only

Children contain the relative deformation data of all left sub-dataPoints of bilateral dataPoints.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dpLeftGrp (dplg)

compound

n/a

A-O-I-C-S

For Internal Use Only

Elements correspond to the different input geometry shapes.

dpLeftPoints (dplp)

pointArray

empty

I-C

For Internal Use Only

Non-zero relative deltas in a point array.

dpLeftIndices (dpli)

intArray

empty

I-C

For Internal Use Only

Mapping with geometry point indices for the point array.

dataPointLeftTweak (dpltc)

compound

n/a

A-O-I-C-S-H

For Internal Use Only

Children contain the relative deltas representing the manual tweaks that should be added to the automatically derived left sub-dataPoint’s deltas. That is, they are added to the total relative deltas after they have been multiplied with the falloff curve for the left side in order to get the resulting left deltas for the dataPointLeft attribute.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dpLeftTweakGrp (dpltgg)

compound

n/a

A-O-I-C-S

For Internal Use Only

Elements correspond to the different input geometry shapes.

dpLeftTweakPoints (dpltp)

pointArray

empty

I-C-S

For Internal Use Only

Non-zero relative deltas in a point array.

dpLeftTweakIndices (dplti)

intArray

empty

I-C-S

For Internal Use Only

Mapping with geometry point indices for the point array.

dataPointLeftTweakGeom (dpltgc)

compound

n/a

A-O-I-C-S

Children should be accessed through the DPK_bcs command only

Contains the attributes for connecting edit geometry to the left sub-dataPoint of bilateral dataPoints. This will be used to calculate the relative deltas for the dataPointLeftTweak attribute.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dpLeftTweakGeom (dpltg)

geometry

NULL

A-I-C

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -go "newLeftTweakObj" -gt "left";
or: DPK_bcs -edit -dp 2 -gt "left";

The input for connecting “left” tweak geometry to the dataPoint.

Elements correspond to the different input geometry shapes.

dpLeftTweakMode (dpltm)

bool

false

I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -go "newLeftTweakObj" -gt "left" -gm false;
or: DPK_bcs -edit -dp 2 -gt "left" -gm true;

Whether the geometry shape(s) in dpLeftTweakGeom should be interpreted as absolute or relative deformation data.

dpLeftTweakWeight (dpltw)

float

1.0

O-I-C-S

Experimental (not accessible through the command or GUI)

How much influence the relative deltas in dataPointLeftTweak should have on the automatically calculated left sub-dataPoint.

dataPointLeftOutGeom (dplogc)

compound

n/a

A-O-I-C-S

Children should be accessed through the DPK_bcs command only

Contains the attributes to connect dataPoint “leftView” geometry to.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dpLeftOutGeom (dplog)

geometry

NULL

A-O-C

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -gt "leftView";

Contains the relative or absolute geometry data of this dataPoint’s left sub-dataPoint, depending on the corresponding value of the dpLeftOutModes attribute. Can be connected to a compatible shape node in order to display the data and visualize changes resulting from the internal updating mechanism.

Elements correspond to the different input geometry shapes.

dpLeftOutModes (dplom)

bool

false

A-I-C-S-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -gt "leftView" -gm false;

Stores whether the geometry for the dpLeftOutGeom attribute on the corresponding element should represent the dataPoint’s relative (false) or absolute (true) left sub-dataPoint data.

Indices of elements of this multi attribute correspond to the indices of the other dataPoint array data elements.

dataPointRight (dpr)

compound

n/a

A-O-I-C-S-H

For Internal Use Only

Same as dataPointLeft but for the right sub-dataPoint.

dpRightGrp (dprg)

compound

n/a

A-O-I-C-S

For Internal Use Only

Same as dpLeftGrp but for the right sub-dataPoint.

dpRightPoints (dprp)

pointArray

empty

I-C

For Internal Use Only

Same as dpLeftPoints but for the right sub-dataPoint.

dpRightIndices (dpri)

intArray

empty

I-C

For Internal Use Only

Same as dpLeftIndices but for the right sub-dataPoint.

dataPointRightTweak (dprtc)

compound

n/a

A-O-I-C-S-H

For Internal Use Only

Same as dataPointLeftTweak but for the right sub-dataPoint.

dpRightTweakGrp (dprtgg)

compound

n/a

A-O-I-C-S

For Internal Use Only

Same as dpLeftTweakGrp but for the right sub-dataPoint.

dpRightTweakPoints (dprtp)

pointArray

empty

I-C-S

For Internal Use Only

Same as dpLeftTweakPoints but for the right sub-dataPoint.

dpRightTweakIndices (dprti)

intArray

empty

I-C-S

For Internal Use Only

Same as dpLeftTweakIndices but for the right sub-dataPoint.

dataPointRightTweakGeom (dprtgc)

compound

n/a

A-O-I-C-S

Children should be accessed through the DPK_bcs command only

Same as dataPointLeftTweakGeom but for the right sub-dataPoint.

dpRightTweakGeom (dprtg)

geometry

NULL

A-I-C

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -go "newRightTweakObj" -gt "right";
or: DPK_bcs -edit -dp 2 -gt "right";

Same as dpLeftTweakGeom but for the right sub-dataPoint.

dpRightTweakMode (dprtm)

bool

false

I-C-S

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -go "newRightTweakObj" -gt "right" -gm false;
or: DPK_bcs -edit -dp 2 -gt "right" -gm true;

Same as dpLeftTweakMode but for the right sub-dataPoint.

dpRightTweakWeight (dprtw)

float

1.0

O-I-C-S

Experimental (not accessible through the command or GUI)

Same as dpLeftTweakWeight but for the right sub-dataPoint.

dataPointRightOutGeom (dprogc)

compound

n/a

A-O-I-C-S

Children should be accessed through the DPK_bcs command only

Same as dataPointLeftOutGeom but for the right sub-dataPoint.

dpRightOutGeom (dprog)

geometry

NULL

A-O-C

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -gt "rightView";

Same as dpLeftOutGeom but for the right sub-dataPoint.

dpRightOutModes (dprom)

bool

false

A-I-C-S-H

Should be accessed through the DPK_bcs command only
E.g.: DPK_bcs -edit -dp 2 -gt "rightView" -gm false;

Same as dpLeftOutModes but for the right sub-dataPoint.

dataPointGroups (dpg)

compound

n/a

A-O-I-C-S-H

For Internal Use Only

Each element contains a list of dataPoints that belong to the same group. This is used and managed only by the DPK_bcs command in order to find out which weightPositions can be used together as a valid position for a dataPoint.

dpgDataPoints (dpgd)

intArray

empty

I-C-S-H

For Internal Use Only

The indices (IDs) of the dataPoints in this group.

dpgWeights (dpgw)

intArray

empty

I-C-S-H

For Internal Use Only

The indices (IDs) of all weights of which this group’s dataPoints can use weightPositions.

dpgWPosGrps (dpgwpg)

intArray

empty

I-C-S-H

For Internal Use Only

The indices (IDs) of all weightPositionGroups of which this group’s dataPoints can use weightPositions.