Why not compress the texture using NTC, VAE-VQ or some neural codec into a general embedding space of uint8 and then just expand and create mipmaps and similar using the target hardware standard?
The easiest answer is that most tools and hardware in use predates those type of embeddings.
The advantage with block compression is that it is purpose built to minimize bits used, it's local to small blocks, decoding and encoding can be done with fairly simple code[0], and it doesn't require any specific AI hardware.
I am unfamiliar with NTC, but at first glance it seems to require an Nvidia card with RTX features, meaning it wouldn't be supported on Xbox One and PlayStation 4 (AMD GCN), Xbox Series X|S and PlayStation 5 (AMD RDNA2), nor the original Switch (Nvidia Tegra X1).
NTC requires GPU for real-time decoding, but you can use it as an compressor only to have a portable representation. It's actually the common use-case today, you can on-device offline decode directly to BC7 if you feel like it!
This question reminds me of one that people apparently have seriously asked: "Why didn't they simply send up the Space Shuttle to rescue the Apollo 13 astronauts?"
Yeah, but standard texture compression formats are built in and may be implemented directly in hardware, without requiring any custom compute shaders or any GPGPU capability at all to decompress.
Aside from the fact that these formats were developed decades ago (S3TC evolved into DXTn compression, which became BCn compression), there's the fact that these formats are designed to be decompressed on the fly. Hence the block-based, fixed rate compression: the GPU can compute the memory address of a block directly from a texture coordinate without knowing anything but the format and dimensions.
What looks like complex addressing in software is fairly simple on the GPU side. Swizzling is just interleaving address bits. Various block schemes are likewise just simple bit shifting on the address. The block compression just takes a weighted average of two colors (with various storage schemes) and uses a small index per texel to look up the color.
There are a lot of combinations but it's designed to be very gate efficient to implement, so it can be decoded on demand. It's even stored compressed in the cache (usually).
augment_me · · focus · HN ↗
Agentlien · · focus · HN ↗
The advantage with block compression is that it is purpose built to minimize bits used, it's local to small blocks, decoding and encoding can be done with fairly simple code[0], and it doesn't require any specific AI hardware.
I am unfamiliar with NTC, but at first glance it seems to require an Nvidia card with RTX features, meaning it wouldn't be supported on Xbox One and PlayStation 4 (AMD GCN), Xbox Series X|S and PlayStation 5 (AMD RDNA2), nor the original Switch (Nvidia Tegra X1).
[0] <a href="https://learn.microsoft.com/en-us/windows/win32/direct3d11/bc7-format" rel="nofollow">https://learn.microsoft.com/en-us/windows/win32/direct3d11/b...
augment_me · · focus · HN ↗
raincole · · focus · HN ↗
augment_me · · focus · HN ↗
Sharlin · · focus · HN ↗
augment_me · · focus · HN ↗
Sharlin · · focus · HN ↗
SyzygyRhythm · · focus · HN ↗
What looks like complex addressing in software is fairly simple on the GPU side. Swizzling is just interleaving address bits. Various block schemes are likewise just simple bit shifting on the address. The block compression just takes a weighted average of two colors (with various storage schemes) and uses a small index per texel to look up the color.
There are a lot of combinations but it's designed to be very gate efficient to implement, so it can be decoded on demand. It's even stored compressed in the cache (usually).