利用 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.COMPRESSED
或
flash.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 处理。
|
|
|