Tools
分类目录
文章归档
标签
   

ATF (Adobe Texture Format)

各个平台的GPU处理格式

平台 格式
ImgTech (IOS) PVRTC
Qualcom (Android) ETC1
Mali (Android) ETC1
NVidia (Android) ETC1/DXT1/DXT5
Android (PowerVR) PVRT/ETC1
Windows DXT1/DXT5
MacOS DXT1/DXT5

如何使用工具

把工具和原格式图片文件放置在同一文件夹下,例子中使用C盘根目录,DOS使用工具指令如下:

//package leaf.png with all 3 formats (DXT5, PVRTC and ETC1x2)
  1. C:\png2atf.exe -c -i leaf.png -o leaf.atf
  2. [In 213KB][Out 213KB][Ratio 99.9703%][LZMA:0KB JPEG-XR:213KB]
  3. //package specific range of mipmaps
  4. C:\png2atf.exe -c -n 0,5 -i leaf.png -o leaf0,5.atf
  5. [In 213KB][Out 213KB][Ratio 99.8825%][LZMA:0KB JPEG-XR:213KB]
  6. //package only DXT format
  7. C:\png2atf.exe -c d -i leaf.png -o leaf_dxt5.atf
  8. [In 85KB][Out 85KB][Ratio 100.045%][LZMA:0KB JPEG-XR:85KB]
  9. //package only ETC1 format
  10. C:\png2atf.exe -c e -i leaf.png -o leaf_etc1.atf
  11. [In 85KB][Out 85KB][Ratio 100.045%][LZMA:0KB JPEG-XR:85KB]
  12. //package only PVRTC format
  13. C:\png2atf.exe -c p -i leaf.png -o leaf_pvrtc.atf
  14. [In 42KB][Out 42KB][Ratio 100.089%][LZMA:0KB JPEG-XR:42KB]

如果你想在你的ATF存储未压缩的纹理,只要不使用-c参数

//package as uncompressed (RGBA) format
  1. C:\png2atf.exe  -i  leaf.png  -o  leaf_rgba.atf
  2. [In 341KB][Out 43KB][Ratio 12.8596%][LZMA:0KB JPEG-XR:43KB]

还有一个很酷的功能是,流式纹理的ATF也可以使用,你可以这样做以生成3个文件:

png2atf -m -n 0,0 -c -i cubecat0.png -o cubecat_c_high.atf
  1. png2atf -m -n 1,2 -c -i cubecat0.png -o cubecat_c_med.atf
  2. png2atf -m -n 3,20 -c -i cubecat0.png -o cubecat_c_low.atf

Stage3D中使用压缩纹理

你需要使用Texture.uploadCompressedTextureFromByteArray 这个方法来上传压缩纹理,这个API可以设定该压缩纹理是否使用透明通:

class Example
  1. {
  2.  [Embed( source = "mytexture.atf", mimeType="application/octet-stream")]
  3.  public static const TextureAsset:Class;
  4.  public var context3D:Context3D;
  5.  public function init():void
  6.  {
  7.   var texture:Texture = context3D.createTexture(256, 256,
  8.      Context3DTextureFormat.COMPRESSED_ALPHA, false);
  9.   var textureAsset:ByteArray = new TextureAsset() as ByteArray;
  10.   texture.uploadCompressedTextureFromByteArray(textureAsset, 0);
  11.  }
  12. };

立方体纹理你可以这样写:

var texCubemap:CubeTexture = context3D.createCubeTexture(256, Context3DTextureFormat.COMPRESSED_ALPHA, false);
  1. var textureAsset:ByteArray = new TextureAsset() as ByteArray;
  2. texCubemap.uploadCompressedTextureFromByteArray(textureAsset, 0);

另外,根据是否使用透明通道,必须在的片段着色器里使用下面的设置:

  •  普通的纹理 Context3DTextureFormat.BGRA
  • “DXT1”(没有透明通道的压缩纹理)Context3DTextureFormat.COMPRESSED
  • “DXT5”(拥有透明通道的压缩纹理)Context3DTextureFormat.COMPRESSED_ALPHA

Starling中的用法

[Embed(source="starling.atf", mimeType="application/octet-stream")]
  1. public static const CompressedData:Class;
  2.  
  3. var data:ByteArray = new CompressedData();
  4. var texture:Texture = Texture.fromAtfData(data);
  5. var image:Image = new Image(texture);
  6. addChild(image);

使用要求

  • 如果您使用是`starling`,你至少需要`1.2`版本。在`[Github](https://github.com/PrimaryFeather/Starling-Framework)`上获取,或者官方下载最新版本。
  • 如果你是自己封装`Stage3D`,那么你需要使用最新的`AGALMiniAssembler`
  • 你至少需要`AIR SDK 3.4` ,或者下载`Flash Builder 4.7AIR 3.4 SDK`。
  • 需要Flash播放器`11.4/AIR 3.4`
  • 您需要添加编译器参数`“-swf-version=17”`

命令说明:

  • -i:指定需要转换的文件名
  • -o:指定输出的文件名
  • -c:是否压缩。如果不压缩不要填写该参数即可
  • -q <0-180>:压缩质量越低质量越高
  • -r:是否使用JPEG-XR+LZMA压缩以减少文件大小
  • -n <start,end>:生成mip的等级

例子 png2atf -c -r -q 0 -n 0,1 -i ui.png -o ui.atf

Tags >

No Comment

Post A Comment