Mesh形变算法

前言:

作者正好因为动画、模拟仿真等等的重大需求需要预先研发离散形的模型Mesh的形变算法,并且要验证、研究适用的范围、特别是性能等等,摸着石头过河别喷,毕竟我主要是渲染、动画、引擎的对于计算几何、三维重建不是很熟悉,特别是对于一些动画的形变。
对于一个三角形网格的 变形(Deformation) 算法应该满足下面两个基本条件

  1. 能够隐藏于交互界面之后
  2. 效率足够高以满足交互需求

对于形变根据《Polygon mesh processing》第九章形变的描述,形变大体分为了两种:

  1. 空间变形(Space Deformations):即对曲面的变形是隐式的。因为计算不依赖于三角形网格曲面S,所以其不受网格复杂度和质量的影响;例如FFD算法。
  2. **基于曲面的变形(Surface-Based Deformations):**即计算时在三角形网格上进行的。这类方法能够有很高的控制度,能够对每一个顶点都加以控制,但是其鲁棒性不好,运行效率往往取决网格的的复杂度和质量;例如大名鼎鼎的也是最基础的表面形变“拉普拉斯新形变”、ARAP形变等等。

静态FFD算法:

基础理论:贝塞尔曲线、曲面、超曲面 ;特别注意B样条曲线实际上是对贝塞尔曲线的扩展, B指Basic, 或者说贝塞尔曲线是B样条曲线的特例, B样条曲线通过一系列范围有限的基函数组合来解决贝塞尔曲线牵一发而动全身的缺点。
在这里插入图片描述
在这里插入图片描述

经典控制点形变算法FFDs,经典FFD算法在Blender中主要应用于晶格修改器;

FFD是基于一个3次的贝塞尔超曲面插值或者3次的三次样条插值
而言的:

  • 在平行六面体上定义局部坐标系;
  • 计算平行六面体中任意点的 (s,t,u) 坐标。
  • 在平行六面体上有一个控制点P(l,m,n)来控制网格网格。
  • 到处移动控制点P,引起物体形变。
  • 基于贝塞尔超曲(B样条线的基函数,)或其他类型的多项式获取到新位置。

STU坐标系中的一点:
在这里插入图片描述
变形点:
在这里插入图片描述

FFD 缺点

  • 平行六面体网格形状限制变形形状,控制点不能是任意的。
  • 无法控制控制点的在空间中随意分布。
  • 贝塞尔基函数具有全局影响力,影响Mesh。
  • 晶格边界处变形空间的不连续性,重叠晶格该如何使空间变形?

所以为了解决这些进行了扩展

- B 样条基 FFD (Purgathofer)。
- 扩展 FFD (Coquillart)
- deCasteljau FFD(Chang & Rockwood)
- Catmull-Clark FFD (McCracken & Joy)
- Dirichlet FFD(Moccozet 和 Thalmann)

即使是用来FFD的扩展与变形还是存在

“如果给定某点位移作为限制条件,其结果会有缺陷。我们假定有N个控制点,M个约束坐标点。这M个点的位移大小我们给出了限定,但我们不知道控制点如何位移才能得到这M个点!”

的问题。

结论:每一个模型顶点都可以通过控制点位置的加权得出。每个控制点对每个顶点的权重,取决于顶点在控制点坐标系下的坐标(形变权重仍然只与位置相关),在经典FFD中是一个B样条基函数的权重。因为权重只取决于初始几何位置,可以预先计算,因此变形时计算很快。 但是不适合进行精细的调整,只能够大范围地进行改动。 对于虚拟衣服来说,这样很容易造成角色衣服失真;并且无法判断某个角点 与实际变形效果的映射关系。

附上Static Bezier 函数生成器FFD的代码实现。

Radial basis function算法

径向基函数(RBF)基础理论:是一个取值仅依赖于到原点距离的实值函数(函数值是“实数”,不可以取虚数或±∞的)也可以按到某一中心点c的距离来定义,其中,函数范式一般为欧几里得距离,不过亦可使用其他距离函数,可以用于许多向函基数的和来逼近某一给定的函数。
在这里插入图片描述
RBF形变不需要构建额外的骨骼关节,而是 采用调整自定义控制点的方式来调整附近模型顶点的位置, 控制方法简单,适合自动化处理。并且没有FFD的约束只能较大面积,又有精细度控制点任意非常满足我们低模控制高模的衣服需求。

算法原理:
RBF就是一个方程组的求解,假设在 3 维空间中有 M 个离散点 xi,那么 RBF 可以提供该离散空间中的整体平滑插值函数 F( x) 。 该函数 就是 M 个径向基函数 G(ri)的结果之和,其中 ri 是估算点和 原始点的距离:
在这里插入图片描述

其中 ai 是常量系数,c0 ,c1 ,c2 ,c3 为多项式系数。 因为已知 M 个离散控制点 X1 到 XM ,因此可以构建 M 个 F(Xi)= Fi。 由 此可以构建 M+4 个线性方程组 F=GA 并求解,这里 F= (F1 , F2 , …, FM , 0, 0, 0, 0) ,A = ( a1 , a2 , …, aM , c0 , c1 , c2 , c3 ) ,而 G 是一个(M+4, M+4)的矩阵。解算线性方程组得到所有参数之后,再传入新的 X= ( x, y, z)坐标值,就可以得到对应的空间基函数插值的结果。
RBF的性能在计算的过程需要求取输入点(衣服高模1W+顶点)和所有控制点(人体低模400+)的距离值,因此控制点、求解点的数量会影响到计算的效率;而模型完成变形之后也需要一个后处理的流程来重新计算顶点法线不然影响模型拓扑结构与渲染正确性

算法性能验证:径向基函数(RBF)的模拟实验下载安装PyGeM看第四节 RBF在houdini的模拟,我这里由于没使用过houdini、并且也是不免费的,但是认识有人研究使用踩坑过,即使人体低模约400+顶点,但是几百个point的rbf跑control point依旧卡上天!根本不是用来跑runtime的方案,只是用来做mesh形变单帧迁移的。PC(I9 9900k)上用dcc跑runtime都卡;maya的例子也有RBF的MayaPlugins,如下图400 控制 6000顶点 ,PC的电脑I7 9700KF。
在这里插入图片描述

在这里插入图片描述

Wrap算法原理:

其操纵Mesh形变影响另一Mesh形变

  • D:需要包裹算法变形器修改的网格。
  • R:克隆生成D的副本。
  • r:网格周围的受影响半径。
  • local:控制变形局部的标量。
  • f:在这里插入图片描述

算法绑定:模型R有一个控制点K,模型点P处受包裹算法影响的权重函数F(P,k)=F(dist(P,k))local,P在控制点k的局部坐标系中计算。
形变:网格D的每个顶点都是控制点k。当P绑定到控制点时,P的计算是基于局部坐标系;P点的整体变形是所有控制顶点基于其影响变形函数的加权平均值。

在这里插入图片描述

后面介绍的两种形变都是Triangulated Surface Mesh Deformation。

简单的拉普拉斯形变:

Mesh Deformation with Laplacian coordinates(Laplacian Deformation),之前提到的FFD是基于自由形变,而表面形变是微分形变,后者想要求解稀疏矩阵。 拉普拉斯网格变形的本质是网格模型局部细节特征的编码和解码的过程。编码过程是指顶点的欧氏空间坐标到Laplacian坐标的转换。Laplacian坐标包含了网格的局部细节特征,因此Laplacian网格变形算法能够较好地保持网格模型的局部细节。解码过程是指通过微分坐标反求欧氏空间坐标,实质上是一个求解线性系统的过程。拉普拉斯给定具有n个顶点的三角网格模型M=(V,E,F),V为顶点集,E为边集,F为三角面片集合,顶点V与相临顶点的集合vi处的拉普拉斯坐标为在这里插入图片描述
其中,δi为顶点vi的拉普拉斯坐标,L(·)为网格的拉普拉斯算子,ωij为vj点相对于vi点的权值,且∑ωij=1。权重使用基于余切的权重(cotangent权重)即边的两个邻接三角面片的对角的余切的均值:在这里插入图片描述在这里插入图片描述

使用余切权重,这种变形方法能尽可能的保留局部细节。拉普拉斯具有三个性质:线性变换、平移不变性、旋转变换敏感
根据拉普拉斯坐标的性质,其对旋转敏感,所以网格的局部信息会发生旋转扭曲,且旋转尺度较大是,扭曲会非常严重就会失真。要实现网格模型的保特征变形,不能直接使用原网格的拉普拉斯坐标来重建变形后的网格模型,而应该重新设置微分坐标的方向再重建模型。

详细请看:图形处理(三)简单拉普拉斯网格变形-Siggraph 2004_hjimce的博客-CSDN博客
或者 : 用数学编辑3D模型(一)- Mesh Deformation with Laplacian Coordinates - 知乎

As-Rigid-As-Possible 算法

ARAP算法原理及其详解请看参考【5】与【6】
ARAP算法能“在保持局部细节的前提下去编辑模型的大体形态”这一要求,而且易于实现,计算量较小,并且算法保证会收敛。但是,ARAP也存在诸如无法保持模型的体积,以及当模型很精细时解算会不太稳定等缺陷,

最重点的是地下cgal的算法实现:
添CGAL 表面形变使用(拉普拉斯、ARAP形变)教程;

参考资料:

1.形变FFDs, wires, wraps论文
2.计算机图形学十:贝塞尔曲线与贝塞尔曲面 - 知乎
3.径向基函数RBF三维网格变形
4、模型变形从FFD到RBF
5、用数学编辑3D模型(二)- As-Rigid-As-Possible
6、动画形变Linear rotation-invariant coordinates和As-Rigid-As-Possible算法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一体化医学影像平台PACS源码,影像存档与传输系统源码

PACS影像存档与传输系统源码 PACS即影像存档与传输系统,是医学影像、数字化图像技术、计算机技术和网络通讯技术相结合的产物,是处理各种医学影像信息的采集、存储、报告、输出、管理、查询的计算机应用程序。 是基于DICOM标准的医学影像管理系统&…

大龄、零基础,想转行做网络安全。怎样比较可行?这届粉丝可真难带

昨晚上真的给我气孕了。 对于一直以来对网络安全兴趣很大,想以此作为以后的职业方向的人群。 不用担心,你可以选择兼顾工作和学习,以步步为营的方式尝试转行到网络安全领域。 那么,网络安全到底要学些什么呢? &…

Kyligence 客户案例招商银行批发业务分析平台获评金融数字化最佳实践案例

近日,“2023 爱分析金融数字化最佳实践案例”评选结果正式揭晓。Kyligence 携手招商银行申报的“招商银行‘火眼’批发业务分析平台”项目经过领先性、案例创新性、应用成熟度、价值创造等维度综合评选,最终获评“金融数字化最佳实践案例”。 招商银行“…

c++输入输出文件操作stream

系列文章目录 C IO库 文章目录 系列文章目录前言一、文件IO概述coutcin其他istream类方法 文件输入和输出内核格式化总结 前言 一、文件IO 概述 c程序把输入和输出看作字节流。输入时,程序从输入流中抽取字节:输出时,程序将字节流插入到输…

进攻中型SUV,蔚来/小鹏的智能化「满配」能否撬动需求

251.29万辆,这是2022年中国市场(不含进出口)乘用车中型SUV交出的答卷,交付量仅次于紧凑型SUV,排名细分市场第二。在这份成绩单中,有几个数字特别醒目。 1、31.64万辆,这是排名这个细分市场交付量…

BFT 最前线 | 张一鸣成立个人基金;马斯克:AI是双刃剑;阿里首席安全科学家离职;卡内基梅隆究团队:解决农业虫卵问题的机器人

文 | BFT机器人 名人动态 CELEBRITY NEWS 01 字节跳动创始人张一鸣 在香港成立个人投资基金 在卸任CEO两年后,字节跳动创始人张一鸣在香港成立了一家个人投资基金。香港公司注册处网站显示,该基金名为Cool River Venture,性质是私人股份有限…

connect reset/timeout/reject 排查

异常排查 问题描述问题处理初步分析http配置即服务整体情况整体排查服务重启gcCPUJVM 暂存疑问点总结启动参数要配全监控体系健全科学使用jar包降配参数是参数得动态变 问题描述 最初出现的时候,是在每天的早上8-10这个时间范围内,服务A上的有一个接口时…

电源方案对比

电源 1.方案选择:1 LM2596 2 MP1584 3:TPS54301LM25962.MP1584:3.TPS5430 2.1输出2A电流的纹波2.2 输出3A电流的纹波3.动态响应4.发热5.电源转换效率6.综合指标reference 1.方案选择:1 LM2596 2 MP1584 3:TPS5430 1LM…

开源赋能 普惠未来|XuperCore诚邀您参与2023开放原子全球开源峰会

XuperCore(待更名)是百度自主研发,拥有完整知识产权的区块链底层技术XuperChain的内核,拥有620多篇区块链核心技术专利,以“高性能”、“开源”为主要设计目标,致力于创建“更快、更通用、更好用”的区块链…

protobuf全局环境搭建

一、安装npm 1.测试是否安装npm 如果未出现npm 不是内部或外部命令,则先安装npm npm是NodeJs的包管理器(Node Package Manager) 所以我们要安装npm,其实就是安装NodeJs,进入NodeJs官网 下载完成之后,安装…

开发工具---Eclipse 教程Ⅰ

Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。 Eclipse 是 Java 的集成开发环境(IDE),当然 Eclipse 也可以作为其他开发语言的集成开发环境,如C,C,PHP,和 Ruby 等。 Eclipse 附带…

劝你别去外包,干了三年,感觉废了一半....

先说一下自己的情况,大专生,19年通过校招进入杭州某个外包软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

【Android定制】BUILD_AGO_GMS = no 和 BUILD_GMS=no属性

文章目录 概要名词解释细节小结 概要 在安卓底层源码中,有这样的两个属性,这两个第一眼看上去都像是带不带谷歌,BUILD_AGO_GMS no和BUILD_GMSno有什么区别?? 如果带了谷歌,那么这个设备就差不多是国外定…

小程序极速注册认证免300认证费 突破管理员身份只能绑定5个小程序绿色通道

小程序注册账号管理相信大家有时候头都很大,一个身份证号只能绑定5个小程序主管理员。超个5个小程序就得请朋友、请亲戚身份证绑定管理员。有时还得看对方不方便,改个类目改个LOGO都还得管理员扫码。为了满足会员需求同是也满足自己需要,特别…

陌生交友发布动态圈子单聊打招呼群聊app开发

陌生交友发布动态圈子单聊打招呼群聊app开发 功能有,发布圈子,发布动态,查看附近的人,发布活动,实人认证,个人主页,相册查看,单聊,群聊。 即时通讯第三方goeasy接口。 好的&#x…

【nginx】同一接口有时返回500(client_body_temp)

问题描述: 同一个接口,有能正常访问并返回的,有的访问未到服务器直接返回500。 查看nginx日志(error.log),发现open() "/nginx/client_body_temp/0000476534" failed (13: Permission denied)报…

Linux——makefile自动化构建工具

一. 前言 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能…

Navicat “1205 - Lock wait timeout exceeded; try restarting transaction“

标题标题:解决Navicat数据库操作报错:1205 - Lock wait timeout exceeded; try restarting transaction 导言: 在使用Navicat进行数据库操作时,有时会遇到错误代码为"1205 - Lock wait timeout exceeded; try restarting t…

论文分享 A ConvNet for the 2020s

摘要 视觉识别的“咆哮的 20 年代”始于 Vision Transformers (ViTs) 的引入,它迅速取代了 ConvNets,成为最先进的图像分类模型。另一方面,vanilla ViT 在应用于对象检测和语义分割等一般计算机视觉任务时面临困难。正是层次化的 Transforme…

蓝奥声核心技术分享——无线同步群控技术

1.技术背景 无线同步群控技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策,属于蓝奥声核心技术--边缘协同感知(EICS)技术的关键支撑性技术之一。该项技术涉及无线物联网边缘域网络的无线通信与智能控制技术领域,具体主要…