- Added: Maya 2019 support
- Fixed: various standalone license activation issues on Macos and Linux
- Fixed: various shelf bugs. ngSkinTools will now create it’s own shelf instead of adding a button to “Custom” shelf.
- Fixed: UI under some conditions could open in broken state when closing/reopening ngSkinTools window.
- Fixed: skinCluster would sometimes start producing warnings “The weight total would have exceeded 1.0”.
- Fixed: macOS autoloader now properly recognize the plugin
- Fixing previous release build issues.
- License activation related bugfixes
- Adding OSX builds for Maya 2016 and 2016.5
- Linux/Maya 2016 should properly load now.
- Fixed: plugin should now properly load on Linux.
- Some changes in parallel evaluation of skin weights calculation in attempt to get rid of some mysterious crashes.
- Fixed: mesh should redraw properly after mirror undo/redo;
- Mirroring should now properly respect vertex selection;
- Fixed: occasional crash when switching tools while painting
- Added: “Distribute removed weight” option in Paint tool. When turned on, all weight that you remove from current
influence will be distributed to all other influences in a vertex proportionally. In short, this is about the same
behavior as Maya’s standard paint tool, except with one difference: if vertex only had single influence, removing
it will not work while this option is turned on.
- Added: “Stylus Pressure” settings for Paint tool - ngSkinTools will now remember it’s own settings for
- Fixed: leftover bugs that were not seen in debug mode.
- Fixed: UI issues in 2017 (errors after startup, stacktrace spam in script output). For few other 2017 UI issues that
I could not reproduce - I kindly ask to retest with this new release and let me know if you still have it, like
https://www.pivotaltracker.com/story/show/139744241 or https://www.pivotaltracker.com/story/show/139743793;
- Added: “Edit | Delete Custom Nodes From Selection”;
- “Reset to default preferences” moved to “Help” menu (to not accidentally interfere with more frequently
used edit operations;
- Fixed: flooding mask with vertex selection not always properly updates skin weights;
- Fixed: smoothing uninitialized mask leaves it uninitialized (was being filled with zeroes before);
- Added initial multithreading support. Calculating skin weights, as well as mesh-to-mesh mapping
(used in mirror and weight transfer) should be considerably faster.
- Fixed: influence mapping is not calculated during painting if interactive mirroring is not enabled (also could
have written this as “speeds up initialization of paint tool by up to 2 seconds for very large influence counts”)
- Fixed: slight speed improvements for influence mapping calculation;
- Fixed some performance bottlenecks for loading and writing skin weights.
- Fixed: replace and scale brushes not properly removing weight in some cases;
- Fixed: starting a paint tool with no active layer does not enter a colored mode for mesh;
- Fixed: Deselecting a layer while painting leaves mesh black, and does not repaint when selecting a layer again.
- Functionality change: mirroring does not have “initialization” concept anymore. There’s no need to go back to T-pose,
just adjust your settings directly in mirror tab and mirror.
- Functionality change: weight transfer is now pose-insensitive. “Closest vertex” transfer mode uses bind pose mesh.
- Added: “sharpen” brush. This is an “edit all influences at once” brush, and could unofficially be
called “remove smooth”. For each vertex, values for it’s dominant influences grow larger,
while reducing weight of other influences.
- Bugfix: Maya sometimes would think that ngSkinTools layer data node
is unnecessary and would automatically delete it. I hope I convinced it
to no longer do this.
- Bugfix: undo should now work properly along with interactive mirror feature.
- Experimental feature: interactive mirror while painting, in any pose. Enable in Paint,
Brush Settings (commercial licenses only);
- Some reorganization in license activation wizard;
- Fixed: weird python error in license activation wizard;
- Critical fix: invalid skinCluster weights handling, introduced with 1.2.0 version;
- OSX: fixed crashes when saving Maya 2017, 2016.5 scenes;
- If skin was bound with “Colorize skeleton”, mesh will use joint colors in paint mode;
- Upgrade to Maya 2017. A lot of rework for UI to support breaking changes in Maya API;
- UI fixes for Maya 2016.5;
- Version check should now work better with minor Maya upgrades;
- Removing some joint colors for paint mode, to make wireframes a bit more visible;
- Some internal data restructure, slight performance increase should be observed on
- Bugfix: fixes to child layers order after import.
- Bugfix: import/export and skin transfer should now properly handle layer hierarchy;
- “Display options” in Paint tab now allows switching between “colorized” view (previous default
display mode for influence weights) and simple white-black gradient for just the
- increased contrast for influence colors;
- Added support for Maya 2016 symmetry selection;
- Added some self-healing for invalid weight values: if for any reason (additive calculation error,
wrong initial values in skin cluster) there are influence weights below 0.0 or above 1.0,
they are capped back into 0..1 range during skinCluster weight calculation (which is happening
most of the time interactively).
- Bugfix: if RLM_LICENSE environment variable was in form of “[email protected]”, it was impossible to
proceed with license activation dialog. Changed it so that RLM_LICENSE environment variable is used
only if it contains at least one valid local directory in it (RLM_LICENSE can have multiple entries,
- Bugfix: “Plugin is up to date” message should not show up with each ngSkinTols restart anymore;
- Updates to license key handling: license activation now uses license key file. The file can be
obtained automatically or requested via email - follow the activation wizzard for details.
Current owners of license key will have to re-enter the key after the upgrade.
- Bugfix: importing or duplicating layers used to create huge undo queue,
consuming a lot of memory;
- Bugfix: some ngSkinTools operations could crash Maya after being repeatedly
called with invalid parameters;
- Bugfix: ngSkinTools would crash when skinCluster has invalid weights values (vertex IDs that
do not exist, invalid influence indexes);
- Internal rework: simplified check-for-upgrade implementation.
- Initial support for parent-child relationship for layers.
- NgSkinTools should try to do a better job cleaning up temporary node for displaying vertex colors
during weight painting.
- Some internal code cleanup regarding how layer blending is triggered (when interactive
writting to skin cluster is temporarily turned off when doing batch of changes, like import/export
or file load). Low probability of instability - report any issues.
- Import/export: layer.enabled, layer.opacity and layer.influences are now optional in JSON file;
- Import/export now supports “parent” attribute.
- Fixed: weights transfer fails to import influences where source logical index
is not available in destination;
- Fixed: “assign weights by closest joint” works incorrectly with meshes
that were bound not at zero position;
- Feature: UV based mirroring. Enable this by changing “vertex mapping mode” when
initializing mirror. Mirror axis is fixed U=0.5 (imagine vertical line dividing UV
quadrant in half), so you might need UV layout created specifically for mirroring;
- Feature: Copy/paste behavior changed when vertex selection is made:
- all weights for selected influence/mask still copied to memory;
- “Cut” now zeroes-out selected area only
- “Paste” only affects selected area (can be different than on copy/cut)
- Soft selection is supported
- Minor UI rearrangement in “Transfer Weights” dialog;
- Changed how initialization of first layer (reading weights from skinCluster) happens in
some corner cases, and this might have degraded performance of this operation slightly;
- Fixed: importing weights should be much faster now
- Slight restructure of import/export menu items (no more submenu for a single option JSON)
- Slight changes and fixes to “help” menu - link to issue tracker works again, added
contact, donate links.
- Let’s not call it “beta” anymore. It still might have bugs, though:)
- Fixed: mirror initialize sometimes could fail after removal of influences in skin cluster,
when using manual overrides;
- Fixed: crash under certain circumstances during file save using
ASCII file type + DQ blend weights present;
- shift/ctrl paint modifiers should now work in non-Windows OSes as well, where PySide
is available in Maya (included by default since 2015).
- Fixed: mirror should be more precise now in matching left-right vertices;
- Fixed: undo should now be fast when painting once again;
- Fixed: multi-influence selection sometimes could fail to work properly;
- Middle-mouse drag of layers list allows re-arranging them; layer order is preserved in
multi-layer drag/drop as well;
- Paint brush intensities can now be set above 1.0 or below 0.0, allowing you to do
“scale by 2.0” or “add -1”;
- Middle-mouse drag of influences don’t allow messing up the list anymore;
- New mirror mode added: “flip”;
- Added an “invert” action on an influence/mask;
- Added a new weights paste mode, “substract”;
- updated layer blending algorithm slightly. If base layer has transparency,
and a layer on top fits that transparency, base layer is not scaled. Continued
through whole stack (if blend result of first two layers has transparency, and can fit
third layer, no scale happens, etc);
- Fixed few incompatibility issues on Maya 2011, 2012, 2013.
- Fixed: When initializing skinning layers on the DQ-weight-blended skin cluster,
DQ weights will now be correctly loaded into initial layer.
- Fixed: another update for closest point matching in mirror or transfer, some glitches
were still occurring since the introduction of UV transfer mode;
- Fixed: mirror direction ended up being inverse when using “seam width = 0”
- Fixed: recent file storage changes broke ASCII (.ma) files;
- Fixed: mirror/transfer could cause some spikes when copying skin weights;
- Critical fix: major bug in previous build(925) corrupting Maya files in
- Fixed: UV based transfer should now produce much smoother results;
- Fixed: “closest vertex on surface” transfer should again operate normally,
introducing UV transfer broke it’s closest point algorithm;
- Fixed: skinCluster is now correctly updated after weights transfer;
- Fixed: DQ weights channel now correctly respects layer on/off flag
and layer opacity value.
Added Dual Quaternion weights painting when skin cluster “Skinning Method”
is set to “Weight Blended”. The new feature should be available across all tools,
including painting, mirroring, transfer, import/export, layer duplicate, weights
Vertex match mode can now be specified when transferring weights;
- Closest point on surface (previous default implementation)
- UV space
- By vertex ID (old implementation where vertexes were matched by their IDs)
UV space will only work when transferring mesh to mesh (will default to “closest point”
when importing weights from file)
Some stability improvements;
- Fixed: Maya crash when merging layers;
- Json export: output file is now formatted into multiple lines (was a single-line compact format before);
will help those people that are poking their noses inside exported files - e.g. for version-control
purposes. I’ve done some dirty magic to make it more compact than plain
so that all numeric arrays (e.g. influence weights) are still in one line.
- Introduced OSX builds! Yay!
New feature: “Prune Small Weights” now also available as a post-processing filter in
the “Settings” tab. This does not modify layer weights; instead, when enabled, ngSkinTools
will not write small weights into skin cluster. E.g. weights
joint1:0.99, joint2:0.01 will
Fixed: Maya crash when
MllInterface.getCurrentInfluence() is called without anything selected.
(Timothy, thanks for report).
- Renamed “Assign Weights” tab to “Edit Weights”;
- Added “Prune Small Weights” to “Edit Weights” tab. Works pretty much like standard Maya “Prune Small
Weights”: set all weights lower than X to zero. Operates on selected layers only, and allows pruning
in layer mask as well.
- Feature: “Merge Layer Down” action. Select a layer other than the lowest, and it will be merged with
the layer below it. Will help reduce the amount of those small helper layers you might be creating.
Fixed: Maya 2015 crashes when scene with ngSkinTools data is being saved into .ma file;
A lot of changes around mirror, import, and transfer weights;
- ..Which might also mean a few things broke here and there - keep me updated;
Added a long outstanding and highly requested feature to transfer skin layers from one mesh to another;
- Possible to review and adjust influence mapping before transfer is done;
- Different source and destination mesh topologies are supported;
Import on a changed mesh is now also possible;
Revamped “Init Mirror” window, should make working with manual influence matching a bit easier;
A big rework on influence matching algorithm, new matching engine is now used for import, transfer
- Better prediction of left/right influences when matching by name or position;
- “Ignore suffix” support for left/right influences - previously only prefix was supported;
- An option to ignore namespaces when transfering/importing weights;
XML export option removed from UI for now, thinking to dump the feature in the long run; XML only made
sense for older Mayas that did not have JSON support; JSON is just an overall more compact format for
the type of data to be stored (especially numeric arrays);
- Removed a silly debug message that was displaying at the end of maya session.
- fixed the issue when UI window sometimes will not be brought to front when opening from shelf button;
- ngSkinTools tool window position/dock state is permanently stored (each time the ngSkinTools window is
closed, and/or object with layers is selected)
- Layers/Influences list UI is now sizable with window; tab height can be adjusted via horizontal splitter.
- Added new skinCluster-wide setting “maximum influences per vertex limit”. It is a post-processing filter
that limits maximum number of influences used per vertex. Setting can be found in a new tab “Settings”,
“Selected Skin Settings” group.
- “new layer” window will appear with empty layer name box, instead of having a “new layer” text in it.
You can still submit the dialog without typing anything in, in that case new layer will get default name.
- Manually added mirror influence pairs now will be exported/imported to xml/json along
with other layers data.
- Improved load times for ASCII files, but due to different save format, files will no longer open with older
- “Delete custom nodes” action will inform when there are no custom ngSkinTools nodes to delete, instead
of displaying a deletion confirmation box.
- A fix to get Maya 2009 UI work again;
- Bug fix: paste weights to mask should properly work now;
- Bug fix: setting mask weights via API is properly undoable now;
- Bug fix: changing current layer while painting now properly highlights it’s current influence;
- Bug fix: multi-layer selection now works for layer on/off action;
- Bug fix: long mesh names will no longer resize main UI window;
- Bug fix: update check window size should now be less awkward;
- UI code will now verify that plugin version matches UI version (this mainly solves upgrade issues,
when old plugin sometimes gets loaded with newer ui)
- API changes:
- added MllInterface.setCurrentPaintTarget(): universal way to set current paint target (influence or mask)
- added MllInterface.getCurrentPaintTarget()
1.0 beta build 860
- Introduced weights clipboard:
- A simple and intuitive way to move weights from one influence on to another;
- Cut/copy weights for selected influence;
- Paste weights on to another influence, either adding new weights to existing ones, or replacing them.
- Cross-mesh copy/paste will only work if vertex counts are identical; this feature should mainly be used
on the same mesh.
- Changed how influence names are displayed:
- Influences with unique names will display just short name, as previously
- Influences with duplicate names will display a unique name in the context of the list; that is, if
rig contains two joints named “joint1”, then they will be displayed as “joint1 (joint2|joint1)",
but behaviour will only occur if the list is actually displaying two “joint1” items.
- The idea behind the change is to only show long names when short name is not unique in
a skin cluster.
- Influences can be filtered with wildcards now; for example, “finger*_1” will match “finger1_1”,
“finger2_1” or “L_finger66_1_joint”.
- Minor API fix: MllInterface.getLayersAvailable() will work correctly on context mesh of MllInterface.
- Fix in import/export: internal layer transparency was being incorrectly calculated after importing
- Stability improvements: setting vertex weights with sum above 1.0 could cause crashes
- Performance improvements: “import weights”, “duplicate layers” should now be much faster
(and mirroring multiple layers - just a bit:)
- API additions:
- Batch update management added to speedup multiple update calls to internal layer data object
1.0 beta build 849
- Keyboard is now enabled in layer/influence lists, making it possible to go through influences
with up/down keys (in Maya 2011 and up)
- Fixed: paint tool could crash maya in some occasions when skin layer data could not be determined from selection
1.0 beta build 847
- Fixed: “Add manual association” in mirror initialization should be functional again.
1.0 beta build 845
- Maya 2012 crash on Linux resolved
- Update checker window fixed to show itself when update is found.
1.0 beta build 843
- Critical bug fix: unable to open ngSkinTools UI due to preference value type mismatch.
1.0 beta build 842
- Reviewed some Linux stability issues when initializing layers
- Fixed: error message when opening ngSkinTools window for the first time
1.0 beta build 840
- Fixed: when exporting, influence names are now absolute;
- Improved direction display in mirroring window: now it will properly say “left to right”, or “top to bottom”,
(depending on mirroring axis you chose when initializing mirror cache), instead of just “positive to negative”;
- Mirroring now works with multiple selected layers;
1.0 beta build 835
- Added new tool “Import Influences” for synchronizing influences lists between different skin clusters;
- “Delete current layer” became “Delete selected layer(s)” and now allows selecting multiple layers for deletion;
- Added “Duplicate selected layer(s)” in menus;
- Fixed documentation links here and there (apparently nobody cares as “View documentation online” menu item
actually never worked before);
1.0 beta build 830
- Added layer on/off feature, available from layer right-click menu.
- Added layer info import/export:
- XML format available for all supported Maya versions;
- JSON available from Maya 2011 and up;
- First attepts at python API:
- ngSkinTools.mllInterface.MllInterface : low level access to internal plugin functions
ngSkinTools.importExport.* : import/export capabilities
- Fixed a few Maya 2009 compatibility issues
- A lot of refactoring inside the code, so possible stability issues, but it’s all for the brighter future;