What changed in ngSkinTools 2.0 when compared to v1 ?
ngSkinTools now operates with skinCluster inputs/outputs directly. This means that you can have modifiers on top of your mesh (collapse vertices, subdivide, etc), and that should not disrupt any operations for plugin. In V1, in a lot of cases ngSkinTools would look at the final mesh that skinCluster connects to, and behave unexpectedly if vertex order or count is changed. In the future, this will also allow for multiple-skin-clusers-per-mesh workflow.
Various performance improvements. Wherever it makes sense, ngSkinTools should make full use of your Threadrippers, Ryzens, Core I9s or any other modern CPU.
There still are some bottlenecks. Primarily, huge meshes with lots of joints still feel sluggish, though not nearly as bad as in V1. Maya’s native APIs are still single-threaded and writes to skinClusters will sometimes be slow. For now the goals for V2 are:
- Meshes with up to 300,000 verts, 200influences are expected to behave near-realtime;
- 1,000,000-2,000,000 verts / 500 infl should not fail to initialize/load and be workable with tradeoffs;
Much better performance due to completely reworked paint engine, which is now multithreaded, so when painting with wide brushes or flooding, it should now be much more responsive. The only big bottleneck in speed remains Maya’s skinCluster node itself - I have some ideas, but that will have to wait for later iterations of 2.x
Influence selection on screen: also known as “the biggest missing feature in ngSkinTools”, should now be fixed. Influences can be “sampled” from the surface (you press S and click on the surface - and the most dominant influence of the selection gets activated). This should speed up switching between influences substantially.
Other changes and additions:
- Ability to switch brush projection mode (surface or screen);
- Maintaining influences limit while painting;
- Sample current joint on stroke start;
- Toggle display of original mesh: while in paint tool, you can quickly switch between weights preview and your final mesh;
- Various display improvements, e.g. show single influence colored;
- New way of mirroring: mirror layer effect. The weights you paint on the layer are never modified by mirror (unlike mirror or interactive mirror). Instead, mirroring happens on a separate buffer that gets automatically updated each time you edit the layer. This further contributes to non-destructive workflow: painting weights and editing mirroring settings become two independent actions. Also, with this method weights at the mirror seam are now a tiny bit better handled.
- Multi-mesh smooth. It was a tough decision, but for now working with multiple meshes simultaneously complicates implementation substantially, and with layers, effects already, it becomes unfeasible to continue supporting multi-mesh workflow. Will have to revisit this in the future.
- Smooth as separate tool is gone; paint/flood is now fast enough to use instead. Smooth as a separate tool has this story where it was the first tool (even before layers) that was implemented in ngSkinTools, it had really crappy implementation behind it and now it’s time for it’s retirement.:)
- API revamp; slowly switching to PEP 8 style, trying to design with api-first approach in mind - the grand plan is to make ngSkinTools enjoyable to automate, include in your autorigs, etc.
- UI code rework. Like it’s usual with UI, it’s pretty hard to not make a mess out of it.