善用 MIP 映射的優點

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

「MIP 映射」(MIP Map,亦稱為「Mipmap」) 是與紋理有關的一組點陣圖,可提高執行階段的顯示品質和效能。MIP 映射中的每個點陣圖影像是主要點陣圖影像的版本,但不如主要影像細緻。

例如,您的 MIP 映射包含最高品質、64 × 64 像素的主要影像。MIP 映射中較低品質的影像為 32 × 32、16 × 16、8 × 8、4 × 4、2 × 2 和 1 × 1 像素。

「紋理串流」是一種功能,可優先載入最低品質的點陣圖,然後以漸進方式一邊載入點陣圖一邊顯示較高品質的點陣圖。由於較低品質的點陣圖較小,所以載入的速度比主要影像來得快。因此,應用程式使用者可以在主要、高品質點陣圖載入之前,先在應用程式中檢視影像。

Flash Player 9.115.0 和更新版本以及 AIR 都會為每個點陣圖建立各種縮放 (從 50% 開始) 的最佳化版本,以實作這項技術 (此一實作程序稱為「MIP 映射」)。

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 映射不會套用至濾鏡的物件或已快取點陣圖的影片片段。不過,如果濾鏡的顯示物件中有點陣圖變形,那麼即使點陣圖位於被遮蔽的內容中,還是可以套用 MIP 映射。

MIP 映射會自動建立,但是您也可以根據下列幾項原則,確保影像能充分利用此最佳化的優點:

  • 針對視訊播放,將 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 映射。例如,主要影像的解析度為 1024 x 1024 像素。然後,MIP 映射中較低品質的影像會是 512 x 512、256 x 256、128 x 128 像素,降到 MIP 映射中 11 個影像共 1 x 1 像素。

    請注意,若點陣圖內容的高度或寬度是奇數,則不會進行 MIP 映射。