当选择static solve的时候,求解的流程如下:

1.获得内力
2.qresidual = 外力-内力,qdelta = qresidual, qdelta的非约束元素赋给bufferConstrained

3.用tangentStiffnessMatrix给systemMatrix A赋值
4.求解A * buffer = bufferConstrained
5.把buffer指定为qdelta不受约束的部分

由此可见,实质上是求解 tangentStiffnessMat * dx = 外力 - 内力
而tangentStiffnessMatrix*dx等于内力增量,于是式子就是 内力 + 内力增量 = 外力
实际上就是牛顿法求平衡位置

关于static solve有个问题,就是static solve不考虑点自身的加速度,于是如果不存在约束,一直迭代下去,最终结果一般就是rest pose,这样如何进行动态的物理模拟?
Efficient Simulation of Secondary Motion in Rig-Space这篇论文,大概是认为惯性力与弹力相比是小到可以忽略不计的,可以认为是把物体的运动无限放慢,直到每个时刻物体加速度都接近0;也可以认为物体的硬度十分大,于是惯性力可以忽略。于是每个运动时刻,物体的内部点位置就与受力平衡时的位置一样。

进行了这个假定之后,内部点的位置就可以用外部点去表示,于是自然就想到用某种方式去逼近这种表示。上述论文就是用外部点的线性组合去表示。


为了获得权重,可以有以下两种方法:
1.由用户指定几组参数配置,得出模型的不同姿态,利用这些姿态完成权重的计算。最后利用算出的权重进行模拟。模拟过程中,内部顶点可能需要有较好的初始化位置,可以考虑用重心坐标这类方法。这种方法可以让用户任意指定姿态。
2.论文的方法,在rest pose下,给表面点一些初速度,进行模拟。模拟过程中内部点只求平衡位置,而表面点还是要考虑质量和加速度(也就是去掉 H = h^2 / 2 * (as^T * Ms * as + aq^T * Mq * aq) + W 中的 aq^T * Mq * aq 项,这样不需要对原有的模拟算法进行大改,实现比较方便,无需专门初始化

大概看了调和坐标的论文Harmonic Coordinates for Character Articulation,大概意思是通过给边界点i指定δ函数的边界条件,通过求解拉普拉斯方程来算得这个点对周围区域的影响权重。方法计算量比较大。


当前要完成的任务有:
1.实现static solve求内部点的平衡位置。为了获得较好的初始化位置,可以考虑用重心坐标这类方法
具体可以往rigSimulate加一个shake的flag,功能是求解关键帧动画的内部点位置,并保存。保存成文件?可以保存成rigState,然后允许用户读取、保存rigState,这样就可以自由读取结果而不担心结果冲突。rigState可以用Matlab矩阵的格式,这样就可以容易被matlab插件读取了。
此时要搞一个切换开关,就是把参数param赋值为initParam的值,而不是赋值为内部的模拟值。用户通过给initParam设置动画控制shaking参数。
2.用python完成权重的计算
可以考虑先读取保存好的rigState,运行算法,再把结果保存。算法实现好之后再考虑变成mel命令。
3.实现消除了内部点自由度的模拟算法
读取权重算法结果,进行模拟。



看ImplicitBackwardEulerSparse关于static solve的代码的更多相关文章

  1. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  2. 一文看懂Stacking!(含Python代码)

    一文看懂Stacking!(含Python代码) https://mp.weixin.qq.com/s/faQNTGgBZdZyyZscdhjwUQ

  3. 我们为什么要看《超实用的Node.JS代码段》

    不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1.     ...

  4. c++聪聪看书(低数据版代码)

    聪聪是一个善良可爱.睿智聪慧的好孩子.聪聪喜欢看书,这一天她在看一本书时看到了这样一个问题:给你一个正整数n,你要将它分成若干个自然数Ai的和的形式,并且使得这若干个自然数Ai的乘积尽量大,并输出最大 ...

  5. PHP_Bibel阅读学习(一)——看书看经典,写文写代码

    基础快速再看一下,然后每天有新的好玩的看. 这本书,反正好评不少,就是`PHP和MySQL Web开发`,机械工业出版社,澳洲人写的,红皮,有兴趣的可以看一下. 第一篇 使用PHP 一.入门 5分钟翻 ...

  6. 黑马程序员——JAVA基础之主函数main和静态static,静态代码块

    ------- android培训.java培训.期待与您交流! ---------- 主函数:是一个特殊的函数.作为程序的入口,可以被jvm调用. 主函数的定义: public:代表着该函数访问权限 ...

  7. C语言-人狼羊菜问题-最容易看懂的解决方法及代码

    题目描述:农夫需要把狼.羊.菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊.请考虑一种方法,让农夫能够 ...

  8. 构造方法、封装、关键字(this、static)和代码块的介绍

    1.构造方法 1.1 构造方法与成员方法的区别 构造方法分为无参构造和有参构造,其中有参构造方法和无参构造方法为方法的重载关系. 构造方法在初始化一个类的对象时进行调用,它没有返回值,方法名与类名相同 ...

  9. 看完python这段爬虫代码,java流泪了c#沉默了

    哈哈,其实很简单,寥寥几行代码网页爬一部小说,不卖关子,立刻开始. 首先安装所需的包,requests,BeautifulSoup4 控制台执行 pip install requests pip in ...

随机推荐

  1. ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

    1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebForm和MVC也都越来越完善,小小算来我也已经工作了将近三年,从大学的时候学习ASP.NE ...

  2. 生理周期(c++实现)

    描述:人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23 天. 28 天和33 天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维 ...

  3. access的逻辑类型

    Alter TABLE [表名] ADD [新增字段] BOOLEAN或者Alter TABLE [表名] ADD [新增字段] YESNO 或者Alter TABLE [表名] ADD [新增字段] ...

  4. C++指针笔记

    什么是指针: 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.通过指针我们可以直接对内存进行操作. 什么是地址: 比如你要给你朋友寄快递,在寄东西的时候是不是要填写地址,通过地址你的 ...

  5. [ html canvas 透明度 globalApha ] canvas绘图属性 透明度 globalApha 属性演示

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...

  6. 每日vim插件--vim中的文本对象及相关插件

    最近在个人博客上 http://foocoder.com  每天都会介绍一个vim插件,想起来园子也好久没更新了,也来更新一篇. 今天按读者留言的要求,介绍下文本对象.同时还会介绍我在用的几个文本相关 ...

  7. Android—SQLITE数据库的设计和升降级

    Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动 ...

  8. java调用python代码

    同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...

  9. Objective-C之用C的字符来处理NSString相关的字符替换和拼接的问题

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  10. Java递归实现操作系统文件的复制、粘贴和删除功能

    通过Java IO递归实现操作系统对文件的复制.粘贴和删除功能,剪切=复制+粘贴+删除 代码示例: import java.io.BufferedInputStream; import java.io ...