Skin weight optimization (matrix form) (2)

(Matrix form first attempt)

$$ \sum\limits_{j \in \mathcal N(i)} (c_{ij} \nabla \mathbf s_i \mathbf S_i) \vec w_i - \sum\limits_{j \in \mathcal N(i)} (c_{ij} \nabla \mathbf s_i \mathbf S_j) \vec w_j = \vec b_i $$

$$ \left (\sum\limits_{j \in \mathcal N(i)} c_{ij} \right ) (\nabla \mathbf s_i \mathbf S_i) \vec w_i - \sum\limits_{j \in \mathcal N(i)} (c_{ij} \nabla \mathbf s_i \mathbf S_j) \vec w_j = \vec b_i $$

$$ \sum\limits_{j \in \mathcal N(i)} c_{ij} = c_i $$

$$ \vec b_i = \nabla \mathbf s_i \sum\limits_{j \in \mathcal N(i)} { \frac{c_{ij}}{2}(\mathbf R_i + \mathbf R_j) ( \mathbf p_i - \mathbf p_j) } $$

Dimensions:

  • $ \mathbf A: |\vec w| \times |\vec w| $
  • $ \vec b : |\vec w| $
  • $ \nabla s_i^{|\vec w_i|\times 3} \mathbf S_i^{3 \times|\vec w_i|} = \mathbf M_i^{|\vec w_i| \times |\vec w_i|} $
  • $ \nabla s_i^{|\vec w_i|\times 3} \mathbf S_j^{3 \times|\vec w_j|} = \mathbf M_j^{|\vec w_i| \times |\vec w_j|} $

$$ \mathbf M_i = \begin{bmatrix} T_{i1} \mathbf{p_i} \\ \vdots \\ T_{in} \mathbf{p_i} \\ \end{bmatrix} \left [{ \begin{matrix} T_{i1} \mathbf p_i & \cdots & T_{in} \mathbf{p_i} \\ \end{matrix} } \right ] = \begin{bmatrix} (T_{i1} \mathbf{p_i}).(T_{i1} \mathbf{p_i}) & \cdots & (T_{i1} \mathbf{p_i}) . (T_{in} \mathbf{p_i}) \\ \vdots & \ddots & \vdots \\ (T_{in} \mathbf{p_i}).(T_{i1} \mathbf{p_i}) & \cdots & (T_{in} \mathbf{p_i}) . (T_{in} \mathbf{p_i}) \\ \end{bmatrix} $$

$$ \mathbf M_j = \begin{bmatrix} T_{i1} \mathbf{p_i} \\ \vdots \\ T_{in} \mathbf{p_i} \\ \end{bmatrix} \left [{ \begin{matrix} T_{j1} \mathbf p_j & \cdots & T_{jn} \mathbf{p_j} \\ \end{matrix} } \right ] = \begin{bmatrix} (T_{i1} \mathbf{p_i}).(T_{j1} \mathbf{p_j}) & \cdots & (T_{i1} \mathbf{p_i}) . (T_{jn} \mathbf{p_j}) \\ \vdots & \ddots & \vdots \\ (T_{in} \mathbf{p_i}).(T_{j1} \mathbf{p_j}) & \cdots & (T_{in} \mathbf{p_i}) . (T_{jn} \mathbf{p_j}) \\ \end{bmatrix} $$

$$ \begin{bmatrix} c_0 \mathbf M_0 & \cdots & -c_{0j} M_j & \cdots & 0 \\ \vdots & \ddots & \vdots & 0 & 0 \\ 0 & 0 & \mathbf c_i M_i & \cdots & -c_{ij} M_j \\ \vdots & \vdots & \vdots & \ddots & 0 \\ 0 & \cdots & \mathbf -c_{vj} M_j & \cdots & c_v M_v \\ \end{bmatrix} \begin{bmatrix} \vec w_0 \\ \vdots \\ \vec w_i \\ \vdots \\ \vec w_j \\ \vdots \\ \vec w_v \\ \end{bmatrix} = \begin{bmatrix} \vec b_0 \\ \vdots \\ \vec b_i \\ \vdots \\ \vec b_j \\ \vdots \\ \vec b_v \end{bmatrix} $$

The matrix is sparse but can we prove this is a diagonally dominant system and use Jacobi iterations?

$$ x^{(k+1)}_i = \frac{1}{a_{ii}} \left(b_i -\sum_{j\ne i}a_{ij}x^{(k)}_j\right) \text{Jacobi iteration for one Matrix row} $$

Note: experimentally the matrix does not seem diagonally dominant (quite a few lines don't respect the above condition). It seems not to be symmetric as well.

---------
The following remains to be checked
---------

Here solving for several $x$ at the same time i.e. solving per vertex, set of skinning weights $ \vec w_i $
$$ \vec w^{(k+1)}_i = \begin{bmatrix} (T_{i1} \mathbf{p_i})^2 \\ \vdots\\ (T_{in} \mathbf{p_i})^2\\ \end{bmatrix} \frac{1}{c_i } \left( \vec b_i -\sum_{j \in \mathcal N(i)} - c_{ij}M_j \vec w^{(k)}_j - \left (- c_i(M_i - diag(M_i)\right) \vec w^{(k)}_i) \right) $$

You need the following for diagonally dominant:

$$ |a_{ii}| \geq \sum_{j\neq i} |a_{ij}| \quad\text{for all } i $$

Which I can infer from my above formulation of one Jacobi iteration:

$$ \begin{array}{lll} a_{ii} & = & (T_{i1} \mathbf{p_i})^2.c_i \\ a_{ij} & = & \sum_{j \in \mathcal N(i)} - c_{ij} \begin{bmatrix} (T_{i1} \mathbf{p_i}).(T_{j1} \mathbf{p_j}) & + & \cdots & + & (T_{i1} \mathbf{p_i}) . (T_{jn} \mathbf{p_j}) \\ \end{bmatrix} + \\ & & - c_i \begin{bmatrix} (T_{i1} \mathbf{p_i}).(T_{i2} \mathbf{p_i})) & + & \cdots & + & (T_{i1} \mathbf{p_i}) . (T_{in} \mathbf{p_i})) \\ \end{bmatrix} \\ \end{array} $$

Although the above expression is a good starting point it is wrong because the indices of matrix elements such as: $ a_{ii} $ does not match indices on the left hand side $T_{ij}$ (here typically we have the ith vertex and jth bone influence as opposed to the ith row and jth column of the whole matrix)


 
Donate

No comments

(optional field, I won't disclose or spam but it's necessary to notify you if I respond to your comment)
All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.
Anti-spam question: