ATF : Adobe Texture Format. 这是一种能提供最佳压缩效果的文件格式。 ATF文件主要是一个存储有损纹理数据(lossy texture data)的文件容器。它主要使用了两种类似技术:JPEG-XR1压缩技术和基于块的压缩技术(简称块压缩技术),来实现它的有损压缩。

为 GPU 优化贴图,支持压缩贴图格式 ATF (Adobe Texture Format),减少在使用中显存的总量。这点对于移动设备是特别重要的。

ATF格式全称 Adobe Texture Format
说白了,就是奥多比 专用贴图格式。 这里大家注意到没有 Texture 这个词是在GPU加速的字典里才出现的。
普通的图只能叫 BitmapData 而到了GPU里才能叫Texture。
证明这个ATF格式是和FLASH11 支持GPU硬件加速紧密相连的。
 
那么ATF能实现哪些功能,让GPU进行加速?
ATF支持2种格式,其中支持一种DXT1的格式。
问谷哥,这种格式由显卡公司S3开发,能够大幅节省显存。而目前流行的格式有 DXT1,DXT3,DXT5等。
而现在ATF只支持DXT1。
这里得给大家做个科普,一张图片在内存里的大小,
是根据公式 SIZE = WIDTH * HEIGHT * BPP(比特每像素一个像素所能表达的不同颜色数取决于比特每像素(BPP),若bpp=4,则为2^4色) 决定的。
加入一张1024 X 1024的真彩色图片,那么在内存里就 占用了 4MB 空间 。
假如使用 DXT1格式,那么将大幅度减少占用量减少到原来的30%。大幅节省空间。
由于解压缩算法是GPU硬件完成,所以能够同时获得空间压缩以及GPU加速的效果。
这也就是为什么这种格式如此流行的原因了。
 
此外还有朋友问,JPEG和PNG也是压缩格式也能获得压缩他们和ATF有什么区别呢
JPEG和PNG在外部的确是压缩保存的,当他们被加载,FLASH会做2件事情
1 从外部读取2进制文件
2 DECODE,从压缩的2进制还原到BITMAPDATA
大家注意到没有,这里就存在巨大的性能损失了,因为DECODE是由CPU完成的,在游戏运行时
做这件事情比较频繁的话,就很容易引起卡顿。
而这是众多大型MMO游戏卡的根本原因。
 
而用了ATF格式,由于解压缩算法由GPU完成,所以FLASH只要做一件事情,就是加载上传
就搞定了,具体调用的API接口是 Texture3D.uploadCompressTexture.
直接加载,上传搞定。不存在CPU开销巨大的DECODE,从根本上保证了游戏流畅度。
 
当然ATF格式作为一个新生儿,还是有很大的成长空间
1,ATF需要在未来支持更多的 DXT格式,最好1-5都能支持。当然这取决于目标硬件的普及程度。
2,ATF需要优化算法和存储结构,减少本身的体积占用,目前ATF格式要比PNG格式大20%。
3,需要整合进ADOBE各种产品线,比如PHOTOSHOP能够直接保存出ATF格式。
4,外围拓展,将ATF整合进3DMAX,MAYA等3D工具。以及整合进各种3D引擎。
 

关于Texture:

Mip 映射是一个重要却简单易懂的概念。将一个纹理保存多个缩小版本的方式就叫做 Mip 映射(例如:近处要使用512*512的纹理,那么远处则使用较小的就可以了)【PS:如一个 256*256 尺寸的纹理被保存了 128*128、64*64….1*1 这么多版本的纹理于内存中】。

需要注意的是,若要使用Mip映射,那么你的纹理尺寸必须保证为2的倍数(1, 2, 4, 8, 16, 32, 64, 128, 256,512, 1024, 2048), 但形状不一定必须是矩形。如果你没有遵守这个规则,那么Starling将会为你自动创建一个与当前纹理尺寸最接近的能被2整除的数值作为尺寸的纹理(如你使用的纹理尺寸为31*31,那么Starling会为你创建一个32*32尺寸的纹理),但这可能会对内存有一点消耗。为了确保尽可能地优化纹理的内存占用,我们建议您最好使texture atlases(翻译成中文叫做纹理贴图集,但是没多少人会用中文称呼之),也被广泛称作SpriteSheet(翻译成中文叫做精灵表,但是也没人这么叫它,都直接用英文名称呼的)的素材集成、使用方式。稍后我们会接着讨论它。

为了保证最佳的呈现品质,GPU 需要一个图片的全部 Mip 映射等级,即由原始尺寸依次除
以二直到除不尽 2 了为止。 【PS:对于一个 128*128 尺寸的纹理来说,它的全部 Mip映射等级为:64*64,32*32,16*16,8*8,4*4,2*2以及 1*1】Starling框架能够自动替你生成全部 Mip 映射等级,若是你不用 Starling框架的话,那你就得通过使用 BitmapData.draw 这个 API 并使用一个缩小一倍的 Matrix 作为参数来手动地生成全部的映射等级。

建议为2D内容使用Mip映射,这样可以使它们在缩放时能够减少锯齿的产生。

Adobe Texture Format的更多相关文章

  1. Texture Format全解析

    [Texture Format全解析] What internal representation is used for the texture. This is a tradeoff between ...

  2. 【Stage3D学习笔记续】山寨Starling(十):高效游戏设计、纹理集和ATF

    我发布了经过批处理优化的v0.3版,点击下载:https://github.com/hammerc/hammerc-study-Stage3D/archive/v0.3.zip 先看看我们批处理优化后 ...

  3. Unity 用户手册用户指南二维纹理 (Texture 2D)

    http://www.58player.com/blog-2327-953.html 二维纹理 (Texture 2D) 纹理 (Textures) 使您的 网格 (Meshes).粒子 (Parti ...

  4. Vertex Fetch Texture (VTF)

    http://www.opengl.org/wiki/Vertex_Texture_Fetch Vertex Texture Fetch     This article contains inacc ...

  5. 二维纹理 Texture 2D

    Textures bring your Meshes, Particles, and interfaces to life! They are image or movie files that yo ...

  6. C++开源库集合

    | Main | Site Index | Download | mimetic A free/GPL C++ MIME Library mimetic is a free/GPL Email lib ...

  7. Gamma Correction of OIIO

    \apiitem{"oiio:ColorSpace" : string}   The name of the color space of the color channels. ...

  8. 在Unity中创建可远程加载的.unity3d包

    在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...

  9. Unity Sprite切割导出

    这次需要将美术提供的Sprite图集切割导出,整体思路依然和上次的Sprite转prefab一致,只是在转prefab的逻辑修改为了创建Texture的逻辑. 过程很简单,直接看最终代码结果: usi ...

随机推荐

  1. Spring+iBatis+Atomikos实现JTA事务

    Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品. 产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransacti ...

  2. A标记点击后去掉虚线

    没加时,谷歌无虚线,但ie有虚线. 加上这句,所有的a标签点击都没有虚线了. a {outline: none;} a:active {star:expression_r(this.onFocus=t ...

  3. Easy Climb

    题意: 有n块石头,给定他们的高度,现保持第一和最后一块高度不变,其他可增加和减少高度,求通过变换使所有相邻石头的高度差的绝对值不大于d,所变化高度总和的最小值. 分析: 状态还可以想出来,dp[i] ...

  4. js变量申明提前及缺省参数

    现在最先的行为准则:js变量申明必须带var:然后开始随笔: 函数中的变量申明在编译的时候都会提到函数开头. 例如: function foo(){ console.log('some code he ...

  5. 详解HTTP中的摘要认证机制(转)

    Basic认证方式是存在很多缺陷的,具体表现如下: 1,  Basic认证会通过网络发送用户名和密码,并且是以base64的方式对用户名和密码进行简单的编码后发送的,而base64编码本身非常容易被解 ...

  6. voip的会议服务器Conference Servers

    http://openmcu.ru/eng.htm openmcu:   http://h323plus.cvs.sourceforge.net/viewvc/h323plus/application ...

  7. 【转】并发编程之GCD

    http://blog.xcodev.com/blog/2013/11/04/gcd-intro/ Dispatch Queue Dispatch Queue是一个任务执行队列,可以让你异步或同步地执 ...

  8. C++中#include包含头文件带 .h 和不带 .h 的区别

    C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些 ...

  9. 单片机C语言下LCD多级菜单的一种实现方法

    摘要:     介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑.实用的程序模型. 关键词: 液晶显示屏; 多级菜单; 单片机; C 语言; LCD 中 ...

  10. OAuth2-Server-php

    Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的 ...