Away 教程 http://away3d.com/tutorials/Introduction_to_ATF_Textures
starling 教程 http://wiki.starling-framework.org/manual/atf_textures#other_resources
abobe 官方教程 http://www.adobe.com/cn/devnet/flashruntimes/articles/introducing-compressed-textures.html
http://www.adobe.com/cn/devnet/flashruntimes/articles/atf-users-guide.html
1、用texturepacker打包图片 --pack-mode Best --no-trim --size-constraints AnySize --png-opt-level 0 --algorithm MaxRects --reduce-border-artifacts
默认会设置shape pading 为2,这样打包出来会比cs6的spritesheet打包图片大一点
--reduce-border-artifacts 实际没有看到效果,不知道是作用在图片还是作用在生成的xml,官方说明为:
Adds color to transparent pixels by repeating a sprite's outer color values.
These color values can reduce artifacts around sprites and removes dark halos at transparent borders. This feature is also known as "Alpha bleeding".
--size-constraints AnySize 转成atf时,是要求长款是2的幂,如果是块数据(DXT1、 ETC1 和 PVRTC 4bpp)则长宽相等并且都是2的幂,所以也是不是一定必要
2、关于atf与png
此片文章有比较详细说明:http://jacksondunstan.com/articles/2010
基本是说png用的cpu内存,在传给gpu,atf是直接可以给gpu用的bytearray
3、png2atf 工具各参数
主要说一下官方没有说明确的参数
-e 这个参数是生成minimap时,用空图片替代(项目里看到的,实践出是这个效果,所以大小会小一点)
-r 为使用JPEG-XP方式压缩,只对块格式有效,对RGBA格式没有效果
http://jacksondunstan.com/articles/2040 比较了ZLib和LZMA的压缩效率,abode默认提供zlib和jpeg-xp压缩,好像jpeg-xp使用lzma压缩
当然压缩了解压费时可能会大也是一个考虑因素
http://jacksondunstan.com/articles/2013 讲到不同的图片内容,各格式出来的大小不同,atf可能比png更大,在没有压缩的情况下
-4 |
命令 JPEG XR 编码器在内部使用 4:4:4 色彩空间。 这是基于块的压缩的默认设置。 在某些情况下,最好对 RGB/RGBA 纹理使用这个色彩空间,例如,在您发现红色或蓝色图形或者法线贴图周围存在渗色伪像的情况下。 |
-2 |
命令 JPEG XR 编码器在内部使用 4:2:2 色彩空间。 Adobe 建议您不要对基于块的压缩使用此色彩空间,因为它可能会造成严重伪像。 |
-0 |
命令 JPEG XR 编码器在内部使用 4:2:0 色彩空间。 通常情况下,Adobe 建议您不要对基于块的压缩使用此色彩空间,因为它可能会造成严重伪像。 不过,如果图像数据为单色,可以考虑采用这个选项。 |
块 不压缩 不影响大小
块 压缩 影响大小
RGBA 压缩/不压缩 影响大小,而且同一参数效果一样
4、各格式图片运行效率
自己没有具体去测试,http://forum.starling-framework.org/topic/atf-observations-ymmv 测试表明,atf运行时间和使用内容远强过png,同等quality下 PVRTC 图片效果会好于dxt和etc1,之后就在讨论怎么在保证时间和使用内存的前提下,有更好的显示效果
如果atf用uncompressed RGB888 格式,0.3s的时间和用ImageDecodingPolicy.ON_LOAD下载png的0.37s相差不大,但是不会有图像的损失。
最后总结了显示效果的影响因素:
Factors
at play:
- Position of sprite in sprite sheet when the block encoding happens.
- Alpha bleed affected by nearby sprites
- Art style
- Translucency vs on/off transparency.
项目里战斗外2D,如果图片用pngalpha查看为alpha,则用uncompressed RGB888,如果是 opaque,则用dxt 加压缩
吐槽下天朝的网,下个atftools,到处找不到,还是翻墙下的。。。哎