推荐游戏的精灵大小(XNA)?

时间:2009-04-07 18:04:12

标签: c# xna

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

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

离。 64px X 64px,512px X 512px等。

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

3 个答案:

答案 0 :(得分:6)

这取决于精灵的渲染方式,以及渲染时它们将如何处理。

如果您要避免缩放精灵,尽可能使它们与最终渲染分辨率相同,这将有助于提高质量。我肯定会坚持两种纹理尺寸的强大功能,因为它看起来确实有用。

但是,如果您要对精灵进行大量变换,尤其是旋转或缩放,您可能需要稍微大于它们渲染的分辨率,因为重新采样可能会稍微提高质量。你会想要考虑在任何时候合成和显示多少精灵,以及你将运行什么硬件(xbox,pc,两者?),以确定平衡性能和纹理质量的最佳选择。

但是,如果你对精灵的数量不是太疯狂,你可能会提高质量,并允许系统根据需要缩小它们的尺寸,并获得良好的效果。

答案 1 :(得分:4)

这可能不能直接回答你的问题,但我想提一下我在使用精灵表时学到的东西。精灵表非常棒,因为GPU在绘制到屏幕时必须切换的纹理越少,性能就越好。

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

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

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

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

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

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

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

答案 2 :(得分:4)

Shawn Hargreaves最近做了一系列有关纹理重新采样和锯齿的博客文章。请参阅April的帖子列表顶部和May的帖子。这里的关键词是“奈奎斯特频率”(wikipedia)。

特别要看this post on texture aliasing。这有很好的图表:

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%或更小)。如果确实需要渲染较小,请使用 mipmap 。如果你正在轮换,那么向下缩放的余地就会减少。避免向上扩展。

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

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