java - Libgdx - 纹理过滤器的TexturePacker组合

标签 java android filter libgdx textures

抱歉,这是一个常见的话题,尚未找到广泛认可的解决方案。

我们的游戏世界“网格”尺寸为 1220 x 1080(基于我们设计师的 Photoshop 设计)。目前,我们在 Nexus 4 (1280x768 @320DPI) 和 TF201 Transformer Prime 平板电脑 (1280x800 @149DPI) 上进行测试。

当使用TexturePacker打包纹理时,我们对使用哪种过滤器组合有点困惑。我们已阅读以下页面:

http://www.badlogicgames.com/wordpress/?p=1403

.. 当使用“最近,最近”时,我们的 FPS 很好,为 60,但资源变得像素化。现在我们使用“Mipmap,Mipmap”进行打包,我们的 FPS 下降到 30,但纹理边缘再次平滑。

这些过滤器的组合是否存在商定的组合,或者它们只是取决于需求? Packer 中的“最小过滤器”和“放大过滤器”有相当多的组合可供设置,因此不要在没有完全理解它是什么的情况下,在一切顺利调整大小并且 FPS 再次变高之前一直随机设置它们正在做。

非常感谢。 J

最佳答案

如果您支持多种屏幕尺寸(如果您针对的是 Android),则 Mag 过滤器应始终为线性。不存在诸如 mip 映射的磁力滤镜之类的东西,并且在某些设备上甚至无法工作(您将得到纯黑色)。这是一种“陷阱”,因为某些设备只会假设您的意思是线性并为您修复它,因此如果您无法在不为您执行此操作的设备上进行测试,您将不会意识到该问题。当拉伸(stretch)得更大时,最近的看起来会像素化,并且只有当您正在制作复古的低分辨率图形或绘制像素完美的东西时才需要使用它。

您可以为“最小”过滤器选择以下选项之一,从最快(且外观最差)到最慢(且外观最佳):

  • 最近 - 这看起来会像素化,我想不出在任何情况下这都是最小过滤器的正确选择。
  • MipMapNearestNearest - 看起来或性能不会比最近的更好,并且使用更多的内存。没有理由使用这个。
  • MipMapNearestLinear - 从两个最近的 mip 中获取最近的像素,然后在它们之间进行线性插值。这看起来仍然是像素化的。我认为这也没有被使用过。
  • MipMapLinearNearest - 获取最近的 mip 级别并线性确定像素颜色。我认为,这最常用于移动设备上以获得平滑的图形。它的执行速度明显快于下面的选项,但在某些情况下它看起来会稍微模糊(当最近的 mip 相对于屏幕上的内容来说有点小时)。
  • MipMapLinearLinear - 获取两个最近的 mip 级别,线性确定每个级别上的像素颜色,然后在两者之间线性混合。如果您的 Sprite 从无缩小到全尺寸,您可能无法检测到从最小到最大的质量差异。但这也很慢。过去,我将其使用限制在我的字体上。三年前我还做过一个可以在新设备上以 60fps 运行的项目,我在所有东西上都使用了它。我非常小心该应用程序中的过度绘制,因此我可以逃脱惩罚。

最后,还有线性过滤,它看起来并且性能比 mip 映射选项(对于 Min 过滤器)更差:

  • 线性 - 如果屏幕上的图像比其原始纹理稍小,这将看起来平滑。这不会像 mip 映射那样使用 33% 的额外纹理内存,但如果纹理小于原始纹理的 50%,性能将比 mip 映射更差,因为对于每个屏幕像素,它都会有从原始纹理中采样并混合四个以上的像素。

关于java - Libgdx - 纹理过滤器的TexturePacker组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28943779/

相关文章:

java - 关于从 servlet 提供静态文件的问题

java - 如何从 WakefulBroadcastReceiver 启动 IntentService

java - 从 MDC 中清除 requestId 的位置

javascript - 有没有更有效的方法来过滤这个对象数组?

java - 如何访问我创建的文本文件?

java - JUnit 测试在 Ant 中失败,任务为 `<junit>`,但通过 `<exec>` 任务?

java - neo4j QueryResult不会退出

Android 虚拟设备管理器意外退出

java - ViewPager + Seekbar : when trying to slide seekbar, viewPager 改为更改 fragment

arrays - Swift 2.0 过滤自定义对象数组 - 无法使用列表类型的参数调用 'filter'