首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一般动画问题

问一般动画问题
EN

Stack Overflow用户
提问于 2010-11-05 18:13:38
回答 1查看 455关注 0票数 1

我对在图形环境中制作动画的想法还很陌生,所以我想澄清一下正确的方法是什么。

(只是设置场景,尽管它与问题不是特别相关:我在iphone上使用opengl es )

如果我去找一位艺术家,让他们为我创建一个行走的矮人的3d模型动画,这将不是动态的,他们怎么给我数据呢?他们会: a)创建一个3d骨骼模型,在路径列表中设置骨骼路径的动画,以及时间戳和插值类型,然后简单地定义每个骨骼的3d模型?也就是说,一个行走的侏儒将是一个脊椎,手,手臂,腿,脚,脖子,头,然后建模者为每一块骨骼创建部分,并给我动画路径...?

或者b)建模者创建一个完整的模型,然后对其进行变形,并以某种方式保存变形

!c)我假设没有人会真正存储同一对象的30个模型,然后只呈现这些模型,除非它是一个非常低的多边形数模型?还是我错了?3d动画的最佳对象格式是什么?

任何其他关于技术、机制等方面的建议/技巧都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-08 07:45:17

你的想法基本上是正确的。有两种主要的方法,骨架和非骨架,这两种方法都倾向于提供关键帧。

对于非骨骼动画,您可能会看到行走时要绘制的10帧动画,以及从一帧到下一帧所需的时间量。所以这是2d像素精灵工作方式的精确的3d模拟。您可以确定哪个帧当前可见,也可以应用补间。如果知道顶点位于V1的帧和顶点位于V2的帧之间,则可以将其定位在V1和V2之间。所以你在帧之间线性插值所有的顶点位置。这看起来比仅仅在帧中滑动看起来更平滑一些,但确实倾向于扭曲几何体,所以你仍然需要帧相当密集。

使用骨骼动画时,运动由骨骼描述,骨骼是一系列连接的骨骼。每个关键帧都是骨骼的特定方向。通常这是一个分层的东西,所以要描述手臂,可以从上臂相对于肩膀的方向开始,然后是小臂相对于上臂的方向,手相对于下臂的方向,每个手指相对于手的方向,等等。这样做的好处是可以执行非常好的补间,而不会扭曲。中间帧是旋转的一半,沿着骨骼树传播。如果你坚持用四元数来描述方向,那么用“旋转的一半”进行插值相对容易,效果也很好。

为了在骨骼上放置实际的几何体,每个顶点都与一个或多个骨骼相关联。将其加权附加到每个骨骼,例如,下臂上的顶点可能100%附加到下臂骨骼,肘部的顶点可能80%附加到下臂骨骼,20%附加到上臂骨骼。可以使用每个相关骨骼将顶点变换到的位置的加权总和来获得实际的顶点位置。这样你就可以得到相当好的关节(尽管,通常使用比我的简化解释更复杂的骨架)。

用iPhone的术语来说,在ES1.x下,你很可能不得不在CPU上进行非骨架补间,这并不像你想象的那样是一个性能问题,因为PowerVR的MBX实际上并不会在视频内存中保留顶点缓冲区对象。只要您以PowerVR友好的格式累积缓冲区(对齐很重要,以规定的顺序交错位置/纹理坐标/法线等也是有益的),那么提交到OpenGL不会比使用顶点缓冲区对象更昂贵。

苹果支持骨架式动画的GL_OES_matrix_palette扩展。对于每组顶点,您可以提供几个模型视图矩阵,并且对于每个顶点,您可以设置每个输入矩阵的权重。对矩阵的数量有一些实现限制,这可能会阻止您将整个模型作为一个单独的集合,但您可以根据需要细分。这样做的好处是,您可以将所有顶点数据放入顶点缓冲区对象中,并将驱动程序和GPU留给它。

在支持ES 2.x的设备上,可以使用顶点着色器更好地进行非骨骼补间。这将允许您使用顶点缓冲区对象并计算出GPU上的位置。由于ES 2.x硬件支持推送顶点缓冲区对象以实现完整的GPU管理,这是一个巨大的胜利。

使用ES 1.x管道通过GL_OES_matrix_palette进行骨架补间可能与使用可编程管道一样有效,因为您已经能够使用顶点缓冲区对象。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4104977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档