Maya FEM节点框架完成
这几天把物理模拟框架移植到maya之中了。
maya编程有一点比较关键,就是要让自己的程序逻辑适应maya的节点求值机制。在物理模拟中,往往需要进行时间积分,对此我的解决办法是,写一个节点rigSimulator,存放模拟的状态数据(例如: 位置、速度、加速度、过去模拟的结果),再写一个mel命令rigSimulate,让指定的节点进行求值。模拟的主循环是一个mel 脚本,伪代码如下
int $t = 0;
for ($t = $begTime; $t < $begTime + $length; $t++)
{
// 设置当前时间
currentTime $t; // 对指定节点执行计算,结果存在节点内部
int $res = `rigSimulate -step -name $nodeName`;
if($res == 0)
break;
}
节点的属性如下:
Rigged Mesh为受到参数控制的网格
Mesh Transform为网格变换矩阵
Rig Parameter为控制网格变形的参数,是一个数组
节点的属性编辑器面板如下:
用法是先设置好物理参数,点Initialize,然后设置模拟的长度,点Simulate开始模拟,模拟过程中可以按ESC退出。
前两个参数控制四面体网格化的精细程度。
Young Modulus 为杨氏模量,与模型硬度有关。
Nu是不用轴向变形的影响程度。
Density是密度。
Step Time为每步的时间间隔,初始设置为1/24秒。
节点进行模拟时,需要获得给定参数下的网格形状。具体的做法是先设置Rig Parameter,然后读取Rigged Mesh,此时Maya便会对节点求值,返回一个被参数控制的网格。
模拟后的结果存在节点内部,一旦节点的draw函数被调用,节点会首先根据当前帧查找对应的模拟结果,再显示出来。
下图显示一个体网格化之后的圆柱体。
我给这个圆柱体加了一个平移动画,以及一个弯曲变形器。希望做出圆柱体移动的时候弯曲的效果。
节点求值网络如下:
这个是原来节点的动画
这个是模拟之后的动画。
最后说一点,就是模拟过程中按ESC退出功能的实现。这个功能虽然不是核心功能,但是却对程序调试带来方便。下面贴出代码:
global proc execSimulator(string $nodeName)
{
// 获取模拟长度
int $length = `intSliderGrp -query -value simLengthSlider`; // 设置进度条属性, -isInterruptable 表示能用ESC终止
global string $gMainProgressBar; // 这个全局变量由Maya定义,表示界面左下角的进度条
progressBar -edit
-beginProgress
-isInterruptable true
-status "Simulating... "
-maxValue $length
$gMainProgressBar; int $begTime = `currentTime -q`;
int $t;
for ($t = $begTime; $t < $begTime + $length; $t++)
{
// 若发现ESC被按下,中止模拟
if(`progressBar -query -isCancelled $gMainProgressBar`)
break;
progressBar -edit -step 1 $gMainProgressBar; // 否则继续模拟
currentTime $t; // 移动时间滑块到下一帧
int $res = `rigSimulate -step -name $nodeName`; // 执行模拟命令
if($res == 0)
break;
} // 模拟结束,不再显示进度条,同时鼠标指针回复正常
progressBar -edit -endProgress $gMainProgressBar;
}
估计有人会说“你这个只用Maya也能做到啊”,没错,而且这个插件现在还不完善。
其实,下一步还有功能要实现,例如给某些自由参数一些指导,而不是让它们完全自由。我把代码移植到maya的目的是在实现这些下一步的功能时,有个方便调试的平台(其中一个好处就是,不用自己实现maya的各种变形器)。
当前的问题,以及下一步的改进有如下几点:
1. 发现多个控制参数的时候模拟结果存在问题。不知道是不是雅可比矩阵的导数算错了的缘故。下一步需要检查。
2. 不能处理有洞的网格,估计自相交的也不行。
3. 暂时只支持corotational模型,不支持其他本构模型,例如NeoHookean。
4. 没有使用BFGS算法。
5. Rig Space Physics文中提及的硬度控制、反向运动学没有实现。
6. 把模拟出来的参数转成动画曲线,这一步估计用mel可以完成。
接下来几天可能要转向Python、Lua学习了。等这两个任务搞定了,再接着完成这些改进,到时候可以考虑尝试在maya用python编程。
Maya FEM节点框架完成的更多相关文章
- 实现Maya FEM节点
		准备实现FEM节点. 发现一种让自定义的Locator以及它的变换节点自动命名的方法.代码如下: void FEMSimulationNode::postConstructor() { MFnDepe ... 
- Maya编程——节点&命令
		代码写完出现问题: 查了一下原因: 
- CG资源网 - Maya教程
		Maya中mentalray灯光渲染终极训练视频教程 http://www.cgtsj.com/cg/f/vx3627/index.html Maya无人机建模制作训练视频教程第一季 http://w ... 
- 不可错过的Node.js框架
		前言 Node.js是由Ryan Dahl于2009年创建的.它是一个开源的跨平台运行时环境,用于开发服务器端和网络应用程序,它是基于Google Chrome V8 JavaScript引擎构建的. ... 
- 70部MAYA灯光材质渲染教程合集
		MAYA灯光材质渲染教程合集 教程格式:MP4和flv 两种格式 使用版本:教程不是一年出的教程,各个版本都有 (教程软件为英文版) 清晰度:可以看清软件上的文字 语言:部分中文字幕,其他英文(通过看 ... 
- cg tut
		Gesture Drawing with Alex Woo Gesture Drawing with Alex Woo and Louis Gonzales http://eisneim.com/?p ... 
- .Net魔法堂:log4net详解
		一.作用 提供一个记录日志的框架,可以将日志信息记录到文件.控制台.Windows事件日志和数据库(MSSQL.Acess.Oracle.DB2和SQLite等). 二.先看看示例,感受一下吧 c ... 
- JavaScript高级程序设计31.pdf
		其它方面的变化 DOM的其他部分在“DOM2级核心”中也发生了一些变化,这些变化与XML命名空间无关,而是确保API的可靠性及完整性 DocumentType类型的变化 DocumentType类型新 ... 
- U3D——Unity3D的脚本-script入门
		 Unity3D的基本操作非常easy就能掌握了,接下来就是游戏系统的核心部分:脚本. 什么是Script(脚本)?简而言之,就是使用代码来运行一系列动作命令的特殊文本,它须要编译器来从新解读.U ... 
随机推荐
- 管理系统的前端解决方案:Pagurian V1.3发布
			Pagurian 一个管理系统的前端解决方案, 致力于让前端设计,开发,测试,发布更简单. 功能简介 Pagurian 适用于Web管理级的项目 基于Sea.js遵循CMD规范,友好的模块定义,使业务 ... 
- HTML中行内元素的竖直方向的padding和margin是否真的无效
			参考资料:Inline elements and padding 今天写一个导航栏时遇到了一个问题:行内元素的padding-top,padding-bottom和margin-top,margin- ... 
- Quartz 2d绘图
			今天看了一下Quartz 2D绘图,我只想说:不要把绘图和动画那些东西当做一个很复杂的东西,其实只要你认真看还是可以理解的.他们并不难.啰嗦了几句,现在直接进入正题: 前提是我们必须新建一个singl ... 
- UITextField 基本属性使用
			//设置文本框 透明度 tf.alpha = ; //设置文本颜色 tf.textColor = [UIColor orangeColor]; //设置文本文字 格式 tf.font = [UIFon ... 
- CoreAnimation-08-CATransition
			概述 简介 CATransition又称转场动画,是CAAnimation的子类,可以直接使用 转场动画主要用于为图层提供移入/移出屏幕的动画效果 转场动画常见的应用是UINavigationCont ... 
- Effective Java 27 Favor generic methods
			Static utility methods are particularly good candidates for generification. The type parameter list, ... 
- JavaScript Patterns 2.11 Writing Comments
			Document all functions, their arguments and return values, and also any interesting or unusual algor ... 
- 管理故事——和尚挑水的故事
			有时候企业.公司的各种混乱都是源于管理问题,例如人浮于事.资源错配.机构臃肿-----,暂且不说企业管理.项目的管理,光是个人工作的管理.一个处理不好,接踵而来的就是一堆问题,可怕的不是出现问题,而是 ... 
- Altium Designer PCB制作入门实例
			概要:本章旨在说明如何生成电路原理图.把设计信息更新到PCB文件中以及在PCB中布线和生成器件输出文件.并且介绍了工程和集成库的概念以及提供了3D PCB开发环境的简要说明.欢迎使用Altium De ... 
- linux文件压缩与打包
			在linux中常见的压缩命令 首先,在linux中压缩文件的扩展名大多是 *.gz gzip程序压缩的文件 *.bz2 bzip2程序压缩的文件 *.tar tar程序打包的数据,并没有压缩过 *.t ... 
