当选择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. python模块基础之json,requeste,xml,configparser,logging,subprocess,shutil。

    1.json模块 json     用于[字符串]和 [python基本数据类型] 间进行转换(可用于不同语言之前转换),json.loads,将字符串转成python的基本数据类型,json.dum ...

  2. SharePoint 2013 设置自定义布局页

    在SharePoint中,我们经常需要自定义登陆页面.错误页面.拒绝访问等:不知道大家如何操作,以前自己经常在原来页面改或者跳转,其实SharePoint为我们提供了PowerShell命令,来修改这 ...

  3. 文件快速搜索工具-Everything的使用(转)

    首先它是一款基于名称实时定位文件和目录的搜索工具,有以下几个优点: 快速文件索引 快速文件搜索 较低资源占用 轻松分享文件索引 实时跟踪文件更新 通过使用everything小工具,可以提高我们的工作 ...

  4. 转:NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因

    转:http://www.cnblogs.com/tider1999/p/4308440.html NLog的安装请百度,我安装的是3.2.NLog可以向文件,数据库,邮件等写日志,想了解请百度,这里 ...

  5. 与成都的幸福行动家交流GTD

    今年第四次来成都了,通过<小强升职记>的作者邹鑫的撮合,与成都的幸福行动家何平取得了联系,2014年12月6日下午给几个小伙伴们分享了GTD3年来的一点体会.有几位刚接触GTD的朋友,也有 ...

  6. Android项目实战(七):Dialog主题Activity实现自定义对话框效果

    想必大家都用过Dialog主题的Activity吧,用它来显示自定义对话框效果绝对是一个非常不错的选择. 即把activity交互界面以Dialog的形式展现出来,Dialog主题的Activity大 ...

  7. pycharm安装与实践

    PyCharm简介 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成. ...

  8. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

  9. JAVA基础学习day25--Socket基础二-多线程

    一.上传图片 1.1.示例 /* 上传图片 */ import java.net.*; import java.io.*; import java.util.*; import java.text.* ...

  10. linux终端python自动提示

    linux终端python自动提示 很多时候,在linux下编写python时, 都懒得去vi一个新文件,直接就新开一个终端, 进入python命令行模式,然后就可以写一些测试代码. 不过最悲剧的就是 ...