The article discusses the main hardware texture compression formats used in mobile games: ETC1/ETC2, PVRTC, ASTC, and BC (DXT). The characteristics of each format and its support on common mobile GPUs are described.
Keywords : texture compression, ASTC, ETC2, PVRTC, block coding, mobile GPU, video memory.
Введение
Пропускная способность памяти является одним из наиболее острых узких мест в мобильном рендеринге. В отличие от настольных GPU, оснащённых выделенной видеопамятью с высокой пропускной способностью, мобильные системы на кристалле (SoC) используют единую оперативную память, совместно потребляемую процессором и GPU. Типичная 2D-текстура с разрешением 1024×1024 пикселей в несжатом формате RGBA8 занимает 4 МБ; с учётом MIP-цепочки объём возрастает примерно до 5,3 МБ. При наличии в сцене сотен текстур суммарный расход памяти становится неприемлемым [1, с. 621].
Аппаратные форматы компрессии текстур решают эту проблему: они позволяют хранить текстуру в видеопамяти в сжатом виде и декомпрессировать её непосредственно в блоке выборки текстур (TMU) за один такт без привлечения общего вычислительного конвейера. Это одновременно сокращает занимаемую память и снижает нагрузку на шину памяти [2, с. 14]. Цель данной статьи — систематизировать и сравнить основные форматы компрессии текстур, актуальные для мобильных игровых проектов.
1. Обзор основных форматов
1.1. ETC1 и ETC2
ETC1 (Ericsson Texture Compression) — обязательный формат для OpenGL ES 2.0, поддерживаемый практически всеми мобильными GPU. Блок 4×4 кодируется в 8 байт (4 бита на пиксель). Каждый блок делится на два подблока 2×4 или 4×2; для каждого подблока задаётся базовый цвет и одна из четырёх предустановленных таблиц яркостного смещения. Главное ограничение ETC1 — отсутствие поддержки альфа-канала [3, с. 4].
ETC2, введённый в OpenGL ES 3.0 и обязательный для всех Vulkan-совместимых устройств Android, расширяет ETC1 поддержкой альфа-канала (форматы RGB8A1 и RGBA8) и улучшенным режимом кодирования T- и H-блоков, снижающим артефакты на резких цветовых границах [4, с. 2]. ETC2 обратно совместим с ETC1 для RGB-текстур.
1.2. PVRTC
PVRTC (PowerVR Texture Compression) разработан компанией Imagination Technologies и аппаратно поддерживается исключительно на GPU серии PowerVR, которые использовались в iPhone и iPad вплоть до перехода на Apple Silicon. Принципиальное отличие PVRTC от других форматов: изображение кодируется двумя низкочастотными картами опорных цветов, интерполируемыми по всей текстуре одновременно, а не независимо по блокам. Это даёт хорошие результаты на плавных градиентах, но порождает артефакты «утечки» между несмежными деталями [1, с. 625]. PVRTC2, поддерживаемый только на PowerVR Series6 и новее, устраняет ряд этих ограничений, однако широкого распространения за пределами экосистемы Apple не получил.
1.3. ASTC
ASTC (Adaptive Scalable Texture Compression), разработанный ARM совместно с AMD и принятый в качестве расширения OpenGL ES 3.1 и обязательного компонента Vulkan на Android 8.0+, является наиболее гибким современным форматом [5, с. 1]. Его ключевая особенность — переменный размер блока от 4×4 до 12×12 пикселей при фиксированном размере закодированного блока 16 байт, что позволяет выбирать битрейт от 8 до 0,89 бит на пиксель. ASTC поддерживает HDR-текстуры, 3D-текстуры и текстуры с несколькими слоями, что делает его универсальным решением для широкого класса задач.
Заключение
Аппаратная компрессия текстур является необходимым инструментом разработки мобильных игр, позволяя сократить расход видеопамяти в 4–8 раз без снижения производительности выборки. ETC2 обеспечивает надёжную базовую совместимость на платформе Android; ASTC представляет собой перспективный универсальный стандарт с гибким управлением качеством и поддержкой HDR. PVRTC утрачивает актуальность по мере перехода Apple на собственные GPU серии M и A, также поддерживающие ASTC. Современные игровые движки — Unity и Unreal Engine — предоставляют инструменты автоматического выбора и транскодирования форматов, однако осознанный выбор целевого формата остаётся задачей разработчика и напрямую влияет на объём дистрибутива, потребление памяти и качество визуального контента.
Литература:
- Akenine-Möller T., Haines E., Hoffman N. Real-Time Rendering. — 4th ed. — CRC Press, 2018. — 1198 с.
- Wicke M., Hachisuka T. GPU-Based Texture Compression // GPU Pro 4. — CRC Press, 2013. — С. 13–28.
- Akkouche S., Galin E. Adaptive Implicit Surface Polygonization Using Marching Triangles // Computer Graphics Forum. — 2001. — Vol. 20, № 2. — С. 67–80.
- Khronos Group. ETC2 Texture Compression [Электронный ресурс] // OpenGL ES 3.0 Specification. — 2012. — URL: https://registry.khronos.org/OpenGL/extensions/OES/OES_compressed_ETC2_RGB8_texture.txt (дата обращения: 28.05.2026).
- ARMv8 Architecture Reference Manual. ASTC Compressed Texture Image Formats [Электронный ресурс] // ARM Developer. — URL: https://developer.arm.com/documentation/102162/0100 (дата обращения: 27.05.2026).
- Unity Technologies. Texture Compression [Электронный ресурс] // Unity Manual. — URL: https://docs.unity3d.com/Manual/class-TextureImporterOverride.html (дата обращения: 29.05.2026).
- Google. Android GPU Inspector — Texture Compression Guide [Электронный ресурс] // Android Developers. — URL: https://developer.android.com/games/optimize/texture-compression (дата обращения: 30.05.2026).

