Hyper-reduced projective dynamics 手推公式

本论文提出了一种适用于 Projective Dynamics 的模型降阶方法,主要包含了三部分内容:(1)坐标系的降阶;(2)约束的降阶;(3)Projective Dynamics 的求解过程,包括 globle/local 求解过程;

1 - 总体概述

模型降阶(model order reduction),即在模型计算/求解的过程中,将其映射到低维空间中,以减少计算量。

在形变仿真中,模型网格越精细,能够更好的展现仿真对象的细节特征,往往具备更好的(视觉)效果。但精细的网格意味着,模型的节点数巨大(10K~100K),使得模型的求解计算量庞大,严重制约了仿真的实时性。

在模型降阶的方法中,通过将高阶模型(精细网格,节点数多)映射到低阶模型(较粗糙网格,节点数少)中,采用较粗糙的网格对模型进行近似,从而减小仿真求解过程中的计算量。在求解得到结果后,再将低阶模型反向映射到高阶模型,进行视觉上的渲染,达到展现模型精确细节的目的。

Projective Dynamics 公式:
模型降阶公式:

[oldsymbol{q} approx mathbf{U} ilde{oldsymbol{q}} ]

其中,(oldsymbol{q} in mathbb{R}^{n imes 3}) 为高阶模型的节点坐标,( ilde{oldsymbol{q}} in mathbb{R}^{4k imes 3}) 为低阶模型的节点(其实,这里不是物理意义上的顶点)坐标,(mathbf{U}) 为从低维空间到高维空间的映射。

2 - 低维空间的构建

借鉴了蒙皮算法来构建子空间(creating a subspace from skining weights.),具体方法如下:

1 - 在模型网格中均匀选取 (k) 个节点,即 (oldsymbol{s}_j) (相当于蒙皮算法中的 handle ),并计算节点 (i) 相对于各个 handle 的权重,为 ( ilde{oldsymbol{w}}_i = (B_{oldsymbol{s}_1, r(oldsymbol{q}_i)}), cdots, B_{oldsymbol{s}_k, r(oldsymbol{q}_i)})) ,其中,(r) 是作用域半径,(B_{oldsymbol{y}, r(oldsymbol{x})}) = b_r(d(oldsymbol{x}, oldsymbol{y}))) 为插值函数,在这里选择为 unique cubic polynomial 函数(也可选择其他)。最后,对权重进行归一化(normalized)处理,即 (oldsymbol{w}_i = ilde{oldsymbol{w}}_i cdot (1./sum_j ilde{w}_i^j))

2 - 构建子空间的基(construct the subspace basis matrix (mathbf{U}) such that it contains the degrees of freedom from the skinning transformations according to these weights.),具体过程如下:

核心思想的解释:在蒙皮算法中,是通过 handle 的变换 affine transformations ,将网格节点从初始位置映射到了形变后的位置(表述可能不规范),也就是说,在这里面存在一个低维空间到高维空间的映射。其中,高维空间很好理解,就是网格模型本身,(n) 个网格节点,3维空间,是由 (3n) 个基向量张成的空间;而低维空间呢,可以从这个角度看,计算过程是 handle 仿射变换矩阵作为变量,乘以权重与初始位置的某种组合(定值),那么,就可以将权重与初始位置的某种组合张成的空间作为低维空间,将 handle 的放射变换矩阵作为其在低维空间中的坐标。由此,就实现了高维空间中的任一点 (oldsymbol{q}) 在低维空间中的表示,即模型从高维到低维的降阶:(oldsymbol{q} approx mathbf{U} ilde{oldsymbol{q}})

2.1 - 空间、变量的维度及表示。在形变模型中,有 (n) 个节点,表示为 (oldsymbol{q} in mathbb{R}^{n imes 3}),那么,拆开来写,应该就是:

[oldsymbol{q} = egin{pmatrix} q_0^x & q_0^y & q_0^z \ q_1^x & q_1^y & q_1^z \ cdots \ q_{n-1}^x & q_{n-1}^y & q_{n-1}^z end{pmatrix} in mathbb{R}^{n imes 3}]

2.2 - 蒙皮算法。根据蒙皮算法,在模型网格中选取均匀分布的 (k) 个 handle,各个节点与 handle 相对应的权重为 (w_i^j)。在形变过程中,从网格初始位置 (oldsymbol{q}_0) 到形变后位置 (hat{oldsymbol{q}}) 的 skinning transformation 过程可计算为:
对于其中的任一节点 (i),其变换过程为:(对应于 (oldsymbol{q}) 中的任一行)

[egin{aligned}(hat{q}_i^x, hat{q}_i^y, hat{q}_i^z) &= sum_j (1, q_i^x, q_i^y, q_i^z) cdot w_i^j mathbf{A}_j^T \ &= (1, q_i^x, q_i^y, q_i^z) cdot w_i^0 mathbf{A}_0^T + (1, q_i^x, q_i^y, q_i^z) cdot w_i^1 mathbf{A}_1^T + cdots + (1, q_i^x, q_i^y, q_i^z) cdot w_i^{k-1} mathbf{A}_{k-1}^T \ &= (w_i^0, q_i^x cdot w_i^0, q_i^y cdot w_i^0, q_i^z cdot w_i^0) mathbf{A}_0^T + (w_i^1, q_i^x cdot w_i^1, q_i^y cdot w_i^1, q_i^z cdot w_i^1) mathbf{A}_1^T + cdots + (w_i^{k-1}, q_i^x cdot w_i^{k-1}, q_i^y cdot w_i^{k-1}, q_i^z cdot w_i^{k-1}) mathbf{A}_{k-1}^T \ &= (w_i^0, q_i^x cdot w_i^0, q_i^y cdot w_i^0, q_i^z cdot w_i^0 quad | quad w_i^1, q_i^x cdot w_i^1, q_i^y cdot w_i^1, q_i^z cdot w_i^1 quad | quad cdots quad | quad w_i^{k-1}, q_i^x cdot w_i^{k-1}, q_i^y cdot w_i^{k-1}, q_i^z cdot w_i^{k-1}) cdot egin{pmatrix}mathbf{A}_0^T \ mathbf{A}_1^T \ cdots \ mathbf{A}_{k-1}^T end{pmatrix} end{aligned}]

那么,对于模型中的所有节点 (oldsymbol{q}),蒙皮算法的变化过程为:

[egin{aligned}egin{pmatrix}hat{q}_0^x &hat{q}_0^y &hat{q}_0^z \ hat{q}_1^x &hat{q}_1^y &hat{q}_1^z \ cdots \ hat{q}_{n-1}^x &hat{q}_{n-1}^y &hat{q}_{n-1}^z end{pmatrix} &= egin{pmatrix}w_0^0 &q_0^x cdot w_0^0 &q_0^y cdot w_0^0 &q_0^z cdot w_0^0 &| &w_0^1 &q_0^x cdot w_0^1 &q_0^y cdot w_0^1 &q_0^z cdot w_0^1 &| &cdots &| &w_0^{k-1} &q_0^x cdot w_0^{k-1} &q_0^y cdot w_0^{k-1} &q_0^z cdot w_0^{k-1} \ w_1^0 &q_1^x cdot w_1^0 &q_1^y cdot w_1^0 &q_1^z cdot w_1^0 &| &w_1^1 &q_1^x cdot w_1^1 &q_1^y cdot w_1^1 &q_1^z cdot w_1^1 &| &cdots &| &w_1^{k-1} &q_1^x cdot w_1^{k-1} &q_1^y cdot w_1^{k-1} &q_1^z cdot w_1^{k-1} \ cdots \ w_{n-1}^0 &q_{n-1}^x cdot w_{n-1}^0 &q_{n-1}^y cdot w_{n-1}^0 &q_{n-1}^z cdot w_{n-1}^0 &| &w_{n-1}^1 &q_{n-1}^x cdot w_{n-1}^1 &q_{n-1}^y cdot w_{n-1}^1 &q_{n-1}^z cdot w_{n-1}^1 &| &cdots &| &w_{n-1}^{k-1} &q_{n-1}^x cdot w_{n-1}^{k-1} &q_{n-1}^y cdot w_{n-1}^{k-1} &q_{n-1}^z cdot w_{n-1}^{k-1} end{pmatrix}cdotegin{pmatrix}mathbf{A}_0^T \ mathbf{A}_1^T \ cdots \ mathbf{A}_{k-1}^T end{pmatrix}\ &= (mathbf{U}_0 quad | quad mathbf{U}_1 quad | quad cdots quad | quad mathbf{U}_{k-1}) cdotegin{pmatrix}mathbf{A}_0^T \ mathbf{A}_1^T \ cdots \ mathbf{A}_{k-1}^T end{pmatrix}end{aligned}]

[hat{oldsymbol{q}} = mathbf{U} ilde{oldsymbol{q}} ]

3 - 约束的降阶

原文地址:https://www.cnblogs.com/wghou09/p/13985306.html