共用方式為


在 Visual Studio 中使用影像內容管線匯出豐富的紋理格式

本文說明如何使用影像內容管線來匯出紋理,例如包含 Mipmap預乘 alpha 的紋理,或甚至是可與 Direct2D 或 JavaScript 應用程式搭配使用的紋理。

匯出包含 Mipmap 的紋理

影像內容管線可以在您的專案建置階段中,從來源影像產生 mipmap 。 為達到特定的效果,有時候您必須以手動方式指定每個 MIP 層級的影像內容。 當您不需要以手動方式指定每個 MIP 層級的影像內容時,在建置階段產生 Mipmap 可確保 Mipmap 內容永遠不會變得不同步。這也可以消除在執行階段產生 Mipmap 的效能成本。

此文章涵蓋:

  • 設定要由「影像內容管線」處理的來源影像。

  • 設定影像內容管線以產生 mipmap。

匯出 Mipmap

Mipmap 在 3D 遊戲或應用程式中提供材質表面的自動螢幕空間詳細層級。 透過預先計算的紋理縮小採樣版本,增強遊戲或應用程式的轉譯效能。 預先計算的縮小採樣版本,表示整個紋理不必在每次被採樣時都縮小圖像。

匯出具有 mipmap 的紋理

  1. 從基本材質著手。 載入現有的影像檔案,或建立影像檔案。 若要支援 mipmap,指定的材質寬度和高度大小都是 2 的相同乘冪,例如 64x64、256x256 或 512x512。

  2. 設定您剛剛建立的材質檔案,以便供「影像內容管線」處理。 在方案總管中,開啟您建立之紋理檔案的捷徑功能表,然後選擇 [屬性]。 在 [組態屬性]>[一般] 頁面上,將 [項目類型] 屬性設定為 [影像內容管線]。 確定 [內容] 屬性是設定為 [是],且 [從組建中排除] 是設定為 [否]。 選取套用

    此時會顯示 [影像內容管線] 組態屬性頁面。

  3. 設定影像內容管線以產生 mipmap。 在 [組態屬性]>[影像內容管線]>[一般] 頁面上,將 [產生 Mips] 屬性設定為 [是 (/generatemips)]

  4. 選取 [確定]。

當您建置專案時,「影像內容管線」會將來源影像從工作格式轉換成您指定的輸出格式 (包括 MIP 層級)。 結果會複製到專案的輸出目錄。

匯出包含預乘 Alpha 的紋理

影像內容管線可以從來源影像產生預乘 Alpha 的材質。 這些使用起來可以更簡單,且比起不包含預乘 Alpha 的紋理更穩固。

本文件示範下列活動︰

  • 設定要由「影像內容管線」處理的來源影像。

  • 設定影像內容管線以產生預乘 Alpha。

預乘 Alpha

預乘 Alpha 提供了許多優於傳統非預乘 Alpha 的優點,因為它更能代表實體物質與真實世界光線的互動,方法是將材質的色彩比重 (它新增至場景的色彩) 與半透明性 (它允許透出來的基礎色彩量) 分開。 使用預乘 Alpha 的一些優點包括︰

  • 使用預乘 Alpha 透明混色是關聯的作業。混用多種半透明材質的結果是相同的,而不論材質的混合順序。

  • 由於使用預乘 Alpha 透明混色的關聯本質,半透明物件的多階段呈現便簡化了。

  • 藉由使用預乘 Alpha,純粹加色法透明混色 (將 Alpha 設定為零) 和線性插補透明混色可以同時達成。 比方說,在粒子系統中,加色法透明混色的火粒子可能會變成使用線性插補透明混色的半透明煙霧粒子。 若沒有預乘 Alpha,您將必須分別繪製火粒子與煙霧粒子,並修改繪製呼叫之間的呈現狀態。

  • 使用預乘 Alpha 的材質壓縮品質會比不使用的材質高,而且它們不會表現出變色的邊緣,或稱「光環效果」(當您將不使用預乘 Alpha 的材質透明混色時可能會產生此結果)。

建立使用預乘 Alpha 的紋理

  1. 從基本材質著手。 載入現有的影像檔案,或建立影像檔案。

  2. 設定材質檔案,以便供「影像內容管線」處理。 在方案總管中,開啟材質檔案的捷徑功能表,然後選擇 [屬性]。 在 [組態屬性]>[一般] 頁面上,將 [項目類型] 屬性設定為 [影像內容管線]。 確定 [內容] 屬性是設定為 [是],且 [從組建中排除] 是設定為 [否],然後選擇 [套用] 按鈕。 此時會顯示 [影像內容管線] 組態屬性頁面。

  3. 設定影像內容管線以產生預乘 Alpha。 在 [組態屬性]>[影像內容管線]>[一般] 頁面上,將 [轉換成預乘的 Alpha 格式] 屬性設定為 [是 (/generatepremultipliedalpha)]

  4. 選擇 [確定] 按鈕。

    當您建置專案時,「影像內容管線」會將來源影像從工作格式轉換成您指定的輸出格式 (這包括將影像轉換成預乘 Alpha 格式),然後將結果複製到專案的輸出目錄。

匯出紋理,以和 Direct2D 或 JavaScript 應用程式搭配使用

「影像內容管線」能夠產生可與 Direct2D 的內部轉譯慣例相容的材質。 這種類型的紋理適合在使用 Direct2D 的應用程式中使用,以及在使用 JavaScript 建立的 UWP 應用程式中使用。

本文件示範下列活動︰

  • 設定要由「影像內容管線」處理的來源影像。

  • 設定「影像內容管線」來產生可在 Direct2D 或 JavaScript 應用程式中使用的材質。

    • 產生區塊壓縮 .dds 檔案。

    • 產生預乘 Alpha。

    • 停用 Mipmap 產生。

Direct2D 中的轉譯慣例

在 Direct2D 內容中使用的材質必須符合 Direct2D 內部轉譯慣例:

  • Direct2D 會使用預乘 Alpha 來實作透明度和半透明度。 與 Direct2D 搭配使用的材質即使不使用透明度或半透明度,也必須包含預乘 Alpha。

  • 提供材質時,必須使用下列其中一種區塊壓縮格式,以 .dds 格式提供:

    • BC1_UNORM 壓縮

    • BC2_UNORM 壓縮

    • BC3_UNORM 壓縮

  • 不支援 Mipmap。

建立與 Direct2D 轉譯慣例相容的紋理

  1. 從基本材質著手。 載入現有的影像,或建立新的影像。 若要支援以 .dds 格式支援區塊壓縮,請指定寬度和高度大小是 4 的倍數 (例如 100x100、128x128 或 256x192) 的材質。 由於不支援 Mipmap,因此紋理不一定要是正方形,且大小不一定要是 2 的乘冪。

  2. 設定材質檔案,以便供「影像內容管線」處理。 在方案總管中,開啟您建立之紋理檔案的捷徑功能表,然後選擇 [屬性]。 在 [組態屬性]>[一般] 頁面上,將 [項目類型] 屬性設定為 [影像內容管線]。 確定 [內容] 屬性是設定為 [是],且 [從組建中排除] 是設定為 [否],然後選擇 [套用] 按鈕。 此時會顯示 [影像內容管線] 組態屬性頁面。

  3. 將輸出格式設定為其中一種區塊壓縮格式。 在 [組態屬性]>[影像內容管線]>[一般] 頁面上,將 [壓縮] 屬性設定為 [BC3_UNORM 壓縮 (/compress:BC3_UNORM)]。 您可以依據您的需求,選擇任何其他 BC1、BC2 或 BC3 格式。 Direct2D 目前不支援 BC4、BC5、BC6 或 BC7 材質。 如需不同 BC 格式的詳細資訊,請參閱 Block compression (Direct3D 10) (區塊壓縮 (Direct3D 10))。

    注意

    指定的壓縮格式會決定「影像內容管線」所產生之檔案的格式。 這與「影像編輯器」中來源影像的 [格式] 屬性不同,該屬性所決定的是儲存在磁碟上的來源影像檔案格式,亦即「工作格式」。 一般而言,您不會想要壓縮工作格式。

  4. 設定「影像內容管線」以產生使用預乘 Alpha 的輸出。 在 [組態屬性]>[影像內容管線]>[一般] 頁面上,將 [轉換成預乘的 Alpha 格式] 屬性設定為 [是 (/generatepremultipliedalpha)]

  5. 設定影像內容管線,使其不會產生 Mipmap。 在 [組態屬性]>[影像內容管線]>[一般] 頁面上,將 [產生 Mips] 屬性設定為 [否]

  6. 選擇 [確定] 按鈕。

    當您建置專案時,「影像內容管線」會將來源影像從工作格式轉換成您指定的輸出格式 (此轉換包括產生預乘 Alpha),然後將結果複製到專案的輸出目錄。

請造訪使用紋理和影像,以深入了解如何使用 Visual Studio 中的影像編輯器,來建立或修改 DirectX 應用程式開發中使用的紋理和影像。