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 best solutions below
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 to use deflate/inflate SetDictionary with raw deflate/inflate?
- C# How to get file/ copy file from a bzip2 (.bz2) file without extracting the file
- How can I compress four floats into a string?
- Create ZIP File Then Send to Client
- compress json data from rest node.js use express compression
- Advanced Data Compression
- Tools to minify CDD and JS files
- How to use multiple threads for zlib compression (same input source)
- Data compression in RDBMS like Oracle, MySQL etc
- Haskell - Lempel-Ziv 78 Compression - very slow, why?
- Python: how to create tar file and compress it on the fly with external module, using different compression methods not available in tarfile module?
- Why isn't lossless compression automatic on computers?
- PHP Image Compression Before Upload
- Compression of char size integer by removing leading zeroes
- BMP Image Compression and Decompression in java
Related Questions in WEBGL
- What can I do to optimize my WebGL animations?
- How can I render .mtl for object on iPhone 5 using ThreeJS?
- mat4 type in attribute shader
- How much data does texImage2D in WebGL need?
- ThreeJS updating texture with HTML canvas gives "WebGL: INVALID_VALUE: texImage2D: no canvas" on mobile (iPhone Safari, etc)
- Does double buffering for the purpose of vertex streaming do anything in webgl?
- Programmatically generate texture for WebGL in JavaScript
- WebGL Walkthrough, Move around the 3D scene
- Supporting WebGL on Android 5's WebView
- denormalizing depth values
- Why WebGL slower than Canvas?
- How to create latitudinal (horizontal) contour lines in GLSL?
- "Tainted canvases may not be loaded" Cross domain issue with WebGL textures
- Drawing individual polygons - buildings, country borders, etc on a map (looping through index buffer) in WebGL
- Repeating texture on line
Related Questions in TEXTURES
- Can linear filtering be used for an FBO blit of an MSAA texture to non-MSAA texture?
- Texture mapping consuming physical memory
- Quality not proper while rendering it via threejs r71
- SDL2_image rendering not working properly
- Cocos2D 2.x: Running CCWave action makes sprite disappear
- Creating a Texture2DArray and populate it with solid values
- Projecting a texture from plane to object with Unity
- Textured cube renders blank in DirectX
- Programmatically generate texture for WebGL in JavaScript
- Unable to render a texture on a quad
- OpenGl with C++ - Textures
- Random Line Appearing on Moving Texture Node
- Load multiple OBJ-files together with multple textures
- LibGDX "GwtApplication: exception: Couldn't load image 'a.jpg'
- Android OpenGL es 2.0 Can not reload textures on object.
Related Questions in DDS-FORMAT
- Loading an uncompressed DDS to GL texture
- Converting DDS (DXT3) texture to ImageData using WebGL
- How can I force a program that uses the DirectXTex library to save a tga file?
- C# Encode Bitmap to DDS (DXT1, DXT3, DXT5)
- OpenGL - DDS and sRGB colorspace
- KTX vs DDS images in OpenGL
- OpenGL DXT compressed textures black when Width & Height differ
- c++ How to convert DDS to png/jpg
- DDS DXT1 loading in OpenGL, crashes
- DXT Compression is yielding same filesize as original PNG
- OpenTK Texture showing up full black
- How to convert DirectDraw Surface (DDS) files to JPG
- How can I TGA file format to DDS format?
- Determine the block compression format of an existing DDS texture file
- Sampling compressed textures with less than 4 channels
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)
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?
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.