 # Discussion on improving Corrective smooth modifier

Hello,

I would like to open a discussion on future improvements for Corrective smooth modifier.
On August 2021, a new study was published on Direct Delta Mush Skinning Compression.
This study centers on improving rigging workflow by trying to remove unneccessary manual rigging that is needed on animating a humanoid.

The first study to Delta Mush was introduced in 2014 and was implemented in 2015 as Corrective smooth modifier

As the July 2019 study says on page 113:4 :
“The core idea of Direct Delta Mush schemes. The accumulated affect of iterated Laplacian smoothing is captured in a per-vertex weight mask (column Bi , red color gradient) that if applied to the undeformed geometry produces the equivalent of the iteratively smoothed result (inner blue geometry). These weights are used to solve for the local coordinate transformation Γi which is defined as the best rigid transformation to align the local patch (red regions) from the rest pose to the LBS deformed pose,
a.k.a. a form of Weighted Procrustes problem. The delta between ui and ̃ui is also transformed and added to the smoothed deformed position ̃vi ,producing the final vertex position xi .”

The continued studies to this subjects were introduced in July 2019:

And the newest was released in August 2021:

For reference on different type of skinning methods, kindly check the following:
https://dl.acm.org/doi/10.1145/2897824.2925959

The study also shows that the vertice positions can be calculated using matrix.

I wanted to bring this forward as someone who is interested in new studies for improved workflow on Blender.

4 Likes

+1, Corrective Smooth is great, so having ways to improve sounds even greater! 1 Like

Improving, yes. But the coding side is a different thing in this situation.

The first step is to define the rest pose u that has vertices i.
The vertex position in rest position ui can be defined as 4 value matrix, where the fourth value is always 1.
The first three values are positions in x,y and z.
You get all the vertices and dump them to one big matrix.

For refresher on matrices, visit Matrix (mathematics) - Wikipedia
Every row has four value colum for one vertex

The deformation of this big matrix is driven by bones.
Every vertex i has a weight w of bone j.
These vertices need to be assigned to one bone.

You will need identity matrix.
You will also need L matrix, that is symmetric, positive semidefinite with zero row- and column-sums.

Depending on lambda value you choose which solution to use.
If lambda is smaller or equal to 1, go explicit method. If *lambda is bigger than 1, use implicit method.

In explicit solution, parameters are calculated based on previous iteration.
In implicit solution, parameters are dependent on each other at the same iteration level

value p, integer is the amount of iterations and lamda, float is the step size of each iteration.

By using either explicit solution or implicit solution, you can calculate smooth skinned pose.

As the documents say, you need to compute the difference between the rest pose and smooth version to recover any surface details lost in the smoothing iteration.

This is something that the laplacian modifiers use in code.
If I have read the smooth modifier code correctly, it goes vertex-by-vertex and not as a matrix.

Anyone can correct me as we go through this new method.