2

2D 精灵表中单个图块的最佳尺寸是多少?

我正在创建一个精灵表,并试图找出每个精灵使用的最佳分辨率。有我不应该超过或低于的标准尺寸吗?

前任。64 像素 X 64 像素、512 像素 X 512 像素等。

我正在尝试获得高清质量的精灵。想想 Alien Hominid、Castle Crashers 或 World of Goo。一些例子也很好,所以如果你有精灵表例子,请上传它们。

4

3 回答 3

6

这取决于精灵将如何被渲染,以及当你渲染它们时你将如何处理它们。

如果要避免缩放精灵,使它们尽可能与最终渲染的分辨率相同将有助于保持更高的质量。我肯定会坚持使用两种纹理大小的力量,因为它似乎确实有帮助。

但是,如果您要对精灵进行大量转换,尤其是旋转或缩放,您可能希望稍微大于它们将渲染的分辨率,因为重新采样的质量可能会稍好一些。您需要考虑随时合成和显示多少个精灵,以及您将在哪些硬件上运行(xbox、pc,两者?),以确定平衡性能与纹理质量的最佳选项。

但是,如果您对精灵的数量不太感兴趣,您可能会获得更高的质量,并允许系统根据需要缩小它们的大小,并获得良好的结果。

于 2009-04-07T18:20:49.600 回答
4

这可能不会直接回答您的问题,但我想介绍一下我在使用精灵表时学到的知识。精灵表很棒,因为 GPU 在绘制到屏幕时必须切换的纹理越少,性能就越好。

如果您还没有的话,我建议您看一下XNA sprite sheet example 。它提供了几个很大的好处:

  • 它会自动将您的精灵(在不同的文件中)打包成一个大纹理。我认为将我的艺术作品保存在单独的文件中并自动生成一个巨大的精灵表会比将我的所有艺术作品保存在一个文件中更好。

    例如,如果我决定让我的动画在中间有一个额外的帧怎么办?然后我必须在精灵表中移动一堆东西,为新框架腾出空间。如果我每帧使用一个文件,如果我想在中间添加一个新帧,只需对 XML 文件进行一行更改,列出精灵表中的内容。

    单独列出每个帧文件可能会很痛苦,所以我明白为什么这对某些人可能不起作用,但这对我的项目来说很棒。此外,我发现能够轻松地将纹理交换进出我的精灵表的好处是非常值得的,这将帮助您确定要使用的精灵大小。

  • 我们在缩放精灵时遇到了问题。我相信该链接很好地描述了这个问题。在任何情况下,这个 sprite sheet 示例都会在您添加到 sprite sheet 的每个 sprite 周围自动添加一个 1 像素的边框(使用最初位于边缘的像素的颜色),这将保护您不会看到您周围的奇怪颜色边框缩放时精灵,因为它仍然只使用原始大小绘制精灵。它只是使用额外的边框进行插值,而不是使用附近精灵的像素或空白。

Reed 是正确的,您确实不应该使用任何标准的精灵大小。这主要取决于您在做什么类型的游戏,您正在做什么类型的缩放和旋转等。但是,在使用精灵表时需要注意特定的大小。Sprite 表只是一个巨大的纹理,但是 GPU 可以在内存中容纳多大的纹理是有限制的。XBOX360 最多支持 4096x4096(我认为)纹理。如果您正在为 Windows 编程,那么这取决于用户的显卡。据我所见,在 Windows 上最好坚持使用 2048x2048,因为大多数显卡至少可以支持这么多。

关于精灵表示例的最后一点。我不相信它会监视最大精灵表大小,所以如果你确实使用它,你可能需要添加几行来捕捉生成纹理的大小大于你想要支持的大小。

于 2009-04-07T19:32:35.310 回答
4

Shawn Hargreaves 最近发表了一系列关于纹理重采样和混叠的博客文章。请参阅4 月的帖子列表顶部和5月的帖子。这里的关键词是“奈奎斯特频率”(维基百科)。

特别是看看这篇关于纹理混叠的帖子。它有像这样的漂亮图表:

http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-70-20-metablogapi/6518.image_5F00_1B896E07.png

非常非常简短的答案是:

避免渲染比源纹理小 2 倍以上(即:源大小的 50% 或更小)。如果您确实需要渲染更小,请使用mipmaps。而且,如果您正在旋转,则向下缩放的余量较小。避免向上缩放。

在 XNA 中使用二次幂大小的纹理没有任何优势。只需在您的目标分辨率下使用纹理,让 XNA 在后台处理它。

举个例子:如果你正在制作一个 1080p 分辨率的游戏,那么缩小到 720p 就是缩小到 66.66%,这是完全可以接受的。

于 2011-06-19T02:10:31.040 回答