Layers
Basic usage
Basic usage: initialize layers on given skin cluster, add, list and delete layers.
from ngSkinTools2.api import init_layers, Layers
layers = init_layers("skinCluster1")
# alternatively, if layers are already enabled on this mesh,
# layers = Layers("skinCluster1")
layer_base = layers.add("base weights")
layer_one = layers.add("one")
layer_two = layers.add("two", parent=layer_one)
# layer_one instance was created before we added layer_two,
# so we need to reload it with latest data to see recent updates
assert layer_one.children == []
layer_one.reload()
assert layer_one.children == [layer_two]
assert layer_one.parent is None
assert layer_two.parent.name == "one"
all_layers = layers.list()
assert all_layers[0].name == "base weights"
assert all_layers[1].name == "one"
assert all_layers[2].name == "two"
layers.delete(layer_two)
Layer attributes
# basic properties - just treat like fields
layer_one.enabled = False
layer_one.enabled = True
layer_one.name = "arms"
layer_one.opacity = 0.8
# enable mirror effect on everything: mask, dq, influence weights
layer_one.effects.configure_mirror(everything=True)
# enable mirror effect on just influence weights
layer_one.effects.configure_mirror(mirror_weights=True)
Weight buffers
Manipulation of weight buffers. Refer to influences by their logical index (connection index in dependency graph).
from ngSkinTools2.api import NamedPaintTarget
# mask is by default empty
assert layer_one.get_weights(NamedPaintTarget.MASK) == []
# when setting weights, list length must match number of vertices in skinCluster
layer_one.set_weights(NamedPaintTarget.MASK, [0.9, 0, 1, 1])
layer_one.set_weights(0, [1, 1, 1, 1])
# settings weights to influence #1 will override weights on influence #0
layer_one.set_weights(1, [0, 0, 1, 1])
assert layer_one.get_weights(0) == [1, 1, 0, 0]