动画原理:表面形变算法的思考与总结

前言:

之前我的文章 Mesh形变算法_mesh算法-CSDN博客就有大致的讨论过,介绍的也比较粗略!现在主要是想在Triangulated Surface Mesh Deformation方向上更深入的讨论一下!结合今年我对这一块的学习谈谈我的理解~

下面要介绍大致几种算法,不管是拉普拉斯形变算法或者它的形变还是ARAP的形变,本质上都是,通过在网格人为的定义一些控制点或控制边,然后根据控制点或控制边的移动来影响网格的形状。相应的优势很明显可以对网格的细节进行精细的控制,比如arap是一种刚性形变,它可以在形变工程中尽可能地保持细节!效果虽然好但是带来的也是需要考虑网格的拓扑结构和形变的质量,以及控制点或控制边等等的分布和数量的设计!在此之前推荐一本计算几何的经典书籍《Polygon Mesh Processing》:
里面的第七章就有很详细的讲述各种常见经典的形变算法,非常值得参考。
在这里插入图片描述

前置知识- 矩阵的迹:

矩阵的迹(Trace)是一个线性代数中的概念,它指的是矩阵主对角线上所有元素的总和。对于一个方形矩阵 A,其迹被表示为 Tr(A) 或者 trace(A)。
主对角线是指矩阵从左上角到右下角的一条线上的元素,这些元素的行索引和列索引相同。
例如,给定一个 3x3 的矩阵:

A = | a11 a12 a13 || a21 a22 a23 || a31 a32 a33 |

矩阵 A 的迹就是:Tr(A) = a11 + a22 + a33即,只需将主对角线上的元素加起来就可以了。
假设我们有如下的 2x2 矩阵:

B = | 4 9 || 2 6 |

矩阵 B 的迹计算如下:

Tr(B) = 4 + 6 = 10

很简单对吧(~~)?直接将主对角线上的 4 和 6 相加得到迹为 10。
矩阵的迹性质:1、矩阵迹具有线性属性ext{tr}(A + B) = ext{tr}(A) + ext{tr}(B);2、循环置换(Cyclic permutation) 对于多个矩阵的乘积,迹操作满足循环置换性,可以改变乘法中的项的顺序而不影响迹: ext{tr}(ABC) = ext{tr}(BCA) = ext{tr}(CAB)
特别注意并不意味着矩阵乘法是交换的,仅适用于迹。3、 特征值之和(Sum of eigenvalues): 矩阵的迹等于其所有特征值之和。如果 A 的特征值是 λ1, λ2, …, λn,则: ext{tr}(A) = sum_{i=1}^{n} λi

计算机图形学、几何形变中矩阵的迹大致有以下作用:

  • 物理模拟:在表征应力和应变等物理量时,矩阵的迹可以用来衡量表面或体积的变形程度。
  • 网格形变:在网格形变(例如 ARAP 形变)中,局部旋转的最佳拟合通常通过 SVD 来寻找,而迹被用来评价变换的刚性程度,确保局部结构尽可能保持刚性。
  • 几何处理:迹用来计算几何对象的局部描述符,例如用于估计曲面的均值曲率或高斯曲率。

前置知识-基于曲面的变形(Surface-Based Deformations):

根据《Polygon Mesh Processing》第七章的形变定义,如下图对一个正方形的曲面S进行变形,固定曲面S浅蓝色的部分F,然后选取黄色部分H的顶点作为控制顶,将其向上拉动。可以看到经过变形后,没有被固定的部分(R,即深蓝色部分)的顶点的位置发生了相应的变换。 根本的问题就是如何选取合适的位移函数d,使得变形的结果符合需求。
在这里插入图片描述

sbd:位移函数d是从曲面S到三位空间的映射,即计算时在三角形网格上进行的。这类方法能够有很高的控制度,能够对每一个顶点都加以控制,但是其鲁棒性不好,运行效率往往取决网格的的复杂度和质量。
只需设置个别离散点的新位置来表达他所想要的形变,计算出剩余离散点应有的位置,改变一个模型的姿势或者说大体形态(全局变形),而不是模型的表面细节和组成部分(局部不变)。

前置知识- 奇异值SVD的分解:

SVD(Singular Value Decomposition)将任意一个复数或实数矩阵分解为三个特定的矩阵乘积的形式。假设我们有一个矩阵A m×n。SVD就是找到三个矩阵U、Σ和V^T,使得它们相乘的结果等于A。形式上来说就是:A = UΣV^T 这里的三个矩阵具有以下特点

  1. U:左奇异向量矩阵矩阵大小为m×m,它是正交矩阵,即U的列向量互相正交,并且都是单位向量(长度为1)。
  2. Σ(西格玛):m×n的矩形对角矩阵。它的对角线上的元素是奇异值,并且奇异值按照从大到小的顺序排列。非对角线上的元素都是0。在实际应用中,奇异值越大表示那个方向上数据的变化越大。
  3. V^T:右奇异向量矩阵的转置矩阵,大小为n×n的。原来的V是正交矩阵, 它就是其转置形式。和U类似,V中的列向量也是互相正交的,并且是单位向量。
    SVD分解在信号处理、统计学、计算机图形学以及机器学习中的降维压缩数据(如PCA主成分分析)等场合都会用到SVD。

举一个压缩ML数据的例子:假设A是一个人脸图片的矩阵,SVD能够识别哪些特征(比如脸部轮廓、眼睛位置等)是构成这些人脸最重要的。

这是因为较大的奇异值所对应的方向上,数据的变化量大,蕴含的信息丰富。通过保留这些主要特征,甚至可以将数据进行压缩,即用更少的信息来近似描述原始数据。

SVD性质:

  1. 存在与唯一性:对于任何一个实数或复数矩阵A(不必是方阵),都存在一个奇异值分解,而且奇异值在Σ矩阵中是唯一确定的,即如果奇异值都是不相等的,那么这些奇异值是唯一的。然而,U和V矩阵的列向量可以有符号上的改变(即方向的镜像),因为奇异向量是根据A的A^TA 和 ATA和AAT 计算得到的,并且仅确定到正负号。
  2. 能量分布:A的Frobenius范数(即矩阵元素平方和的平方根)等于其奇异值的平方和如下:如果A的SVD为A = UΣV^T,并且Σ的对角线元素(即奇异值)为σ_1, σ_2, ..., σ_p,其中p是A的秩,则Frobenius范数满足
    ||A||_F = sqrt(σ_1^2 + σ_2^2 + ... + σ_p^2)。当你截取前k个最大奇异值及其对应的奇异向量时,这就给出了A的最佳k秩近似。
  3. 数据压缩与去噪:由于SVD可以提供关于数据能量分布的信息,保留最大的几个奇异值及其对应的奇异向量,可以用于图像压缩和去噪,同时损失的信息相对较少。
  4. 线性方程组的求解:SVD可用来计算矩阵的伪逆,进而找到线性方程组的最小二乘解。
  5. 矩阵的秩:矩阵A的秩等于非零奇异值的个数,这个性质可以帮助我们判断矩阵是否满秩或找出其秩的大小。

SVD 3*3的例子:
奇异值分解(SVD)
奇异值分解(SVD)原理详解及推导

前置知识-形变能量

第一次接触形变的时候天天提到了能量一开始云里雾里,看的很懵懂很懵逼后来理解了所以我特意在这里强调!计算几何的形变能量是指数学上定义的一个函数,它衡量形变后的模型和原始模型之间的差异程度能量通常用于指导网格形变的过程控制形变行为,并确保形变结果满足某些期望的性质,比如局部细节特征的保持、体积的不变性等。形变能量通常被用作最优化问题中的目标函数,使得通过找到最小化该能量函数的解(最小二乘法等)来获得最终的形变结果。
比如将要讲的能量:

  1. 平滑能量:要求形变后的网格保持平滑,常用于避免过度扭曲或皱折。(Mesh平滑处理的几种算法比较)
  2. ARAP 能量:As-Rigid-As-Possible 形变希望每个局部区域都能尽可能地保持原始的形状和大小,这就涉及了计算每个小区域的局部旋转,并试图最小化它们相对于全局变形的偏差。
  3. 拉普拉斯形变能量:使用拉普拉斯坐标定义的能量,它试图保持原始网格和形变网格顶点的拉普拉斯坐标一致,以此保持网格的局部属性。

Laplacian Deformation形变及其改进:

简单来说拉普拉斯形变是基于网格顶点的拉普拉斯坐标,它记录了顶点与其邻接顶点之间相对位置关系的系统。拉普拉斯坐标的定义通常基于网格的拉普拉斯算子,个描述网格局部几何特性的微分算子。对于三角网格中的每个顶点,其拉普拉斯坐标是该顶点与邻接顶点位置差的加权平均
拉普拉斯形变以前大致讲过(Mesh形变算法) 或者看大佬博客图形处理(三)简单拉普拉斯网格变形-Siggraph 2004以及图形处理(五)基于旋转不变量的网格变形-Siggraph 2007
如下图拉普拉斯形变在旋转过程中的缺点:

  1. 体积损失:在大范围的旋转下,传统的拉普拉斯形变可能导致模型体积的损失,产生塌陷的现象,特别是在模型的细长部分。这是因为拉普拉斯算子是一个线性算子,它不直接编码旋转信息。
  2. 形状扭曲:由于传统拉普拉斯形变保持局部差分坐标,这些坐标并不完全与旋转不变性兼容。因此,当网格发生较大的旋转时,原先的局部结构可能会扭曲。
  3. 细节损失:拉普拉斯形变是非刚性形变!在旋转之后,如果相同的拉普拉斯坐标被用于重建形状,那么模型的一些细节特征可能会丢失,导致形状的全局或局部特征改变。
    在这里插入图片描述

基于旋转不变性的拉普拉斯形变是拉普拉斯形变的一个改进。拉普拉斯坐标被分解成一个方向向量(长度)和一个大小(权重)。然后这个方向向量会被调整,使其适应网格的旋转变化。这个改进的方法的关键是,它增加了对网格局部旋转的考虑。不仅保持了拉普拉斯坐标的大小不变,还尽量保持了方向向量在局部旋转下的不变性。这种方法可以使变形的结果看起来更加自然,特别是当网格经历复杂的旋转运动时。这些方法的共同点在于它们都利用了拉普拉斯坐标来保持网格的某些局部属性,基于旋转不变性的拉普拉斯形变由于考虑了旋转,往往在处理需要保留体积和细节的场景时更为优越。
在这里插入图片描述

ARAP形变:

As-Rigid-As-Possible跟拉普拉斯形变也是基于表面的变形,arap如何保证刚体:

希望尽量使所有的边都只经历刚体变换。 已知三角形具有稳定性,即三条边长度确定时形状确定。 尽量去保持每条边的长度也就是在尽量地保持局部的形状


在这里插入图片描述

ARAP形变框架中有两个关键的子问题需要解决:

  1. 位置变量(p): 这些是变形后顶点的位置。p 代表网格上每个顶点移动后的位置坐标。在优化过程中,这些位置会被更新以寻找变形的最终状态。
  2. 旋转变量(R): 这些是局部旋转R 表示与网格顶点相关联的旋转矩阵,它们用于描述网格局部区域的刚体旋转。对每个顶点或网格单元,都会找到一个最佳的局部旋转矩阵 R,使得变形后的局部结构在旋转意义上保持与原始局部结构的一致性。
    求解子问题1与2的这个过程通常会迭代进行,直到满足一定的收敛条件为止。

所以如下图是ARAP整体流程:分别固定 R 和 P ,求解都很容易:固定 R ,计算P ,固定旋转变量 R,找到新的位置变量 P,以降低全局的变形能量求解问题2 ; 固定P ,计算R ,固定位置变量 P,解决旋转变量 R,使局部结构尽可能地保持刚性求解问题1;
在这里插入图片描述

上图公式左边是arap的约束,希望所有边发生变化后形变最小,就是能量公式。左边为0(接近0) 是被控制点不管约束然后尽可能的靠近控制点!min 是希望这个着整个等式最小, 因为都是范数的平方,所以最好情况下等于0。 上图公式右边是用户手动调整的一些点(控制点),添加一个参数alpha,用于调整拖动的力度。alpha越大假如接近无穷大即,这样形变的被控制点一定会到用户拖动的点(控制点)的指定位置。

子问题一、在这里插入图片描述

子问题二、在这里插入图片描述

详细的子问题1 与2求解这里就不展开说看了呢一改比我讲的好!能量函数的最小化问题需要在局部和全局做迭代求解:全局过程使用新的旋转矩阵更新线性系统右边的向量,从而求解并更新每个顶点的位置P;局部过程则使用新的顶点位置更新协方差矩阵,并对协方差矩阵做奇异值分解,求得旋转矩阵R。反复迭代直至满足终止条件,获得变形后的网格。ARAP方法有一个性质就是最小化目标函数会使网格的边长变化最小,所以前面才说ARAP是如何保证刚性变化的就是根据这个来的!
特别注意:操作过程不能保证所有的网格点都只有刚性变换,所以只能在最优解下(不能算最小二乘法但是其实是类似的,因为论文发表的时间比最小二乘法的时间要早),找到对网格所有顶点尽可能接近的旋转矩阵。

初始化问题:分解成子问题1与2求解它们(类似于先有鸡还是先有蛋的问题),对此需要一开始固定哪一组变量。原作者的做法是如下:先把R初始化为3*3的单位三维旋转矩阵。原文如下
在这里插入图片描述

ARAP形变的性能消耗init和render阶段:

init:

  • 预计算邻接关系:需要确定网格中每个顶点的邻域,这包括找到与每个顶点相连的边和顶点,建立数据结构来存储这些信息。
  • 系统矩阵构建:建立线性方程组的稀疏矩阵(一共三个),其复杂度与网格的顶点数和连接性有关!

render 每一帧:

  • 局部步骤(Local
    Step):对于每个顶点,需要找到一个最佳的旋转矩阵,这个旋转矩阵使得其邻域顶点的形变尽可能刚性。通过奇异值分解(SVD)来实现占实时消耗的60-70%左右。
  • 全局步骤(Global
    Step):更新顶点位置以最小化整体形变能量,求解一个线性方程组,该方程组的大小与网格的顶点数成正比。求解这样的方程组通常使用共轭梯度法占比不是很大。

每次迭代就上面提到的分别更新P和R,性能上主要是更新R,每个顶点都对应一个旋转矩阵,都需要进行svd分解计算,这一步占迭代时间的60-70%。由于 SVD 在局部步骤中的计算成本较高,确实,很多性能开销是发生在执行SVD分解上的。特别是对于大型网格,SVD的计算会导致显著的性能消耗。可以考虑在GPU端实现ARAP算法。

Laplacian Deformation形变与ARAP的比较:

基于旋转不变量的拉普拉斯形变: 利用了拉普拉斯坐标,它是描述顶点及其相邻顶点位置关系的相对坐标系统(主要是保持每个顶点与其邻接点的相对位置不变)。拉普拉斯坐标捕获了局部的微分几何特征,并倾向于保持物体形状的光滑性和连续性,但是不太考虑保持物体的刚性。
优点:

  • 拉普拉斯形变能够比较好地保持网格的几何细节,因此适合微调模型。
  • 相对于ARAP,它解决的线性系统通常更简单,求解速度可能更快,不需要SVD等的求解。

缺点:

  • 拉普拉斯形变在处理大的变形时可能产生体积损失,也就是网格可能会塌陷。
  • 因为它直接使用了原始的拉普拉斯坐标,所以没有显式地考虑刚体的运动。

ARAP形变:ARAP形变则着眼于局部的刚体旋转,尝试在变形过程中最小化顶点与其邻接点之间旋转导致的变形保持每个小片区域尽可能刚性,使局部网格在旋转后尽可能保持形状。局部形状应该像刚体一样旋转,而有限的弯曲只发生在连接这些局部刚体的接缝处。因此更好地应对旋转和扭曲操作,有效地保持物体的刚性。
优点:

  • ARAP形变非常适合处理大的形变,它能够更好地保持网格的体积不变性,因此广泛用于动画和复杂变形(替代骨骼形变方案)。
  • ARAP对用户交互友好,因为它允许直观的拖拽操作并且产生预期的结果。

缺点:

  • ARAP需要在每次迭代时解决一个非线性最优化问题,比拉普拉斯要慢。
  • 算法实现相对复杂,并且需要额外的步骤来计算和更新局部旋转。

算法对比总结:

  • 当需要精细调整网格或执行小范围变形时,Laplacian Deformation是一个合适的选择,因为它能快速操作并且很好地保持细节。
  • 对于广泛的、直观的大规模形变,ARAP提供了更加自然的结果,尤其是在动画和实时编辑应用中表现突出。

参考资料:

Mesh形变算法
用数学编辑3D模型(一)- Mesh Deformation with Laplacian Coordinates
用数学编辑3D模型(二)- As-Rigid-As-Possible
图形处理(三)简单拉普拉斯网格变形-Siggraph 2004
图形处理(五)基于旋转不变量的网格变形-Siggraph 2007
《As-Rigid-As-Possible Surface Modeling》
经典论文推导: As-Rigid-As-Possible(ARAP) Surface Modeling

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL(基础篇)——函数、约束

一.函数 1.定义 函数是指一段可以直接被另一段程序调用的程序或代码。 2.字符串函数 常见如下: -- 字符串拼接 SELECT CONCAT(hello,MySql) AS CONCAT -- 将字符串全部转为小写 SELECT LOWER(HEllo MYSql) AS LOWER -- 将字符串全部转为大写 SELECT UPPER(Hello…

环境配置 |Jupyter lab/Jupyter Notebook 安装与设置

ipynb使用Jupyterlab/Jupyter Notebook 来编写Python程序时的文件,在使用时,可以现转换为标准的.py的python文件 1.Jupyter Lab 1.1.下载安装 环境:Linux pip install jupyterlab 1.2.使用 jupyter lab 点击后进入 1.3.jupyter lab更换内核 因为我的是在anac…

178文章复现:基于matlab的微震图像去噪

文章复现:基于matlab的微震图像去噪,利用同步压缩连续小波变换进行自动微震去噪和起始检测,SS-CWT 可对时间和频率变化的噪声进行自适应过滤,可以去除小幅值信号中的大部分噪声,检测地震事件并估算地震发生时间。程序已…

数据结构之树结构(上)

存储方式 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效…

小(2)型土石坝安全监测设施配置详解

小(2)型土石坝的安全监测是确保大坝稳定、安全运行的重要环节。为此,合理配置安全监测设施显得尤为重要。以下是对小(2)型土石坝安全监测设施配置的详细介绍。 一、渗流量监测 渗流量是反映大坝安全状况的关键指标之一。为准确监测渗流量,我们采用仪器量…

day05_用户管理minIO角色分配(页面制作,查询用户,添加用户,修改用户,删除用户,用户头像,查询所有角色,保存角色数据)

文章目录 1 用户管理1.1 页面制作1.2 查询用户1.2.1 需求说明1.2.2 后端接口需求分析SysUserSysUserDtoSysUserControllerSysUserServiceSysUserMapperSysUserMapper.xml 1.2.3 前端对接实现思路sysUser.jssysRole.vue 1.3 添加用户1.3.1 需求说明1.3.2 页面制作1.3.3 后端接口…

ChatGPT-4 AI 绘图魔力释放

最近刚开通了 ChatGPT4,正好要设计一个网站图标,想测试一下它AI绘图的能力,让它根据文字描述生成一个想象中的图标 (PS:如果想体验 GPT4 文生图,可以看这个教程 如何升级 ChatGPT 4.0) 第1次交…

【三维重建】【SLAM】SplaTAM:基于3D高斯的密集RGB-D SLAM

题目:SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM 地址:spla-tam.github.io 机构:CMU(卡内基梅隆大学)、MIT(美国麻省理工) 总结:SplaTAM,一个新…

ywtool network命令

一.network功能介绍 network功能就是通过脚本的方式配置IP信息,分为4项: (1) 配置单网卡(2)配置br网桥(单网卡)(3)配置bond(两张网卡)(4)配置ovs网桥(单网卡) 日志文件:/var/log/ywtools/ywtools-network.log/usr/local/ywtools/config/config.ini中network参数:…

从预训练到通用智能(AGI)的观察和思考

1.预训练词向量 预训练词向量(Pre-trained Word Embeddings)是指通过无监督学习方法预先训练好的词与向量之间的映射关系。这些向量通常具有高维稠密特征,能够捕捉词语间的语义和语法相似性。最著名的预训练词向量包括Google的Word2Vec&#…

项目实现json字段

有些很复杂的信息,我们一般会用扩展字段传一个json串,字段一般用text类型存在数据库。mysql5.7以后支持json类型的字段,还可以进行sql查询与修改json内的某个字段的能力。 1.json字段定义 ip_info json DEFAULT NULL COMMENT ip信息, 2.按…

应用存储与持久化数据卷

1、PV 引入场景: ① Deployment 管理的 pod,在做镜像升级的过程中,会产生新的 pod并且删除旧的 pod ,新旧 pod 之间如何复用数据? ② 宿主机宕机的时候,如何实现带卷迁移? ③ 多个 pod 之间&…

Redis 之三:发布订阅(pub/sub)

概念介绍 Redis 发布订阅 (pub/sub) 是一种消息通信模式,它允许客户端之间进行异步的消息传递 Redis 客户端可以订阅任意数量的频道。 模型中的角色 在该模型中,有三种角色: 发布者(Publisher):负责发送信…

[分类指标]准确率、精确率、召回率、F1值、ROC和AUC、MCC马修相关系数

准确率、精确率、召回率、F1值 定义: 1、准确率(Accuracy) 准确率是指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为: 准确率能够清晰的判断我们模型的表现,但有一个严重的缺陷&…

在Windows系统中启动Redis服务

前言 Redis是一个开源、高性能的键值对数据库,常用于缓存、消息队列等场景。本文将详细指导您如何在Windows系统上启动Redis服务。 第一步:确认Redis安装 确保您已经在Windows系统上成功安装了Redis。官方提供了预编译好的Windows版本,您可…

低代码中的可视化表单:效率与灵活兼备的设计工具

近年来,随着数字化转型的加速推进,企业对于高效率、灵活性和可定制性的软件开发需求不断增长。传统的软件开发过程通常需要耗费大量的时间和资源,而低代码开发平台的出现为企业提供了一种更加快速和灵活的解决方案。在低代码开发平台中&#…

Linux centos 变更MySQL数据存储路径

Linux centos 变更MySQL数据存储路径 登录mysql,查看数据存储路径创建新目录准备迁移数据检查是否配置成功 登录mysql,查看数据存储路径 mysql -u root -pshow global variables like "%datadir%";创建新目录 查看磁盘空间 df -h选取最大磁…

不可多得的干货,网易的朋友给我这份339页的Android面经

这里先放上目录 一 性能优化 1.如何对 Android 应用进行性能分析 android 性能主要之响应速度 和UI刷新速度。 首先从函数的耗时来说,有一个工具TraceView 这是androidsdk自带的工作,用于测量函数耗时的。 UI布局的分析,可以有2块&#x…

本届挑战赛亚军方案:基于大模型和多AGENT协同的运维

“轻舟已过万重山团队”荣获本届挑战赛亚军,该团队来自华为集团IT-UniAI 产品和openEuler系统智能团队。 方案介绍 自ChatGPT问世以来,AI迎来了奇点iPhone时刻,这一年来大模型深入影响企业办公,金融,广告,…

打造去中心化透明储蓄罐:Solidity智能合约的又一实践

一、案例背景 传统的储蓄罐通常是由个人或家庭使用,用于存放硬币或小额纸币。然而,这样的储蓄罐缺乏透明性,用户无法实时了解储蓄情况,也无法确保资金的安全性。 通过Solidity智能合约,我们可以构建一个去中心化…