ATF (Adobe Texture Format)
By zmLiu In 技术各个平台的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)
-
C:\png2atf.exe -c -i leaf.png -o leaf.atf
-
[In 213KB][Out 213KB][Ratio 99.9703%][LZMA:0KB JPEG-XR:213KB]
-
//package specific range of mipmaps
-
C:\png2atf.exe -c -n 0,5 -i leaf.png -o leaf0,5.atf
-
[In 213KB][Out 213KB][Ratio 99.8825%][LZMA:0KB JPEG-XR:213KB]
-
//package only DXT format
-
C:\png2atf.exe -c d -i leaf.png -o leaf_dxt5.atf
-
[In 85KB][Out 85KB][Ratio 100.045%][LZMA:0KB JPEG-XR:85KB]
-
//package only ETC1 format
-
C:\png2atf.exe -c e -i leaf.png -o leaf_etc1.atf
-
[In 85KB][Out 85KB][Ratio 100.045%][LZMA:0KB JPEG-XR:85KB]
-
//package only PVRTC format
-
C:\png2atf.exe -c p -i leaf.png -o leaf_pvrtc.atf
-
[In 42KB][Out 42KB][Ratio 100.089%][LZMA:0KB JPEG-XR:42KB]
如果你想在你的ATF存储未压缩的纹理,只要不使用-c参数
//package as uncompressed (RGBA) format
-
C:\png2atf.exe -i leaf.png -o leaf_rgba.atf
-
[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
-
png2atf -m -n 1,2 -c -i cubecat0.png -o cubecat_c_med.atf
-
png2atf -m -n 3,20 -c -i cubecat0.png -o cubecat_c_low.atf
在Stage3D
中使用压缩纹理
你需要使用Texture.uploadCompressedTextureFromByteArray 这个方法来上传压缩纹理,这个API可以设定该压缩纹理是否使用透明通:
class Example
-
{
-
[Embed( source = "mytexture.atf", mimeType="application/octet-stream")]
-
public static const TextureAsset:Class;
-
public var context3D:Context3D;
-
public function init():void
-
{
-
var texture:Texture = context3D.createTexture(256, 256,
-
Context3DTextureFormat.COMPRESSED_ALPHA, false);
-
var textureAsset:ByteArray = new TextureAsset() as ByteArray;
-
texture.uploadCompressedTextureFromByteArray(textureAsset, 0);
-
}
-
};
立方体纹理你可以这样写:
var texCubemap:CubeTexture = context3D.createCubeTexture(256, Context3DTextureFormat.COMPRESSED_ALPHA, false);
-
var textureAsset:ByteArray = new TextureAsset() as ByteArray;
-
texCubemap.uploadCompressedTextureFromByteArray(textureAsset, 0);
另外,根据是否使用透明通道,必须在的片段着色器里使用下面的设置:
- 普通的纹理 Context3DTextureFormat.BGRA
- “DXT1”(没有透明通道的压缩纹理)Context3DTextureFormat.COMPRESSED
- “DXT5”(拥有透明通道的压缩纹理)Context3DTextureFormat.COMPRESSED_ALPHA
在Starling
中的用法
[Embed(source="starling.atf", mimeType="application/octet-stream")]
-
public static const CompressedData:Class;
-
-
var data:ByteArray = new CompressedData();
-
var texture:Texture = Texture.fromAtfData(data);
-
var image:Image = new Image(texture);
-
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
No Comment