【问题标题】: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 时会变大两倍。 (这很浪费)
- 将多个精灵打包到一张图像中。与其用透明度填充,不如用其他图像填充?尽可能高效地打包这些图像!然后只渲染图像的片段,这是完全有效的。
显然第二种选择要好得多,浪费的空间更少。因此,如果您必须将多个精灵打包到一个图像中,为什么不将它们全部打包成一个精灵表的形式呢?
总而言之,加载到显卡中的图像文件必须是二次方和平方。但是,程序可以选择将该纹理的任意矩形渲染到屏幕上;它不必是二次方或平方。因此,将纹理与多个图像打包在一起,以最有效地利用纹理空间。