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
- Should I compress images in java backend before sending to frontend?
- saving always adds artefacts to my images that photoshop doesn't
- Kafka compression on Broker side
- I am trying to compress video in Android using ffmpeg
- Compress gzip/Deflate string with golang
- how to convert different length of bits into byte array?
- knowledge distillation in a multistep model
- How to decompress the contents of a var to another var?
- Why response body not compressed when use webtestclient?
- How to monkey-patch np.savez_compressed to add compression level, without editing numpy's source files?
- incorrect header check while implementing GZIP in spring boot REST APIs
- Create algorhitm to create .pak file from unpack code
- Problem with decompressing algorithm in firefox (works in chrome/edge)
- Can I ignore some keyword while compressing css file through webpack? In other words I need a loader which just compress my file without validation
- PNG cropping increases file size
Related Questions in WEBGL
- Shader rendering problem in capacitor phaserjs in webgl mode
- Three.js how to determine if backfacing in a RawShaderMaterial that's double sided and transparent?
- Why is the value of `gl_FragCoord.z` is always 0.5?
- How to draw a WebGLTexture into another Canvas?
- How to implement Vertex Shader in React Three Fiber to transform in XY plane based on Z height coordinates
- Given a convex polygon as a set of edges how to fill the area inside depending on the distance to the closest edge
- How to display GLSL shaders on a png
- FrameBuffer texture reading black for each pixel WebGL
- Single WebGL 2.0 shader for multiple texture precisions
- WebGL Position vertex inside vertex shader?
- glMatrix 3.4 from quat to modeView rotation
- WebGL 2.0 unsigned integer input variable
- Adding shaders to the style object in WebGLVectorLayerRenderer?
- WebGL fragment shader issue: texture borders artifacts (Mac M1+)
- Enabling transparency on objects rendered to render texture makes them disappear completely on iOS - React Three Fiber
Related Questions in TEXTURES
- LibGDX Normal Textures Not Showing Up in 3D (Blender) Model Java
- A way to warp an image based on a map
- Cracks in my automatic texture in Unreal engine 5
- Threejs .glb loading textures issue, texures not loaded
- Which format should be more smooth for complex R8 textures - BC4 or BC7?
- Unity render Texture is not as clear as the actual gameobject in the scene, how to make it clearer?
- Anyone else notcing delays of shared d3dtexture2D betweeen two processes?
- How to ensure the background texture joins up smoothly around sphere in Three.js?
- Update node's physicsbody with texture animation?
- Transfer GL_TEXTURE_2D Image to GL_TEXTURE_CUBE_MAP
- Converting Texture Atlas exported from Adobe Animate to Images
- WGPU: How to change max_bind_groups/device bind group limit?
- How to calculate Uvs from texture atlas?
- Downloaded model has no materials or textures
- Three.js Y Axis Offset for Equirectangular Image Not Working
Related Questions in DDS-FORMAT
- maya 2020 cannot show dds texture
- How can I force a program that uses the DirectXTex library to save a tga file?
- Searching Working C/C++ DDS Image Library
- Convert any input DDS into another DDS format in DirectXTex
- Replace Bitmap by BitmapSource when creating a MIP maps for DDS image
- Sampling compressed textures with less than 4 channels
- Determine the block compression format of an existing DDS texture file
- OpenGL - DDS and sRGB colorspace
- C# Encode Bitmap to DDS (DXT1, DXT3, DXT5)
- Open and write a .dds file in R32G32B32A32_UINT on Python
- How to decompress a BC3_UNORM DDS texture format?
- Direct2D (SharpDX) block compressed bitmaps not compressed in memory
- How to convert DirectDraw Surface (DDS) files to JPG
- IWICDdsDecoder fails to load Cube maps
- How to convert PNG to uncompressed DDS in Linux?
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?
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.