guodong's blog

PhD@zhejiang university
   

三维重建(3):skinning 方法LBS DQBS等简介

因为这两种方法出现的都比较早,网上关于这两种方法的讨论都比较多,现在拿斯坦福大学的cs课程的一个ppt做一些笔记。

课程ppt: Skinning (or Enveloping)

前半部分是做人脸蒙皮,我从第23三页开始详细阅读。

人身体的蒙皮方法和人脸蒙皮的方法类似,比如生成一个shape矩阵和插值点。但是人身体的形状高度依赖于关节的角度。可以从关节的角度来引导内插权重α向量。

需要注意的是1、关节的角度忽略了一些形状的信息,导致无法判断一些肌肉是否在有意的扭曲。2、人脸中的α权重向量可额可以使用同样的方式比如下巴关节的角度和面部肌肉的收缩来恢复。

许多身体部件是相对不想交的,所以我们期望矩阵是稀疏的(但shape矩阵不是稀疏的)。考虑这些因素,我们采用稍微不同的方法来蒙皮,但仍然高度需要shape和插值。

1、关节角度框架

把角色的整个皮肤区域分割成更小的部件,然后将这些皮肤的小部件放置到对应个骨骼空间。这些小部件可能是重叠的,比如一些骨头可能要共享相同的皮肤顶点。

具体做法如下:给定一组关节参数θ,Ti(θ)表示为移动模型坐标系中的骨头i到世界坐标系。因为关节参数改变,同时骨头移动到世界坐标系,计算皮肤顶点的世界坐标系的坐标同时使用Ti(θ)。存在于多骨头的模型空间的皮肤顶点需要做一些内插运算或平均运算。

1.1 刚体蒙皮

每一个皮肤顶点被关联到精确的一个骨骼,例如上肢的皮肤应该和前臂的皮肤关联到不同的部位。使用相关骨的变换来定位世界空间中每一个皮肤的顶点:考虑一个顶点j,模型空间中的坐标vj ,第i个骨骼,变换矩阵Ti,此时顶点j的世界坐标系当骨架移动时,Ti改变,皮肤顶点坐标也同时改变。

沿着相邻的被分配给不同骨骼的皮肤顶点形成不需要的不连续性。也就是说关节连接处不连续,这是我们不必(需)要的。

2、Liner Blend Skinning

主要思想是:通过线性混合顶点移除了关键处的不连续性。每个皮肤顶点绑定超过一块骨骼,Vij在不同的刚体模型空间有不同的坐标。每一块骨骼i对应的顶点vj被赋值为非0权重wij。其顶点的世界坐标系可以计算为加权平均从每个骨骼的刚体磨皮获得的世界坐标:

2.1 法线和切线

表面网格的法线和切线也是如下混合方式:这对渲染和碰撞来说都很重要:考虑单元长度,所以要归一化

2.2 权重

顶点的权重应该是稀疏的。例如如果胳膊关节的角度改变,腿部皮肤不应该受影响变形。非零权重应该位于相邻的骨骼。

稀疏矩阵同时也会带来运算速度的提升。典型的每个顶点最多4个非0权重,也就是说最多四个骨骼来决定一个顶点。

权重应该是平滑的,避免不连续。经常选择基于与某个特定关节的距离的平滑的衰减。

权重和网格分辨率相互独立。这样在细分网格是不需要重新计算权重。

限制权重为凸函数。例如来避免不期望的缩放和外插。

2.3 指定权重

其中包含手工方法和自动方法。手动方法就是手工调优,使获得的look最好,同时可以有很多工具来轻松指定权重,但也有缺点,难以单独修改大网格中每个顶点的权重。自动的方法通常是使用某算法来计算每个顶点和所有有关骨骼的权重,例如基于从顶点到骨骼的“距离”矩阵,自动生成的权重还可以人为修改来达到更高的保真度。

其中Pinocchio就是自动方法,用于自动装配和动画制作3D角色的系统,用适当的边界条件求解每个骨骼的泊松方程(PDE!),以获得平滑变化的权重,可以被用来装备和skin自己的角色。其中Pinocchio可以参考http://www.mit.edu/~ibaran/autorig/pinocchio.html。

另外还有Geodesic Voxel Binding方法,对皮肤网格的内部和边界进行体素化以获得休息姿势,对每个骨骼,使用fast marching method 计算它到每个体素中心的测地距离。对每个皮肤顶点,使用周围的体素进行内插计算距离。使用这个衰减函数,距离为变量,来计算每个顶点的权重。

2.4 缺点

当关节角度较大时,或者扭动时,会产生副作用。

3、Dual Quaternion Skinning

一个对偶数的形式:其中a0 和a都是实数,。许多数学运算比如乘除,平方根,共轭等都是为对偶数定义的。对偶数可以表示成2*2的矩阵:

对偶数的求和和乘积可以使用矩阵的加法和乘法计算。

对偶四元数同样有类似的性质,,其中后两项都是标准的四元数。如果后一项为0,那么对偶四元数就变成了单四元数,代表旋转。对偶四元数可以用来表示变换:,如果刚体变换有着四元数q0和变换t,那么可以使用对偶四元素表示,

3.1 皮肤空间

一个皮肤空间,它所有的角色皮肤都放置在静止姿势,每块骨骼放置在皮肤空间里,使用缸体变换Bi对齐。一个顶点vj可以通过来放置在物体空间,因此整个公式就变成了,事实上,不是一个刚体变换导致一些和LBS的问题。

3.2 对偶四元数磨皮

转化每个复合变换矩阵成单元对偶四元数。然后归一化,。这些混合单元对偶四元数来确保是一个刚体变换。转换成转换矩阵 ,然后计算转换后的皮肤顶点位置

 




上一篇:
下一篇:

头像

guodong

没有评论


你先离开吧:)



发表评论

电子邮件地址不会被公开。 必填项已用*标注