1. 程式人生 > >D3D12渲染技術之紋理資料來源

D3D12渲染技術之紋理資料來源

為遊戲建立紋理的最流行的方法是讓美工在Photoshop或其他影象編輯器中製作它們,然後將它們儲存為影象檔案,如BMP,DDS,TGA或PNG。 遊戲應用程式將載入時的影象資料載入到ID3D12Resource物件中, 對於實時圖形應用程式,DDS(DirectDraw表面格式)影象檔案格式是首選,因為它支援GPU本身理解的各種影象格式; 特別是,它支援可由GPU解壓縮的壓縮影象格式。
當美工完成紋理製作時,它們會匯出到DDS檔案,以用於遊戲應用程式。
下面介紹DDS圖片:
DDS格式是3D圖形的理想選擇,因為它支援專門用於3D圖形的特殊格式和紋理型別, 它本質上是為GPU構建的影象格式。 例如,DDS紋理支援3D圖形開發中使用的以下功能:
1、mipmap
2、可壓縮的
3、cubemap
4、體積紋理
DDS格式可以支援不同的畫素格式, 畫素格式由DXGI_FORMAT列舉型別的成員描述; 但是,並非所有格式都適用於DDS紋理。 通常,對於未壓縮的影象資料,將使用以下格式:
1、DXGI_FORMAT_B8G8R8A8_UNORM
2、DXGI_FORMAT_R16G16B16A16_FLOAT
虛擬世界的紋理數百個,紋理的GPU記憶體需求迅速增加(請記住,我們需要將所有這些紋理保留在GPU記憶體中以便快速應用它們)。 為了幫助減輕這些記憶體需求,Direct3D支援壓縮紋理格式:BC1,BC2,BC3,BC4,BC5,BC6和BC7。
壓縮紋理只能用作渲染管道的著色器階段的輸入,而不能用作渲染目標。
因為塊壓縮演算法適用於4×4畫素塊,所以紋理的尺寸必須是4的倍數。

同樣,這些格式的優點是它們可以壓縮儲存在GPU記憶體中,然後在需要時由GPU即時解壓縮,儲存壓縮在DDS檔案中的紋理的另一個好處是它們也佔用較少的硬碟空間。

建立DDS檔案

如果不熟悉圖形程式設計,如果不熟悉DDS,如果更習慣使用BMP,TGA或PNG等格式,以下是將傳統影象格式轉換為DDS格式的兩種方法:
1、NVIDIA為Adobe Photoshop提供了一個外掛,可以將影象匯出為DDS格式。 該外掛可在
https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop獲得。 在其他選項中,它允許指定DDS檔案的DXGI_FORMAT,並生成mipmap。
2、Microsoft提供了一個名為texconv的命令列工具,可用於將傳統影象格式轉換為DDS。 此外,texconv程式可用於更多,例如調整影象大小,更改畫素格式,生成mipmap甚至更多。 可以在以下網站

以下示例是輸入BMP檔案bricks.bmp,並以格式BC3_UNORM輸出DDS檔案bricks.dds並生成具有10個mipmap的mipmap鏈。

texconv -m 10 -f BC3_UNORM treeArray.dds

Visual Studio 2015具有內建的影象編輯器,除了其他流行的格式外,還支援DDS檔案。 我們可以將影象拖到Visual Studio 2015中,它應該在影象編輯器中開啟它, 對於DDS檔案,可以檢視mipmap級別,更改DDS格式以及檢視各種顏色通道。