Editing Arcane University:DDS Data Format
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
Almost all textures used by Skyrim are DDS (Direct Draw Surface) files. This article contains information and advice on the different types of DDS files, and how to use them. | Almost all textures used by Skyrim are DDS (Direct Draw Surface) files. This article contains information and advice on the different types of DDS files, and how to use them. | ||
− | == Texture Types and the DXT | + | == Texture Types and the DXT format == |
===What is the DDS file format?=== | ===What is the DDS file format?=== | ||
− | * | + | *DXT is a set of compression algorithms or codecs applied to raster/bitmap images. The set is also known as S3 Texture Compression (S3TC). They all convert 4×4 blocks of pixels to either 64-bits or 128-bits depending on the codec. All are lossy algorithms. The original codecs were created by S3 Graphics, but many non-encumbered alternatives exist now. There are many different codecs: DXT1, DXT3, DXT5, etc. I’ll talk more about them in a moment. DDS (Direct Draw Surface) is an image file format, rather like a container for storing image data compressed using one of the DXT codecs. It was developed by Microsoft and introduced with DirectX 7. Together, a DDS file containing data organized using a DXT code creates an image file that can be used in most graphical applications, at least those that support DDS natively or via a plug-in. DDS files are very common in the game industry, where advantages in loading speed and video memory savings outweigh disadvantages. |
===How does it work?=== | ===How does it work?=== | ||
− | * | + | *DXT sees images as collections of 4×4 blocks of pixels called "texels". For every texel, DXT selects two colors from the texel, each determining one end of a color range of 4 colors. The middle two colors are interpolated. The sixteen pixels of the texel are then assigned a 2-bit index (0-3) that maps them to the color range. The two representative colors are stored as 16-bit RGB values (5:6:5). So each texel requires 2×16 bits for the colors, plus 16×2 bits for the indices, giving a total of 64 bits for each texel, which equates to 4 bits per pixel. So for any set of images having the same dimensions, compressed size will always be the same. |
===What if the image has an alpha channel?=== | ===What if the image has an alpha channel?=== | ||
− | * | + | * How DXT handles this depends on the codec used. In DXT5, the alpha channel is encoded using a second set of 64 bits for each texel. DXT5 stores alpha information in a way that is almost the same as color information. Two alpha values are selected and used as the extremes for a range of transparency values. The alpha values are represented by 8 bits each, and the range indices by 3 bits each, allowing for gradients of up to 8 shades. DXT3 handles the alpha channel a little differently. Each pixel gets 4 bits to represent its alpha, for a total of 16 unique values of transparency. This allows the alpha channel to be represented more accurately than DXT5, but with less subtle transitions. So, for an image with no alpha using DXT1, compression results in an image using 4 bpp (bits per pixel). For an image using DXT3 or DXT5 incorporating an alpha channel, the requirements will be 8 bpp. Note that the actual image size will likely be larger, as it will frequently include mipmap data. |
− | ===What are the advantages of DDS files and | + | ===What are the advantages of DDS files and DXT compression?=== |
− | *Fast load times. DDS files are ready to be used by the graphics system and can be read straight into graphics memory with little overhead. In situations where many files are being constantly swapped in/out of the graphics unit, this can be a substantial savings and can reduce "lag", especially with big texture files. Mipmaps can be pre-generated and included in the DDS files. This is another savings in load times and gives the graphic designer control over mipmap construction. More on mipmaps in a moment. Data remains compressed in video memory. All image formats except DDS are loaded into graphics memory in flat, uncompressed state. (And uncompressing them takes time and resources.) DDS files remain in their compressed state in video RAM, using special algorithms on the video card to retrieve data on demand. Compression ratio is 6:1 if no alpha channel is used, or 4:1 if an alpha channel is used. This can result in huge video memory savings. | + | *Fast load times. DDS files are ready to be used by the graphics system and can be read straight into graphics memory with little overhead. In situations where many files are being constantly swapped in/out of the graphics unit, this can be a substantial savings and can reduce "lag", especially with big texture files. Mipmaps can be pre-generated and included in the DDS files. This is another savings in load times and gives the graphic designer control over mipmap construction. More on mipmaps in a moment. Data remains compressed in video memory. All image formats except DDS/DXT are loaded into graphics memory in flat, uncompressed state. (And uncompressing them takes time and resources.) DDS/DXT files remain in their compressed state in video RAM, using special algorithms on the video card to retrieve data on demand. Compression ratio is 6:1 if no alpha channel is used, or 4:1 if an alpha channel is used. This can result in huge video memory savings. |
===What are the disadvantages?=== | ===What are the disadvantages?=== | ||
− | * | + | *DXT codecs are lossy. What is stored as compressed data is not the same as the original image, and on a fine level it may not even be close. Images with high contrast regions such as print or cartoon-like colors and borders will likely generate visible artifacts, particularly with smaller resolutions. For this reason DXT can be problematic when used with normal maps, though there are work-arounds. I’ll come back to this issue. Never use DDS files for editing and archiving. The compression degrades the original colors. It is not a good format where retention of the true color is critical, particularly in those situations where fine differences may have a large impact. DXT generates images using a 16 bit color depth. Where formats like JPG or PNG use 8 bits per channel per pixel (RGB 8:8:8) for a 24-bit color depth (32 bits with PNGs having an alpha channel), DXT reduces the spectrum down to 5:6:5 bits using an interpolation algorithm to arrive at the new color values. In short, you lose much of the original color range. But many graphic applications in games and sims don't require tight control over the colors, and a good choice of the color palette can eliminate any visible results of this DXT effect. File size on disk can be large for DDS. For example, a 1024×1024 image with an alpha channel and mipmaps will result in a 1.37MB file. But file size is a relatively small consideration these days. Game/simulation performance matters far more. |
===Are there any image dimension limitations?=== | ===Are there any image dimension limitations?=== | ||
− | *DDS images can be of any dimension expressed in powers of two up to the limits of your application or hardware, but no dimension can be less than 4. So 1024×512 is fine, but 2048×2 is not. Since | + | *DDS/DXT images can be of any dimension expressed in powers of two up to the limits of your application or hardware, but no dimension can be less than 4. So 1024×512 is fine, but 2048×2 is not. Since DXT compression works with texels and each texel is a 4×4 block of pixels, it follows that DXT can’t work with an image with a dimension smaller than 4. |
==Mipmaps== | ==Mipmaps== | ||
Line 26: | Line 26: | ||
A texture without mipmaps will not crash the game, but may cause significant drops in framerate, and will look "grainy" at a distance. All Skyrim textures should have mipmaps, except for facegen textures and UI art. | A texture without mipmaps will not crash the game, but may cause significant drops in framerate, and will look "grainy" at a distance. All Skyrim textures should have mipmaps, except for facegen textures and UI art. | ||
− | ==There are tons of | + | ==There are tons of DXT codecs! Which should I use?== |
− | + | *DXT comes in a lot of flavors. Fortunately most are specialty applications. For common situations you’ll probably need to consider only two: DXT1 and DXT5 (if intended for Skyrim LE), or DXT1 and DXT10 (for SSE). Let's briefly overview each one to get an idea when they might be used. | |
− | + | ** '''DXT1 (BC1)''' | |
− | + | *** RGB, 4 bits per pixel, no alpha or 1 bit (black or white) alpha | |
− | * | + | *** DXT1 is a fixed 8:1 compression ratio |
− | * | + | **:If your image does not require an alpha channel, use the no-alpha DXT1. It uses the same compression algorithm as DXT3/5 for color data, and will get you half the file size. It can also be used if the alpha channel is 1-bit: in other words, if parts of the texture either transparent or not, with no partially transparent pixels. This can be useful for diffuse textures that use alpha testing but no blending. |
− | + | ** '''DXT3 (BC2)''' | |
− | + | *** ARGB, 8 bits per pixel, explicit alpha | |
− | * | + | *** DXT3 is a fixed 4:1 compression ratio |
− | * | + | **:DXT3's method for storing alpha is better for files that have clearly delineated defined alpha regions and values. It may result in banding artefacts if used on images with smooth blended alpha regions– use DXT5 or DXT10 for these cases. |
− | + | ** '''DXT5 (BC3)''' | |
− | + | *** ARGB, 8 bits per pixel, interpolated alpha | |
− | * | + | *** DXT5 is same 4:1 compression ratio as DXT3 |
− | * | + | **:DXT5 was the go-to codec for most images that include an alpha channel in Skyrim LE. The cost is double the file size of a DXT1 image. If you do not need an alpha channel, or only require 1 bit of alpha, use DXT1. If compressing textures for Skyrim SE, use DXT10/BC7 where you would otherwise use DXT5. |
− | + | ** '''ATI1 (BC4)''' | |
− | BC7 is a more recent compression algorithm that is supported by Skyrim SE, but not LE. BC7 is preferred over | + | *** One color channel (grayscale), 8 bits per pixel, no alpha |
− | + | *** ATI1 is a fixed 2:1 compression ratio | |
− | + | *** This compression is not supported by Skyrim LE. It is ideal for textures that contain only one color channel and no alpha. | |
+ | ** '''DXT10 (BC7)''' | ||
+ | *** RGB or RGBA, 8 bits per pixel, interpolated alpha | ||
+ | *** BC7 is same 4:1 compression ratio as BC3 and BC5 | ||
+ | **:BC7 is a more recent compression algorithm that is supported by Skyrim SE, but not LE. Its compression rate is equal to BC3 and BC5, but at higher quality. This does come at the cost of somewhat longer time to compress. Always use the slowest compression method when given the option, for highest quality. BC7 is preferred over BC5 in nearly all cases. DXT1/BC1 is still preferred for textures without alpha channels, or 1-bit alpha, since it is much smaller. When exporting as BC7, always use the slowest compression algorithm for the highest quality. | ||
{{note|Images that are already compressed in .dds format cannot be increased in quality by reformatting them, unless you use the original ''uncompressed'' texture as a base.}} | {{note|Images that are already compressed in .dds format cannot be increased in quality by reformatting them, unless you use the original ''uncompressed'' texture as a base.}} |