maya动力学有以下几套系统:

1.刚体、柔体系统

刚体系统的典型节点连接方法如下:

物体的变换节点、形状节点连接rigidBody节点,刚体节点输出力到解算器节点,解算器输出新的变换到变换节点

值得注意的是柔体系统实际上是用粒子实现的,通过给每个网格顶点赋予一个粒子,再让粒子反过来操纵网格,实现网格的变形。
通过在粒子之间创建大量弹簧,实现粒子之间的相互影响,于是物体看上去就像发生了弹性变形一样。
弹簧的节点连接方法如下:

2.普通粒子系统

普通粒子系统可以同网格物体发生碰撞。典型节点连接方法:

网格的形状节点输出到geoConnector节点,这个节点输出一个sweptGeometry,粒子根据sweptGeometry数据计算自身是否应该反弹。
sweptGeometry表示一个几何体一帧之内每个三角形扫过的区域。其存放几何体每个三角形在此帧前后的位置。

可以发现此种连接方式没有影响形状节点的输入,也就是影响是单向的,物体影响粒子系统,但是粒子系统不影响物体。

3.n粒子系统、n布料系统

默认情况下,n粒子系统可以同n布料系统发生碰撞。
n布料系统通过调整物体的刚性参数,可以模拟布料,也可以模拟柔体、刚体,是一个多功能的系统。
n粒子系统的节点连接方式是:

n粒子的形状节点的current state、start state输出分别连到nucleus解算器节点的inputActive、inputActiveStart输入中,解算器节点的outputObjects属性连到形状节点的nextState属性中。这几个属性都是Nobject类型。

n布料的连接方式与此相同。

还有一种称为Passive Object,也就是会影响n粒子、n布料,但是自身我行我素不受影响的物体。这种物体的连接方式如下:

nRigid物体的输出连入nucleus解算器,但解算器无输出连到物体本身。
值得注意的是nRigid物体在模拟过程中是允许变形的,但是网格拓扑不能变。

可见n系统工作方式是:把所有n物体都输入nucleus节点,再把节点的解算结果传回给对应的n物体。

n粒子可以实现粒子之间的堆叠(因为粒子之间可以存在作用力)

几个与粒子有关的mel命令:
命令 功能 典型用法
event 插入一个碰撞事件,可以是粒子分裂、粒子出生,或者调用外部函数
event -proc myProc myCloud;
// Call the MEL proc 
// "myProc(name, id, name) each time a particle
// of myCloud collides with anything.
getParticleAttr 获得粒子系统的属性,返回平均值,或者是数组
getParticleAttr -at velocity particle1;
// This will return the average velocity for the entire particle
// object as well as the maximum offset from the average.

getParticleAttr -at velocity 
particleShape1.pt[0:7] 
particleShape1.pt[11];

// This will return the average velocity for particles 0-7 and 11
// as well as the maximum offset from the average.
particle 创建粒子、编辑、修改粒子属性
particle -attribute velocity -order 7 -q;
// Returns the velocity of the 7th particle in the currently selected
// particle object

particle -e -attribute velocity -order 7 -vectorValue 0.0 1.0 0.0;
// Edits the velocity of the 7th particle in the currently selected
// particle object to be 0.0, 1.0, 0.0
nParticle 与particle命令类似
nParticle -attribute velocity -order 7 -q;
// Returns the velocity of the 7th particle in the currently selected
// particle object
nParticle -e -attribute velocity -order 7 -vectorValue 0.0 1.0 0.0;
// Edits the velocity of the 7th particle in the currently selected
// particle object to be 0.0, 1.0, 0.0

发现n粒子可以用以下方法查询碰撞的力:
1.首先在粒子形状节点添加以下属性:


2. 然后用以下命令
nParticle -attribute collisionForce -id 1 -q nParticle1;
可以返回特定粒子的属性
若用getAttr nParticleShape1.collisionForce,则可以返回所有粒子的属性

也就是说,粒子自定义属性是一些由用户添加上去的属性,用户添加了之后,粒子系统每一帧会根据自身情况,设置这些属性的值

下面是碰撞相关属性的含义。其中World表示世界空间(但似乎仍然是局部空间……)
名称 大小 含义
collision(World)Force 粒子数*3 碰撞过程中粒子所受的力
collision(World)Position 粒子数*3
碰撞位置
collision(World)IncomingVelocity 粒子数*3
碰撞前速度
collision(World)OutgoingVelocity 粒子数*3
碰撞后速度
collision(World)Normal 粒子数*3
碰撞地点法线
collisionTime 粒子数 碰撞发生时间
collisionGeometryIndex 粒子数 一个位图,每一元素表示一个粒子,若该粒子发生碰撞,对应元素为0,否则为碰撞的几何体序号,可以通过以下方法获得几何体
int $idx = particleShape1.collisionGeometryIndex;
 if( $idx != -1 )
 { string $geoC[] = `listConnections particleShape1.collisionGeometry[$idx]`...}
collisionComponentId 粒子数 一个位图,每一元素表示与粒子发生碰撞的多边形面(face)序号,注意这些序号可能来自不同物体。此时可以通过为碰撞事件绑定一个回调函数(见前述event命令),通过回调函数的参数获得碰撞物体名称

值得注意的是前面几个关于碰撞点数据的属性,只有在碰撞发生的粒子对应的数组位置才会被设置,其余位置为未知值,一般为-999.99之类。使用时应该先查询collisionGeometryIndex,再对确实发生碰撞的粒子处理。

关于maya动力学系统的一些总结的更多相关文章

  1. CG资源网 - Maya教程

    Maya中mentalray灯光渲染终极训练视频教程 http://www.cgtsj.com/cg/f/vx3627/index.html Maya无人机建模制作训练视频教程第一季 http://w ...

  2. 70部MAYA灯光材质渲染教程合集

    MAYA灯光材质渲染教程合集 教程格式:MP4和flv 两种格式 使用版本:教程不是一年出的教程,各个版本都有 (教程软件为英文版) 清晰度:可以看清软件上的文字 语言:部分中文字幕,其他英文(通过看 ...

  3. Altera OpenCL用于计算机领域的13个经典案例(转)

    英文出自:Streamcomputing 转自:http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl- ...

  4. cellular neural networks(CNN)原理以及应用

    一.CNN的原理 1.CNN的思想: (1)借鉴了hopfield神经网络和CA a.hopfield的非线性动力学(主要是用于优化问题,比如旅行商问题等NP问题),Hopfield的能量函数的概念, ...

  5. cg tut

    Gesture Drawing with Alex Woo Gesture Drawing with Alex Woo and Louis Gonzales http://eisneim.com/?p ...

  6. 【cs229-Lecture18】线性二次型调节控制

    本节内容: 控制MDP的算法: 状态行动奖励: 非线性动力学系统: 模型: LQR:线性二次型调节控制:(Riccati方程)

  7. 递归神经网络(RNN,Recurrent Neural Networks)和反向传播的指南 A guide to recurrent neural networks and backpropagation(转载)

    摘要 这篇文章提供了一个关于递归神经网络中某些概念的指南.与前馈网络不同,RNN可能非常敏感,并且适合于过去的输入(be adapted to past inputs).反向传播学习(backprop ...

  8. LSTM/RNN的应用Case

    作者:许铁-巡洋舰科技链接:https://www.zhihu.com/question/37082800/answer/126430702来源:知乎著作权归作者所有,转载请联系作者获得授权. 作者: ...

  9. MEMS陀螺仪(gyroscope)的结构

    MEMS陀螺仪(gyroscope)的设计和工作原理可能各种各样,但是公开的MEMS陀螺仪均采用振动物体传感角速度的概念.利用振动来诱导和探测科里奥利力而设计的MEMS陀螺仪没有旋转部件.不需要轴承, ...

随机推荐

  1. 不直接登录SharePoint服务器,通过远程直接部署WSP解决方案包

    在这之前不得不说一下Sysinternals,他最初是一个网站,网站上会经常发布一些有用的系统扩展工具,之后运营这个网站的公司被微软收购.像非常著名的Procmon,AutoRuns.Process ...

  2. ICSharpCode.SharpZipLib简单使用

    胡乱做了个小例子,记录下来,以便后面复习. using System; using System.Collections.Generic; using System.Linq; using Syste ...

  3. UIModalPresentationStyle和UIModalTransitionStyle

    一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...

  4. Android压力测试工具——Monkey

    Android压力测试工具——Monkey Monkey是运行在模拟器上和真机设备上的一段程序,它会产生用户事件的一系列伪随机流,比如点击.触摸.手势,还有很多系统级别的事件.Monkey通常是用来做 ...

  5. VC对ScrollView的调整

    VC对ScrollView的调整 automaticallyAdjustsScrollViewInsets automaticallyAdjustsScrollViewInsets是ViewContr ...

  6. visual studio生成后调试启动又提示部分项目需要生成问题总结

    长久以来若干个项目都遇到过类似的情形,已经成功生成的项目启动调试或者再生成依然认为部分项目需要生成而不是跳过.总结以往的经验,记录下来,以便大家遇到时处理. 若有多个项目提示需要重新生成,优先检查被依 ...

  7. Rollback 语句 在08R2版本

    有时候为了数据完整我们会启用到事务.正常的时候一帆风顺,如果rollback 呢? 最简单的一个回滚 IF OBJECT_ID('PROC1') IS NOT NULL     DROP PROCED ...

  8. [原]openstack-kilo--issue(六):Authorization Failed: The resource could not be found. (HTTP 404)

    =======1.问题点:====== 在安装调试openstack-kilo版本的时候,使用keystone endpoint-list的时候出现了问题. 如下: [root@controller ...

  9. x01.BitmapHelper:图像处理

    “所有致我于死地的,也激发我胆魄”,姚贝娜的<心火>,是我近年来听过最好的歌,特此推荐一下. 图像处理,大概分三步:1.LockBits():2.进行处理:3.UnlockBits():这 ...

  10. Android Native 程序逆向入门(一)—— Native 程序的启动流程

    八月的太阳晒得黄黄的,谁说这世界不是黄金?小雀儿在树荫里打盹,孩子们在草地里打滚.八月的太阳晒得黄黄的,谁说这世界不是黄金?金黄的树林,金黄的草地,小雀们合奏着欢畅的清音:金黄的茅舍,金黄的麦屯,金黄 ...