在Flash 11.3作品ATF纹理加载,但具有较高的内存使用情况(Loading of ATF t

2019-09-20 04:09发布

我知道,这是不完全的那一刻正式支持,但我试图使用生成开源项目的ATF纹理ATF-编码器 。 然后我试图把它上传到一个纹理的Stage3D与uploadCompressedTextureFromByteArray ,这本身,因为FP11支持。

这部作品在这个意义上,纹理正确上传和显示。 我还可以验证有对所得纹理压缩伪像,尤其是如果我在编码期间增加的量化因子,并且所得的ByteArray远小于一个“原始”纹理(约20倍以下)。

然而,测量GPU使用与进程资源管理器,我仍然消耗每纹理完全相同的量的VRAM(即每个像素5.333字节),而不是预期的小得多的值。

质地与BGRA模式创建的,而不是压缩模式 - 如果我尝试压缩,它试图上传时给我“格式不兼容”。 据我所知,在ATF格式支持“压缩方式”纹理,但ATF编码器不会输出纹理与标志设置? (我试过迫使标志后压缩完成,这在意料之中,只是崩溃的Flash)

有没有人有关于这个问题的更多信息? 将编码适当的ATF和上传与压缩标志解决了问题? 或者,这是一个实现的bug,在那里它接受压缩的有效载荷,但上传时解压? 这里的任何信息是有价值的,真的。

这是在硬件模式上的AMD Radeon 6450,Windows 7的64位时,Flash Player 11.3(同样的事情发生在11.4测试版)。

Answer 1:

只是为了澄清什么renaun是说,有多种类型在ATF的工作压缩:

块压缩(PVRTC,DXT5,和ETC1)是反映在GPU存储器节省的压缩类型。 如果你不使用块压缩,你的纹理将被上传的RGBA和使用一样多GPU内存为PNG。

除此之外,JPEG XR还可以应用到ATF文件,无论你使用的块压缩与否。 这将减少ATF文件的大小,而不是GPU内存所需要的量。 需要注意的是量化等级0是无损的,所以它不会推出进一步的文物,但Adobe的png2atf工具,你可以设置一个量化因子(压缩级别)。

底线:因为你引开源ATF-编码器不支持块级压缩(援引缺乏开源压缩代码),则不能创建导致更少的GPU存储器使用纹理。

另外,ATF是一个容器格式。 这意味着它可以容纳一个图像的一个或多个编码(类型块压缩的)。 你可以创建一个包含PVRTC,ETC1,和/或DXT5的任意组合,这取决于你想要的ATF的工作在其平台上的ATF文件。 例如,你可以包装.ipa文件,只有当有你的构建过程包.atf适用于iOS的文件,以及针对Android包装.apk文件,只有当。

IMO,甜蜜点是块压缩+无损JPEG XR压缩。 这代表GPU节省内存+小文件大小。 这样做的命令行(再次使用Adobe的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文件:
  png2atf -c -r -i image.png -o image.atf 

还要注意的是块压缩可能会导致一些非常难看的图像。 如果您需要的GPU节省内存我只用它。

更新 -在关于戴维·沃克的评论-是的, PVRTexTool确实在创造高品质的效果更好。 它有一个图形用户界面和一个命令行,你可以探索自己所有的选项在GUI中,但我最喜欢的命令行选项(半透明的PNG图像与卡通精灵的高品质)为:

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



Answer 2:

ATF只是一个文件容器格式,以帮助各种包装形式到一个文件中。 你并不需要把多个文件类型到的ATF文件,但你可以。 有各种不同的压缩纹理桌面和移动设备,包括DXT1 / 5,PVRTC,等ATF也支持包含RGBA数据,因此为什么你看到相同的纹理存储器大小。 如果你有一个压缩纹理,很可能会不同。

会有一些ATF的工具,这将在某一时刻都从Adobe。 请参阅本论坛蒂博的评论- http://forum.starling-framework.org/topic/atf-adobe-texture-format/page/2

我没有用ATF-编码器源代码,知道它的压缩工程DXT与否。



文章来源: Loading of ATF textures in Flash 11.3 works, but has high memory usage