zoukankan      html  css  js  c++  java
  • Adobe Texture Format

    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映射,这样可以使它们在缩放时能够减少锯齿的产生。

  • 相关阅读:
    上网助手(集成ipv6)windows版
    c# 串口编程
    test blog
    用于主题检测的临时日志(d020b283408c4bc68872f97ee237b663 3bfe001a32de4114a6b44005b770f6d7)
    OpenGL概述 陌陌
    [转载][转帖]谈谈我对攻读计算机研究生的看法。。。大牛的文章,见解精深独到
    滚动值的兼容问题
    js小练习去掉指定的字符组成一句话输出
    马虎将classname加到了id属性中,造成报错
    锋利的jquery读书笔记(一)
  • 原文地址:https://www.cnblogs.com/zhepama/p/3364812.html
Copyright © 2011-2022 走看看