代码之家  ›  专栏  ›  技术社区  ›  Khalid Abuhakmeh

为游戏推荐雪碧大小(XNA)?[关闭]

  •  2
  • Khalid Abuhakmeh  · 技术社区  · 15 年前

    2D Sprite工作表中单个瓷砖的最佳尺寸是多少?

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

    例如64px x 64px、512px x 512px等。

    我想买高清品质的雪碧。想想外星人,原始人,城堡破坏者,或者古人类的世界。有些例子也不错,所以如果你有sprite表的例子,请上传。

    3 回复  |  直到 13 年前
        1
  •  6
  •   Reed Copsey    15 年前

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

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

    但是,如果要对精灵进行大量转换,尤其是旋转或缩放,可能需要比它们渲染的分辨率稍大一点,因为重新采样的质量可能稍好一些。您需要考虑在任何时候组合和显示多少精灵,以及运行的硬件(Xbox、PC和两者?),以确定平衡性能和纹理质量的最佳选项。

    不过,如果你对雪碧的数量不是太疯狂,你可能会选择更高的质量,并允许系统根据需要缩小尺寸,获得良好的效果。

        2
  •  4
  •   Venesectrix    15 年前

    这也许不能直接回答你的问题,但我想把我在使用Sprite床单时学到的东西都扔进去。Sprite工作表非常好,因为GPU在绘制到屏幕时切换的纹理越少,性能越好。

    我建议你看看 XNA sprite sheet example ,如果你还没有。它提供了一些好处:

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

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

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

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

    里德说的对,实际上没有任何标准的雪碧大小你应该使用。这主要取决于你在做什么类型的游戏,你在做什么类型的缩放和旋转,等等。但是,当使用sprite表时,有一些特定的尺寸你需要注意。sprite表只是一个巨大的纹理,但是GPU在内存中的纹理大小是有限制的。Xbox360最多支持4096x4096(我认为)纹理。如果您正在为Windows编程,那么它取决于用户的图形卡。从我所看到的来看,最好还是在Windows上使用2048x2048,因为大多数图形卡至少可以支持这么多。

    Sprite工作表示例上的最后一个注释。我不相信它会观察到一个最大的sprite表大小,所以如果你真的使用它,你可能想添加几行捕捉时,生成纹理的大小大于你想要支持。

        3
  •  4
  •   Andrew Russell    13 年前

    ShawnHargreaves最近发表了一系列关于纹理重采样和混叠的博客文章。请参阅文章列表的顶部 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%,这是完全可以接受的。