I'm trying to convert/compress my textures into a DDS format with DXT compression from original PNGs. I'm on a Mac, so I'm using Graphic Converter (though I've tried other tools as well). But no matter which DXT level I use (DXT1-5), the filesize remains roughly that of the original PNG.
DXT Compression is yielding same filesize as original PNG
3.2k views Asked by Someone At
2
There are 2 answers
0
gman
On
DDS/DXT textures are not guaranteed to be smalled than PNG. It depends on the contents of the texture and its size. A solid color PNG or mostly solid colors like a png of a cartoon will compress very small where as a photo will generally not compress well. Where as DXT is either 4 to 1 or 6 to 1 compression period depending whether it's DXT1 or DXT3 or DXT5
Related Questions in COMPRESSION
- How do I get all the attributes of an XML element using Go?
- Type cast custom types to base types
- Why are Revel optional func parameters in controller not working? CRUD code redundancy
- Streaming commands output progress
- single ampersand between 2 expressions
- golang goroutine use SSHAgent auth doesn't work well and throw some unexpect panic
- How do I do a literal *int64 in Go?
- Emulating `docker run` using the golang docker API
- How to print contents of channel without changing it
- Golang time zone parsing not returning the correct zone on ubuntu server
Related Questions in WEBGL
- How do I get all the attributes of an XML element using Go?
- Type cast custom types to base types
- Why are Revel optional func parameters in controller not working? CRUD code redundancy
- Streaming commands output progress
- single ampersand between 2 expressions
- golang goroutine use SSHAgent auth doesn't work well and throw some unexpect panic
- How do I do a literal *int64 in Go?
- Emulating `docker run` using the golang docker API
- How to print contents of channel without changing it
- Golang time zone parsing not returning the correct zone on ubuntu server
Related Questions in TEXTURES
- How do I get all the attributes of an XML element using Go?
- Type cast custom types to base types
- Why are Revel optional func parameters in controller not working? CRUD code redundancy
- Streaming commands output progress
- single ampersand between 2 expressions
- golang goroutine use SSHAgent auth doesn't work well and throw some unexpect panic
- How do I do a literal *int64 in Go?
- Emulating `docker run` using the golang docker API
- How to print contents of channel without changing it
- Golang time zone parsing not returning the correct zone on ubuntu server
Related Questions in DDS-FORMAT
- How do I get all the attributes of an XML element using Go?
- Type cast custom types to base types
- Why are Revel optional func parameters in controller not working? CRUD code redundancy
- Streaming commands output progress
- single ampersand between 2 expressions
- golang goroutine use SSHAgent auth doesn't work well and throw some unexpect panic
- How do I do a literal *int64 in Go?
- Emulating `docker run` using the golang docker API
- How to print contents of channel without changing it
- Golang time zone parsing not returning the correct zone on ubuntu server
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
PNG is a lossless compression format, based on zlib with some specialized filters. It will guarantee to reproduce exactly the same image as the original.
As a consequence, PNG compression ratio is variable. On a complex image, compression will be poor. On a full black image, compression will be extremely good.
In contrast, DXT compression has a fixed compression ratio. This ratio is 8:1 for DXT1, and 4:1 for DXT5 (assuming 32-bits RGBA input). DXT5 advantage is a better alpha channel (for transparency). If you don't need it, don't use it, it's just a waste of bandwidth.
As you can guess, the trade-off is that DXT quality will be variable. DXT quality is merely considered "good enough", but it's far from perfect. On complex parts of the image, there will be some visible artefact/distortions. On simple parts, the reproduction will be almost exact to original.
The way PNG works is by compressing the whole image, as a single byte stream. The way DXT compression works is by cutting the image into little blocks of 4x4 pixels, and compressing them independently to a fixed compression ratio.
This makes for fundamentally different properties : DXT textures are supposed to be decoded directly by the GPU hardware. This is extremely fast, almost free. This is helped by the fact that the texture is cut into small blocks : it is not necessary to decode the whole texture to push a single pixel => just decode the appropriate 4x4 block. This property is key to the decoding process.
In contrast, PNG decode the whole image, and therefore has much more room to improve compression by finding correlations beyond the immediate 4x4 neighborhood. But the trade-off is that it's impossible to just retrieve a small block of pixels : that's the whole image or nothing.
As you can see, selecting one or the other compression method is not a matter of compression ratio. For storage purpose, choose PNG, not least because it is lossless. For fast displaying of lot of textures in real time (typical scenario for 3D games), DXT is the only way to go.