Сжатие текстур не сжимает пиксели. Он сжимает блоки пикселей. Когда на отдельный пиксель ссылаются, графический процессор вычисляет, какой блок представляет пиксель. Затем он обрабатывает весь блок, чтобы получить цвет этого пикселя.
Пример
Предположим, что размер блока 4x4 пикселей на RGB-текстуре. Несжатый, каждый блок потребляет 4x4x3 = 48
байты в памяти текстур.
Теперь алгоритм сжатия вычислит среднее значение для каждого канала (RGB) и сохранит его с блоком (3 байта). Теперь давайте дадим каждому пикселю 2 бита, чтобы отрегулировать среднее значение, чтобы пиксель был ближе к своему первоначальному цвету. Это еще один 4x4x2x3/8 = 12
байт.
Общее количество байтов, используемых этим недавно изобретенным компрессором, составляет 15 байтов на блок, степень сжатия составляет 31,25%.
Мой мифический компрессор использует 7,5 бит / с. Это не так хорошо, как 2 bpp pvrtc, но теперь у вас есть приблизительное представление о том, как можно достичь 2 bbp.
обновление:
Я только что посмотрел на странице Википедии для PVRTC . Похоже, что pvrtc не использует традиционное сжатие на основе блоков. Вот документ , который описывает способ блока на основе сжатие работает и как PVRTC отличается. Особое примечание: блочные фильтры могут создавать прилично выглядящие изображения, используя 4bpp (без альфы), тогда как nvrtc может делать это с 2bpp.