2

我知道目前还没有完全得到官方支持,但我正在尝试使用开源项目ATF-Encoder生成 ATF 纹理。然后,我尝试将其上传到 Stage3D 纹理uploadCompressedTextureFromByteArray,它本身自 FP11 以来就受支持。

这在纹理正确上传和显示的意义上是有效的。我还可以验证生成的纹理上是否存在压缩伪影,特别是如果我在编码期间增加量化因子,并且生成的 ByteArray 比“原始”纹理小得多(大约小 20 倍)。

但是,使用 Process Explorer 测量 GPU 使用率时,我仍然在每个纹理消耗完全相同数量的 VRAM(即每个像素 5.333 字节),而不是预期的小得多的值。

纹理是使用 BGRA 模式而不是压缩模式创建的 - 如果我尝试压缩,它会在尝试上传时给我“不兼容的格式”。据我所知,ATF 格式支持“压缩模式”纹理,但 ATF 编码器不输出带有该标志集的纹理?(我尝试在压缩完成后强制打开标志,不出所料,这只会使 Flash 崩溃)

有没有人有关于这个问题的更多信息?编码正确的 ATF 并使用 Compressed 标志上传可以解决问题吗?或者这是一个实现错误,它接受压缩的有效负载,但在上传时解压缩?这里的任何信息都是有价值的,真的。

这是在硬件模式下,在 AMD Radeon 6450、Windows 7 64 位、Flash Player 11.3 上(同样的事情发生在 11.4 beta 中)。

4

2 回答 2

4

为了澄清 renaun 的意思,ATF 中有多种类型的压缩在起作用:

块压缩(PVRTC、DXT5 和 ETC1)是反映 GPU 内存节省的压缩类型。如果您不使用块压缩,您的纹理将作为 RGBA 上传,并使用与 PNG 一样多的 GPU 内存。

除此之外,JPEG XR 也可以应用于 ATF 文件,无论您是否使用块压缩。这将减少 ATF 的文件大小,但不会减少所需的 GPU 内存量。请注意,量化级别 0 是无损的,因此不会引入更多伪影,但使用 Adob​​e 的 png2atf 实用程序,您可以设置量化因子(压缩级别)。

底线:由于您引用的开源 ATF 编码器不支持块级压缩(引用缺乏开源压缩代码),因此它无法创建导致 GPU 内存使用量减少的纹理。

此外,ATF 是一种容器格式。这意味着它可以保存图像的一种或多种编码(块压缩类型)。您可以创建包含 PVRTC、ETC1 和/或 DXT5 的任意组合的 ATF 文件,具体取决于您希望 ATF 在哪些平台上工作。例如,您可以让构建过程仅在打包 .ipa 文件时为 iOS 打包 .atf 文件,而仅在打包 .apk 文件时为 Android 打包。

IMO,最佳点是块压缩 + 无损 JPEG XR 压缩。这代表 GPU 内存节省 + 小文件大小。命令行(同样,使用 Adob​​e 的 png2atf)是:

PVRTC (iOS):

png2atf -cp -r -i image.png -o image.atf
ETC1(安卓):
png2atf -ce -r -i image.png -o image.atf
DXT5(桌面):
png2atf -cd -r -i image.png -o image.atf
一个 .atf 文件中的所有 3 种格式:
png2atf -c -r -i image.png -o image.atf

另请注意,块压缩可能会导致一些非常难看的伪影。如果您需要节省 GPU 内存,我只会使用它。

更新- 关于 Dave Walker 的评论 - 是的,PVRTexTool在创造高质量结果方面做得更好。它有一个 GUI 和一个命令行,您可以使用 GUI 自己探索所有选项,但我最喜欢的命令行选项(用于具有卡通精灵的半透明 PNG 的最高质量)是:

PVRTexToolCL -i image.png -o image.pvr -m -l -f PVRTC1_4 -q pvrtcbest -mfilter cubic

于 2013-01-25T15:57:28.780 回答
2

ATF 只是一种文件容器格式,可帮助将不同格式打包到一个文件中。您不需要将多种文件类型放入 ATF 文件中,但您可以。桌面和移动设备有各种压缩纹理,包括 dxt1/5、pvrtc 等。ATF 还支持包含 RGBA 数据,因此您会看到相同的纹理内存大小。如果您有压缩纹理,它可能会有所不同。

Adobe 将在某个时候推出一些 ATF 工具。请参阅 Thibault 在此论坛中的评论 - http://forum.starling-framework.org/topic/atf-adobe-texture-format/page/2

我没有使用 ATF-Encoder 源代码来了解它的压缩是否适用于 dxt。

于 2012-08-27T21:22:36.683 回答