Taking advantage of mipmapping

Flash Player 9 and later, Adobe AIR 1.0 and later

MIP maps (also known as mipmaps), are bitmaps grouped together and associated with a texture to increase runtime rendering quality and performance. Each bitmap image in the MIP map is a version of the main bitmap image, but at a reduced level of detail from the main image.

For example, you can have a MIP map that includes at the highest quality a main image at 64 × 64 pixels. Lower quality images in the MIP map would be 32 × 32, 16 × 16, 8 × 8, 4 × 4, 2 × 2, and 1 × 1 pixels.

Texture streaming is the ability to load the lowest quality bitmap first, and then to progressively display higher quality bitmaps as the bitmaps are loaded. Because lower quality bitmaps are small, they load faster than the main image. Therefore, application users can view image in an application before the main, high quality bitmap loads.

Flash Player 9.115.0 and later versions and AIR implement this technology (the process is called mipmapping), by creating optimized versions of varying scale of each bitmap (starting at 50%).

Flash Player 11.3 and AIR 3.3 support texture streaming through the streamingLevels parameter of the Context3D.createCubeTexture() and Context3D.createTexture() methods.

Texture compression lets you store texture images in compressed format directly on the GPU, which saves GPU memory and memory bandwidth. Typically, compressed textures are compressed offline and uploaded to the GPU in compressed format. However, Flash Player 11.4 and AIR 3.4 support runtime texture compression, which is useful in certain situations, such as when rendering dynami textures from vector art. To use runtime texture compression, perform the following steps:

  • Create the texture object by calling the Context3D.createTexture() method, passing either flash.display3D.Context3DTextureFormat.COMPRESSED or flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA in the third parameter.

  • Using the flash.display3D.textures.Texture instance returned by createTexture(), call either flash.display3D.textures.Texture.uploadFromBitmapData() or flash.display3D.textures.Texture.uploadFromByteArray(). These methods upload and compress the texture in one step.

MIP maps are created for the following types of bitmaps:

  • a bitmap (JPEG, GIF, or PNG files) displayed using the ActionScript 3.0 Loader class

  • a bitmap in the library of a Flash Professional document

  • a BitmapData object

  • a bitmap displayed using the ActionScript 2.0 loadMovie() function

MIP maps are not applied to filtered objects or bitmap-cached movie clips. However, MIP maps are applied if you have bitmap transformations within a filtered display object, even if the bitmap is within masked content.

Mipmapping happens automatically, but you can follow a few guidelines to make sure your images take advantage of this optimization:

  • For video playback, set the smoothing property to true for the Video object (see the Video class).

  • For bitmaps, the smoothing property does not have to be set to true, but the quality improvements are more visible when bitmaps use smoothing.

  • Use bitmap sizes that are divisible by 4 or 8 for two-dimensional images (such as 640 x 128, which can be reduced as follows: 320 x 64 > 160 x 32 > 80 x 16 > 40 x 8 > 20 x 4 > 10 x 2 > 5 x 1).

    For three-dimensional textures, use MIP maps where each image is at a resolution that is a power of 2 (meaning 2^n). For example, the main image is at a resolution of 1024 x 1024 pixels. The lower quality images in the MIP map would then be at 512 x 512, 256 x 256, 128 x 128 down to 1 x 1 pixels for a total of 11 images in the MIP map.

    Note that mipmapping does not occur for bitmap content with an odd width or height.