Direct 2D #14. Разбиение на блоки и сжатие. Оптимизация текстур
Johnny_Depp 22 минуты назад Direct 2D #14. Разбиение на блоки и сжатие. Оптимизация текстур Простой 7 мин 548 C++ * Windows * Разработка игр * Туториал Всем здравствуйте! Желаю вам прекрасного дня!Сегодняшняя тема...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: Johnny_Depp 22 минуты назад Direct 2D #14. Разбиение на блоки и сжатие. Оптимизация текстур Простой 7 мин 548 C++ * Windows * Разработка игр * Туториал Всем здравствуйте!
Желаю вам прекрасного дня! Сегодняшняя тема дословно переводится как "Сжатие блоков". Это набор алгоритмов для сжатия изображений (текстур и т.
Технические детали
Алгоритмы построены на идее разбиения изображения на блоки размером 4×4 (поэтому изображение должно быть кратно 4) и сжатии каждого блока. Как именно это происходит? Разберём на основе BC1 - алгоритма для сжатия без альфа-канала или с 1 битом на этот канал.
BC1:В блоке выделяем два опорных цвета. Обычно самый яркий и тёмный и сохраняем их в формате. RGB565 (5 бит на красный, 6 на зелёный, 5 на синий) - это 2 байта на цвет.
Строим палитру из 4 цветов(разветвление на то, есть альфа канал или нет):Если нет:color_2 = (2 * color_0 + color_1) / 3color_3 = (color_0 + 2 * color_1) / 3Итог. Палитра: - 4 непрозрачных цвета. Если есть:color_2 = (color_0 + color_1) / 2Итог.
Отраслевые последствия
Палитра: — 3 цвета + прозрачность. Проходимся по каждому пикселю в блоке и выбираем самый близкий цвет из палитры, присваивая пикселю 2-битный индекс (0, 1, 2 или 3). Итоговый блок 8 байт содержит:4 байта: два опорных цвета в RGB565.
4 байта: 16 двухбитных индексов для всех пикселей. Итог: Плотность 4 бита на пиксель (вместо 32), сжатие 8:1. Думаю, вы понимаете, что на небольшом изображении тут же проявятся артефакты, да и места вы выиграете немного.
GPU автоматически декодирует сжатые данные при рендеринге, поэтому потерь в производительности нет. Ниже - таблица форматов сжатия:ФорматНазначениеСжатиеBC1Изображение без альфа-канала или с 1 бит на данный канал8:1 (4 бита/пиксель)BC2Грубое сжатие альфа4:1 (8 бит/пиксель)BC3Просто хорошее сжатие альфа4:1 (8 бит/пиксель)Перед тем как перейти к практике, я расскажу про BC2 и BC3:BC2:BC2 сжимает блок 4×4 в 16 байт. Сам алгоритм:Кодируем альфа-канал (8 байт).
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





