Edited wiki page through web user interface.
parent
33cfe0303c
commit
ad683ac9f6
@ -1,15 +1,68 @@
|
|||||||
#summary Various DXT compression tricks.
|
#summary Various DXT compression tricks.
|
||||||
|
|
||||||
TODO
|
=== Pure Greys ===
|
||||||
|
|
||||||
|
A typical problem when using DXT compression is that it's not possible to obtain pure greys. This is usually a problem when compressing lightmaps, since white light produces results in colored patches. That can be avoided using the YCoCg-R color space:
|
||||||
|
|
||||||
|
{{{
|
||||||
|
Co = R-B;
|
||||||
|
t = B + (Co/2);
|
||||||
|
Cg = G-t;
|
||||||
|
Y = t + (Cg/2);
|
||||||
|
|
||||||
|
s = Y - (Cg / 2);
|
||||||
|
G = Cg + s;
|
||||||
|
B = s - (Co / 2);
|
||||||
|
R = B + Co;
|
||||||
|
}}}
|
||||||
|
|
||||||
|
An even cheaper alternative is to use the JPEG-LS transform:
|
||||||
|
|
||||||
|
{{{
|
||||||
|
(R-G, G, B-G)
|
||||||
|
}}}
|
||||||
|
|
||||||
|
It might not be obvious why that works, but with the following code
|
||||||
|
you can easily test that pure greys remain pure greys after the
|
||||||
|
transform:
|
||||||
|
|
||||||
|
{{{
|
||||||
|
for(int i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
int R = i;
|
||||||
|
int G = i;
|
||||||
|
int B = i;
|
||||||
|
|
||||||
|
int a = R - G;
|
||||||
|
int b = G;
|
||||||
|
int c = B - G;
|
||||||
|
|
||||||
|
// Quantize/bitexpand colors.
|
||||||
|
a = ((a >> 3) << 3) | (a >> 5);
|
||||||
|
b = ((b >> 2) << 2) | (b >> 6);
|
||||||
|
c = ((c >> 3) << 3) | (c >> 5);
|
||||||
|
|
||||||
|
R = a + b;
|
||||||
|
G = b;
|
||||||
|
B = c + b;
|
||||||
|
|
||||||
|
printf("%d: %d %d %d\n", i, R, G, B);
|
||||||
|
}
|
||||||
|
}}}
|
||||||
|
|
||||||
|
In order to obtain better results you should adjust the color weights used to measure the error, so that you get higher accuracy in the luminance component.
|
||||||
|
|
||||||
=== Higher Quality Compression ===
|
=== Higher Quality Compression ===
|
||||||
|
|
||||||
YCoCg ...
|
A simple way of obtaining higher quality compression is using the YCoCg color space and DXT5 to encode the Y in the alpha channel and the CoCg components in the RGB channels.
|
||||||
|
|
||||||
=== Pure Greys ===
|
http://www.intel.com/cd/ids/developer/asmo-na/eng/dc/index.htm
|
||||||
|
|
||||||
|
Emil Person (aka Humus) also has a demo that implements the same idea, but using YCbCr color space instead:
|
||||||
|
|
||||||
|
http://www.humus.ca/index.php?page=3D&ID=68
|
||||||
|
|
||||||
JPEG-LS ...
|
|
||||||
|
|
||||||
=== Normal Maps ===
|
=== Normal Maps ===
|
||||||
|
|
||||||
DXT5n & BC5
|
DXT5n & BC5
|
||||||
|
Loading…
Reference in New Issue