发现一个问题
2015-04-06 18:41
204 查看
今天发现一个问题。
在一个粒子中,模拟一根棍子的弯曲参数,但是这根棍子会自己移动,且移动动画是外部指定的。模拟之后,播放动画发现,网格与模拟结果(用线框显示)不重合。
![](http://images.cnitblog.com/blog/511610/201504/061841345249415.png)
产生这种现象的原因在于maya的节点求值机制。在模拟过程中,是不断进行以下步骤:
1. maya自动对节点网络求值。包括粒子系统状态更新,动力学系统模拟2. 进行有限元模拟,算出网格顶点的位置、速度、加速度等结果3. 把结果写入下一帧4. 跳到下一帧
结果要写入下一帧的原因是:要保证maya内建的动力学系统在模拟时和播放模拟结果时都有相同的结果。做到这一点是十分重要的,因为若一个粒子在模拟过程的某时刻碰到有限元棍子,而在播放过程的相同时刻还未碰到,则会出现棍子在粒子未碰到时便提前变速的现象。这对效果的影响是很大的。
由于maya内建动力学系统的求值过程先于有限元模拟过程(见上述步骤),所以若要保持结果相同,在第i帧,动力学系统在模拟时和在播放结果时必须获得相同的输入。所以模拟结果必须写入下一帧。
但是,rig系统的特性会导致一个问题,这个特性是:rig网格的顶点位置是由1. 模拟参数p2. 外部参数p0 (例如用户设置的关键帧)共同决定的。
在此条件下,第i帧的模拟结果(q、v、a、p等)是针对这一帧的外在参数p0的。而在i+1帧,这些外在参数已经发生变化。于是,上图中线框显示的有限元网格(记录了第i帧的模拟结果)与maya根据第i帧参数p[i]与第i+1帧的外在参数p0[i+1]算出来的网格,便会存在明显的差异。
这样的一个直接后果是,由于第i帧的外力(例如,场的力)依赖于模拟结果的顶点位置,所以外力的大小会有误差。
一个解决办法是,在模拟之前,更新上一帧传过来模拟结果。具体是用模拟出的参数值,算出此时的新位置、新速度、新加速度,并修改RigStatus状态变量的模拟结果。
来自为知笔记(Wiz)
在一个粒子中,模拟一根棍子的弯曲参数,但是这根棍子会自己移动,且移动动画是外部指定的。模拟之后,播放动画发现,网格与模拟结果(用线框显示)不重合。
![](http://images.cnitblog.com/blog/511610/201504/061841345249415.png)
产生这种现象的原因在于maya的节点求值机制。在模拟过程中,是不断进行以下步骤:
1. maya自动对节点网络求值。包括粒子系统状态更新,动力学系统模拟2. 进行有限元模拟,算出网格顶点的位置、速度、加速度等结果3. 把结果写入下一帧4. 跳到下一帧
结果要写入下一帧的原因是:要保证maya内建的动力学系统在模拟时和播放模拟结果时都有相同的结果。做到这一点是十分重要的,因为若一个粒子在模拟过程的某时刻碰到有限元棍子,而在播放过程的相同时刻还未碰到,则会出现棍子在粒子未碰到时便提前变速的现象。这对效果的影响是很大的。
由于maya内建动力学系统的求值过程先于有限元模拟过程(见上述步骤),所以若要保持结果相同,在第i帧,动力学系统在模拟时和在播放结果时必须获得相同的输入。所以模拟结果必须写入下一帧。
但是,rig系统的特性会导致一个问题,这个特性是:rig网格的顶点位置是由1. 模拟参数p2. 外部参数p0 (例如用户设置的关键帧)共同决定的。
在此条件下,第i帧的模拟结果(q、v、a、p等)是针对这一帧的外在参数p0的。而在i+1帧,这些外在参数已经发生变化。于是,上图中线框显示的有限元网格(记录了第i帧的模拟结果)与maya根据第i帧参数p[i]与第i+1帧的外在参数p0[i+1]算出来的网格,便会存在明显的差异。
这样的一个直接后果是,由于第i帧的外力(例如,场的力)依赖于模拟结果的顶点位置,所以外力的大小会有误差。
一个解决办法是,在模拟之前,更新上一帧传过来模拟结果。具体是用模拟出的参数值,算出此时的新位置、新速度、新加速度,并修改RigStatus状态变量的模拟结果。
来自为知笔记(Wiz)
相关文章推荐
- 发现一个很牛B的问题
- 发现一个奇怪的问题,关于文件名
- 近日发现vs2005安装的一个问题
- 请注意,刚发现一个问题。访问者来看看
- 今天看StarterKit.Communities中的关于获取路径部分,发现一个问题?难道老外也会不仔细看MSDN,还是?
- 发现一个问题,有个类没法实例化~(IDE问题,已经OK)
- 关于asp.net 1.0升级到asp.net 2.0时发现的一个有趣的问题
- 发现一个vs2005中的webBrowser控件的问题。
- 发现好的网站,解决了一个技术问题
- DXUT库,CDXUTDialogResourceManager的一个不太好发现的问题
- 发现引起PB应用程序出错的一个小问题(PB8.0.3)
- HQL 发现一个小问题: 用foreign连的话 在 where里面既然id需要“Id”,而其他的 如username 只要“userName”!
- 昨天发现ASP中的一个问题,终于找到问题所在了
- 今天和朋友发现一个flash读取xml的权限问题
- [疑问]作了一个用Js遍历树节点的函数,后来发现一个问题!
- 今天发现了一个sql的小问题
- 发现一个gdm的奇怪问题
- 又发现一个AspNetPager的问题
- [学习笔记][ASP.NET]发现CuteEditor的一个小问题
- 偶然发现的一个有点奇怪的SQL语句问题