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 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)


 
Paypal donation 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: