我要读取一段动画数据,目前采用的方式是将动画以每一帧的形式读进来存成mesh结构, 播放的时候利用GGUI依次显示每一帧mesh, 这样存在的问题是播放动画的速度比较慢,有没有好的解决方法?
如果你的目的只是读取和播放动画的话,这个有很多其它的 Python 库可以选择,不一定用 Taichi。如果你一定要用 Taichi 的 GGUI 播放,你可以直接把读进来的帧用 numpy 数组的形式传给一个 field 然后在 GGUI 里显示。用 mesh 这种结构没有必要。
我再描述下我的问题
定义100帧mesh的point filed 数据,以及共享同一个拓扑indices.
pf_0= ti.Vevtor.field(3,ti.float, shape=N)
…
pf_99= ti.Vevtor.field(3,ti.float, shape=N)
animation=[pf_0,…,pf_99]
indices= ti.field(int, shape=3*N)
最后ggui 可视化animation.
frame = 0
while window.run():
fame +=1
scene.mesh(points= animation[frame], indices= indices, …)
window.show()
这样对于只有400个点的animation,动画播放的帧率大概只有6fps。 想问下怎样可以播放的更快点。
关于这个问题的原因是目前ggui在每一帧更新时,field会被加载进vulkan pipeline
为了避免每一帧加载数据,我目前想到有两种方案可以尝试
- 可以考虑在第一帧把100帧的动画数据都用scene.mesh加载进来(放到无穷远,或者不可见),然后每帧move一个动画的mesh到相机视角中。
- 可以考虑把100帧的动画mesh数据组成一个大的mesh,然后使用新支持的功能,每次绘制这个大buffer的一部分(需要你计算一下每一帧的offset),文档请参考A New UI system: GGUI | Taichi Docs