考虑与Maya结合

今天改进了Hessian各块的计算代码,减少了一些内存操作。下一步准备把模拟平台与Maya结合,这样就可以利用Maya丰富的变形算法了。


这一步需要考虑以下问题:

1.把场景设置为某一帧。这一点可以用Mel脚本实现,命令是 currentTime  帧号

 2.把表面网格转成体网格。这一点比较难做,因为表面网格不一定封闭。

有两种思路:  根据一堆点生成体网格,同时原来的点作为体网格的部分顶点

                       原来的输入点“泡”在体网格中,但是可以直接通过这些点反求体网格的一部分顶点。

                       第一种思路似乎比较靠谱,因为第一种解出来的体网格顶点不一定稳定。

3.有限元模拟过程。

暂时的设想是,写一个mel脚本,每次设置一个关键帧,同时获取此时网格顶点(也就是体网格部分顶点)位置,求出自由参数后设置对应参数的关键帧。

        求解过程中需要多次设置自由参数的值,获取此时网格的顶点位置。可以写两个节点(Locator类型?),一个存自由参数数组,另一个接收网格顶点。

        模拟的过程中,设置第一个节点的值之后,尝试读取第二个节点的网格,以此驱动Maya自动求值。

        总的伪代码可能如下:


for (int frame = 0; frame < n; ++frame)
{
  currentTime frame;
  更新位置、速度、加速度
  求解当前的参数值,这个过程中需要反复设置参数节点,反复获取网格位置。这一步估计需要写成一个MEL命令。
  设置参数节点对应参数的关键帧
}



一个问题就是需要验证MEL命令执行的过程中Maya节点求值机制是否可以反复进行,这样才有可能反复对设置参数、对节点求值。

这一点我觉得是可以的,每次读取网格顶点,背后便是Maya对相关节点进行求值。



posted @ 2014-12-25 00:36  dydx  阅读(212)  评论(0编辑  收藏  举报