我想知道如何通過紋理來計算視頻內存或內存的成本。例如,TGA或DDS或PNG或JPEG佔用多少視頻內存。是相同的?如何通過紋理來計算視頻內存或內存的成本
如果相同,爲什麼PVRTC在IOS中的成本要低於PNG的視頻內存。
我知道這是一個很大的話題,可以填寫一本書。那麼在簡單介紹之後,任何人都可以爲這個主題提供一些參考。提前致謝。
我想知道如何通過紋理來計算視頻內存或內存的成本。例如,TGA或DDS或PNG或JPEG佔用多少視頻內存。是相同的?如何通過紋理來計算視頻內存或內存的成本
如果相同,爲什麼PVRTC在IOS中的成本要低於PNG的視頻內存。
我知道這是一個很大的話題,可以填寫一本書。那麼在簡單介紹之後,任何人都可以爲這個主題提供一些參考。提前致謝。
TGA或DDS或PNG或JPEG。是相同的?
這就是文件格式。文件格式與視頻內存中的紋理格式無關。
TGA,PNG和JPEG是通用文件格式。 當遊戲讀取文件時,它會解壓文件並將其轉換爲內部表示。 從這些格式中,png提供無損壓縮,jpeg提供有損壓縮,tga通常是未壓縮的。我認爲只有png和tga支持透明度。
DDS面向DirectX,因爲它以DirectX支持的其中一種紋理格式存儲數據。可能被壓縮(有損),無壓縮,有或沒有alpha通道。據我所知,(至少)DirectX支持兩種(類型)紋理格式 - 壓縮和未壓縮。 除此之外,紋理可能有mipmap或可能沒有mipmap。 OpenGL 應該支持一些壓縮格式,但我沒有嘗試在OpenGL中使用它們,所以我不太確定。
width*height*pixel_size
(驅動器可以分配更多的)。width*height*pixel_size*2
字節的視頻內存。size*size*pixel_size*6
字節的數據。width*height*depth*pixel_size
字節的數據。現在,here's a list of texture formats for DirectX。任何不是的DXT都是未壓縮的,但具有不同的通道組和每個通道的不同數量的比特。例如,有幾個16位紋理格式。 DXT格式提供有損壓縮,如果將其應用於着色器中的普通地圖,將會產生明顯的醜陋瑕疵。根據您的數據,DXT格式可以顯着減小紋理的大小。因爲格式是有損的,所以它不適用於普通地圖,對於2d藝術應該用alpha通道掩蓋。
一些參考
您可以下載DirectX SDK中,OpenGL標準或平臺文檔(如果你的東西,像IOS開發),並開始閱讀。
只需添加到SigTerm的優秀回覆:PVRTC將在「視頻」內存和存儲文件中使用4bpp或2bpp(除非使用類似zlib的內容來獲得額外的文件壓縮)。iOS GPU知道如何本地解壓縮這些格式。
這種PNG和JPG格式可用於減少文件數據大小,但必須解壓縮到比如32bpp才能被GPU訪問。這是必要的,因爲這些格式不允許隨機訪問像素數據,這對紋理來說是必不可少的。
FWIW,關於PVRTC和其他紋理壓縮方法的一些背景信息can be found here: