利用 mipmap 处理

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

“MIP map”(也称为“mipmap”)是组合在一起并与纹理关联的位图,可改善运行时呈示品质和性能。MIP map 中的每个位图图像分别是主位图图像的一个版本,但与主图像相比,其详细程度有所降低。

例如,您的 MIP map 可以包括 64 × 64 像素的最高品质的主图像。MIP map 中的较低品质图像将为 32 × 32、16 × 16、8 × 8、4 × 4、2 × 2 和 1 × 1 像素。

“纹理流式处理”是首先加载最低品质的位图,然后在加载位图时逐渐显示较高品质的位图的功能。因为较低品质的位图较小,所以它们的加载速度比主图像快。因此,应用程序用户可以在高品质的主位图加载之前,在应用程序中查看图像。

Flash Player 9.115.0 和更高版本及 AIR 通过创建每个位图的不同显示比例(从 50% 开始)的优化版本来实现此技术(该过程称为“mipmap 处理”)。

Flash Player 11.3 和 AIR 3.3 支持通过 Context3D.createCubeTexture()Context3D.createTexture() 方法的 streamingLevels 参数执行纹理流式处理。

使用纹理压缩可以将纹理图像以压缩格式直接存储在 GPU 中,从而节省 GPU 内存和内存带宽。通常,纹理的压缩是脱机进行的,且压缩后的纹理以压缩格式上传到 GPU。不过,Flash Player 11.4 和 AIR 3.4 支持运行时纹理压缩,这在某些情况下非常有用,比如渲染矢量图中的动态纹理时。 要使用运行时纹理压缩,可执行以下步骤:

  • 通过调用 Context3D.createTexture() 方法创建纹理对象,在第三个参数中传递 flash.display3D.Context3DTextureFormat.COMPRESSEDflash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA

  • 使用 createTexture() 返回的 flash.display3D.textures.Texture 实例,调用 flash.display3D.textures.Texture.uploadFromBitmapData()flash.display3D.textures.Texture.uploadFromByteArray()。这些方法会在单独一个步骤中执行纹理的上传和压缩。

为以下位图类型创建 MIP 映射:

  • 使用 ActionScript 3.0 Loader 类显示的位图(JPEG、GIF 或 PNG 文件)

  • Flash Professional 文档库中的位图

  • BitmapData 对象

  • 使用 ActionScript 2.0 loadMovie() 函数显示的位图

MIP map 不适用于应用滤镜的对象或缓存位图的影片剪辑。不过,如果应用滤镜的显示对象中包含位图转换,则即使位图位于被遮罩的内容中,也会应用 MIP map。

Mipmap 处理是自动执行的,但您可以遵循几条准则,以确保您的图像利用此优化技术:

  • 对于视频播放,请将 Video 对象的 smoothing 属性设置为 true(请参阅 Video 类)。

  • 对于位图,不一定要将 smoothing 属性设置为 true,但当位图使用平滑处理时品质的改善更为显著。

  • 对于二维图像,请使用可被 4 或 8 整除的位图大小(如 640 x 128,可按如下方式递减:320 x 64 > 160 x 32 > 80 x 16 > 40 x 8 > 20 x 4 > 10 x 2 > 5 x 1)。

    对于三维纹理,使用其中每个图像的分辨率为 2 的幂(即 2^n)的 MIP map。例如,主图像的分辨率为 1024 x 1024 像素。这样,MIP map 中较低品质的图像将为 512 x 512、256 x 256、128 x 128,直至 1 x 1 像素,分别针对 MIP map 中的总共 11 个图像。

    请注意,不会对宽度或高度为奇数的位图内容执行 Mipmap 处理。