【问题标题】:General Animation question一般动画问题
【发布时间】:2010-11-09 00:13:53
【问题描述】:

我不熟悉在图形环境中制作动画的想法,所以我想澄清一下正确的方法是什么。

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

如果我去找一位艺术家并告诉他们为我制作一个不会动态的行走侏儒的 3D 模型动画,他们将如何给我数据? 他们会吗: a) 创建一个 3d 骨骼模型,将路径列表中的骨骼路径与时间戳和插值类型一起设置动画,然后简单地定义每个骨骼的 3d 模型?即一个行走的侏儒会是一个脊椎、手、手臂、腿、脚、脖子、头,然后建模者为每个骨骼创建零件并给我动画路径......?

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

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

任何其他关于技术、机制等的建议/提示将不胜感激!

【问题讨论】:

    标签: iphone animation opengl-es 3d


    【解决方案1】:

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

    对于非骨骼动画,可能会为您提供,例如,在行走时绘制十帧动画,以及从一帧到下一帧所需的时间。所以它是 2d 像素精灵过去工作方式的精确 3d 模拟。您可以确定当前可见的帧或应用补间。如果您知道您处于顶点位于 V1 的帧和同一顶点位于 V2 的帧之间的中间位置,则可以将其定位在 V1 和 V2 的中间位置。所以你在帧之间线性插值所有顶点位置。这看起来比仅仅浏览帧要平滑一些,但确实会稍微扭曲几何图形,因此您仍然需要帧相当密集。

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

    要在骨骼上放置实际几何图形,每个顶点都与多个骨骼之一相关联。你给它一个加权附件到每个骨头,例如下臂上的顶点可能 100% 连接到下臂骨骼,朝向肘部的顶点可能 80% 连接到下臂骨骼,20% 连接到上臂骨骼。您可以使用每个相关骨骼将顶点转换到的位置的加权和来获得实际的顶点位置。这样你就可以获得很好的关节(尽管通常使用比我的简化解释更复杂的骨架)。

    在 iPhone 方面,在 ES 1.x 下,您很可能必须在 CPU 上进行非骨架补间,这并不像您想象的那样严重,因为 PowerVR MBX 没有无论如何,实际上将顶点缓冲区对象保留在视频 RAM 中。只要您以 PowerVR 友好的格式累积缓冲区(对齐很重要,主要是按规定顺序交错位置/纹理坐标/法线/等也是有益的),那么提交给 OpenGL 的成本不会高很多而不是使用顶点缓冲区对象。

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

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

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

    【讨论】:

    • 就矩阵调色板扩展而言:我如何定义哪些顶点集应用了特定的模型视图矩阵?我必须为每个顶点指定矩阵调色板吗?
    • 当您写“...对于每个矩阵,您可以设置每个输入矩阵的权重...”时,您的意思是“...对于您可以设置的每个顶点...”吗?
    • 哦,是的,我确实是这个意思。您可以使用 glMatrixMode 指定一个矩阵调色板来切换到调色板模式,然后使用 glCurrentPaletteMatrixOES 来切换到调色板中的特定条目。然后,您可以执行正常的矩阵操作以从调色板调整该矩阵或使用 glLoadPaletteFromModelViewMatrixOES。 glWeightPointerOES 和 glMatrixIndexPointerOES 允许您提供数组来定义每个顶点的权重和源矩阵。我只需要一台 iPad,但我可以告诉你,调色板中的矩阵限制为 11 个。
    • 扩展的完整规范是完整的扩展规范是khronos.org/registry/gles/extensions/OES/OES_matrix_palette.txt顺便说一句。
    猜你喜欢
    • 2018-05-06
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2012-06-16
    • 2012-01-06
    相关资源
    最近更新 更多