2017-02-26 308 views
0

我一直在使用DirectXTex工具,並想知道是否可以使用texconv.exe向後,轉換DDS -> TGA(或其他支持的格式)而不是TGA, BMP, PNG -> DDS。 要轉換PNG圖像DDS可以這樣做:如何將dx10 dds圖像轉換爲PNG使用DirectXTex

texconv -f <DXGI_FORMAT> source.png 

我期待這樣的事情:

texconv source.dds output.png 

或者是有什麼能夠做到這一點?

回答

1

DirectXTex庫當然可以將DDS轉換爲另一種圖像格式,如PNG。請記住,DDS文件格式能夠編碼每種可能的Direct3D資源類型,並且DXGI_FORMAT,但PNG不是。

如果在這種情況下,source.dds是單個圖像(即沒有MIP貼圖,沒有陣列,沒有立方體地圖,而不是一個容積圖)和source.dds的格式是supported WIC pixel formatsPNG中的一個的DXGI當量,那麼這個工程:

如果
texconv source.dds -ft png 

很有可能它的編碼爲DX10擴展頭,它不是一個WIC像素格式相當多數民衆贊成由PNG編解碼器的支持,所以你需要提供一個轉換格式。類似:

texconv source.dds -ft png -f R8G8B8A8_UNORM 

如果source.dds具有MIP貼圖,那麼這些可以很容易地通過使用剝離出來:

texconv source.dds -m 1 -ft png -f R8G8B8A8_UNORM 

如果source.dds是立方貼圖或紋理陣列中,問題是,png可以」 t編碼多個圖像。你可以把它寫爲TIFF,其不支持多圖像爲:

texconv source.dds -m 1 -ft tif -f R8G8B8A8_UNORM 

我意識到,WIC作家的當前行爲默認爲使用多幀編碼與行爲不一致總是編寫第一個圖像的TGA和HDR編寫器。我在this commit中添加了新的行爲,以便WIC編寫者也默認只寫第一個圖像,除非您使用-wicmulti。這將在下一個二進制版本中發佈,但目前您需要同步master分支並自行構建以獲得此新行爲。

隨着新版本,要獲得多幀寫,你會使用texconv source.dds -m 1 -ft tif -f R8G8B8A8_UNORM -wicmulti。如果您只想要第一張圖片,則可以使用texconv source.dds -ft png -f R8G8B8A8_UNORM。這也消除了在只需要寫入第一個圖像的情況下明確使用-m 1的需要。

當立方體貼圖處理,你可以使用texassemble工具將其轉換爲一個帶或跨單個圖像:

texassemble h-strip source.dds -o output.png -f R8G8B8A8_UNORM 

如果source.dds使用DXGI_FORMAT_*_SRGB格式,則在寫它寫入一個PNG它將編碼sRGB塊來指示色彩空間。這可能會或可能不會導致預期的外觀。您可以明確地將其轉換爲非SRGB格式(這將發生在上面),您可以使用-f R8G8B8A8_UNORM_SRGB將其保留在sRGB色彩空間中,或者您可以使用-srgbi-srgbo開關將它「投射」到/從一個sRGB格式而不更改數據。

如果source.dds是高動態範圍紋理(即R32G32B32A32_FLOAT等),則所得到的圖像可能會被燒燬,將其轉換爲R8G8B8A8_UNORM。在這種情況下,您可以使用-tonemap開關。

有關更多詳細信息,請參閱TexconvTexassemble

+0

感謝您的好評。你在第一個例子中犯了錯誤,你寫了「=」而不是「 - 」:)順便說一下,有沒有辦法設置輸出(png)名稱或/和路徑? –

+0

謝謝。修正了錯字。我使用了與DirectXTex''texconv''相同的設計作爲最初的傳統DirectX SDK工具,它真正用於'批量轉換'。您可以使用'-o''提供輸出目錄,''-sx''添加文件名後綴,和/或''-px''添加文件名前綴。 –

+0

剛發現,爲什麼包含空格的路徑無法工作?像目錄「我的文件」被認爲是「我的」「文件」 –

相關問題