【问题标题】:What are the pros and cons of a sprite sheet compared to an image sequence?与图像序列相比,精灵表的优缺点是什么?
【发布时间】:2011-03-29 05:44:38
【问题描述】:

我来自 2D 动画背景,所以当我使用动画序列时,我更喜欢使用图像序列。对我来说,这很有意义,因为您可以轻松地从合成/编辑软件中导出图像序列并轻松定义方面。

我是游戏开发的新手,对精灵表的使用感到好奇。有什么优点和缺点。文件大小有问题吗? - 对我来说,一堆小图像似乎与一个大图像相同。此外,定义精灵的每个单独区域似乎很麻烦。

基本上,我不明白您为什么要使用精灵表 - 请赐教。

谢谢

【问题讨论】:

    标签: image animation sequence sprite-sheet


    【解决方案1】:

    精灵表的性能更好,因为您将所有数据都包含在单个纹理中。假设您有 1000 个精灵在精灵表中播放相同的动画。绘制过程大概是这样的。

    Set the sprite sheet texture.
    Adjust UV's to show single frame of animation.
    Draw sprite 0
    Adjust UV's
    Draw sprite 1
    .
    .
    .
    Adjust UV's
    Draw sprite 998
    Adjust UV's
    Draw sprite 999
    

    使用纹理序列可能会导致最坏的情况:

    Set the animation texture.
    Draw sprite 0
    Set the new animation texture.
    Draw sprite 1
    .
    .
    .
    Set the new animation texture.
    Draw sprite 998
    Set the new animation texture.
    Draw sprite 999
    

    啊!在绘制每个精灵之前,您必须将渲染状态设置为使用不同的纹理,这比调整几个 UV 慢得多

    【讨论】:

      【解决方案2】:
      • Sprite 表往往更小 文件(因为只有 1 个标头 全部。)
      • 精灵表加载速度更快 只有一个磁盘访问,而不是 几个
      • 您可以轻松查看或调整多个帧 一下子
      • 减少浪费的视频内存 将全部装入一个表面 (正如 Ricket 所说)
      • 可以通过偏移量来描绘各个精灵(例如,在隐式网格上 - 无需显式标记或记录每个精灵的位置)

      使用精灵表并没有很大的好处,但有几个小好处。但这种做法可以追溯到大多数人使用适当的 2D 图形软件制作游戏图形之前的一段时间,因此美术工作流程不一定是当时最重要的事情。

      【讨论】:

        【解决方案3】:

        许多(大多数?)图形卡需要二次方的图像尺寸。因此,例如 128x128、512x512 等。然而,许多/大多数精灵不是这样的尺寸。然后你有两个选择:

        • 将精灵图像四舍五入到最近的二次方平方。一个 16x32 的精灵在透明像素填充为 32x32 时会变大两倍。 (这很浪费)
        • 将多个精灵打包到一张图像中。与其用透明度填充,不如用其他图像填充?尽可能高效地打包这些图像!然后只渲染图像的片段,这是完全有效的。

        显然第二种选择要好得多,浪费的空间更少。因此,如果您必须将多个精灵打包到一个图像中,为什么不将它们全部打包成一个精灵表的形式呢?

        总而言之,加载到显卡中的图像文件必须是二次方和平方。但是,程序可以选择将该纹理的任意矩形渲染到屏幕上;它不必是二次方或平方。因此,将纹理与多个图像打包在一起,以最有效地利用纹理空间。

        【讨论】:

          猜你喜欢
          • 2010-10-31
          • 1970-01-01
          • 1970-01-01
          • 2011-07-24
          • 2016-02-27
          • 2019-09-07
          • 1970-01-01
          • 2015-01-02
          • 1970-01-01
          相关资源
          最近更新 更多