Сжатие текстур
Данные текстур хранятся в видеопамяти (или VRAM) устройства. Важно следить за тем, чтобы ваше приложение не исчерпывало VRAM, так как это может вызвать нежелательные вещи, такие как сбои вкладок браузера.
Редактор имеет возможность применять схемы сжатия с потерями к вашим текстурам, чтобы значительно уменьшить использование VRAM с помощью Basis.
Basis - это формат "суперсжатых" текстур. Это платформонезависимый формат сжатия с потерями, который может быть преобразован в поддерживаемый аппаратными средствами формат сжатия во время выполнения. Поддерживаемые форматы преобразования: ASTC, DXT, ETC2, ETC, PVR и ATC (выбираются в указанном порядке, если доступны).
Рассмотрим этот текстурный ассет:
Это изображение 512x512 в формате JPG размером 202 КБ. Однако JPG является сжатым форматом, и когда он передается графическому движку, он расширяется до несжатого формата RGB8, который занимает 1,05 МБ VRAM (включая уровни мип-карт).
Включение сжатия текстур дает следующие результаты:
Сжатие позволило уменьшить использование VRAM в 6 раз. Более того, в данном случае сжатие также уменьшило размер загрузки с 202 КБ до всего лишь 46 КБ, используя настройку качества Default и режим ETC.
Ниже представлено сравнение текстуры кирпича на Mac с Chrome:
Вот еще один пример куба PlayCanvas с Basis (режим ETC) и без него на Mac с Chrome:
Использование сжатия текстур Basis
После того, как текстура импортирована в редактор, выберите ее и прокрутите вниз в инспекторе, чтобы найти раздел Compression.
- Отметьте BASIS.
- Нажмите на Import Basis, чтобы добавить WASM-модуль для среды выполнения Basis в проект (это нужно сделать только один раз).
- Измените режим с 'ETC (меньший размер, ниже качество)' на 'ASTC (больший размер, выше качество)', если вам нужно уменьшить артефакты сжатия на этой текстуре.
- Отметьте Normals, если сжимаете нормальную карту.
- Измените настройку качества для балансировки размера файла и качества. Низкое качество дает меньшие размеры файлов.
- Нажмите на Compress Basis.
WASM-модуль Basis добавит 253 КБ дополнительных сжатых данных к размеру предварительной загрузки, но это должно быть компенсировано экономией размера текстур по сравнению с использованием файлов формата сжатия текстур старого типа (см. ниже).
Чтобы удалить сжатие Basis из текстуры:
- Снимите галочку с BASIS.
- Нажмите на Compress Basis.
Если вы больше не хотите использовать Basis, удалите сжатие Basis со всех текстур и удалите папку Basis из проекта.
Ограничения Basis
В PlayCanvas есть некоторые ограничения сжатия текстур Basis.
- Формат PVR поддерживает только текстуры, размеры которых являются одновременно квадратными (одинаковая ширина и высота) и степенью двойки (например, 256, 512, 1024 и так далее). Старые устройства iOS (с SoC A6 или ниже, такие как iPhone 5 и 5C) и старые версии iOS (13.7 и ниже) поддерживают только PVR. Текстура Basis, которая не является квадратной или степенью двойки, не может быть преобразована в формат PVR, но вместо этого будет использовать 16-битный формат пикселей 565. Она все равно будет отображаться корректно, хотя может занимать больше VRAM.
- Максимальные размеры текстур, поддерживаемые для сжатия Basis, составляют 4096x4096. Текстуры большего размера займут чрезмерное количество времени для сжатия, поэтому это отключено.
Сжатие текстур устаревшего типа
Мы настоятельно рекомендуем использовать сжатие Basis, где это возможно, так как для него требуется один файл текстуры для всех платформ, и он также имеет гораздо меньший размер по сравнению с устаревшими форматами. Наши тесты показывают, что Basis меньше примерно на 50% с минимальной разницей в качестве.
Схемы устаревших текстур:
- DXT: Обычно поддерживается настольными устройствами.
- PVR: Обычно поддерживается устройствами iOS.
- ETC: Обычно поддерживается устройствами Android.
Чтобы использовать параметры сжатия устаревших текстур, выберите текстуру и прокрутите вниз в инспекторе, чтобы найти раздел Сжатие.
- Установите флажок LEGACY.
- Установите флажки для всех форматов, которые вы хотите использовать.
- Нажмите на Compress Legacy.
Чтобы удалить один или несколько форматов:
- Снимите флажки со всех форматов, которые вы хотите удалить.
- Нажмите на Compress Legacy.
Миграция с устаревшего сжатия текстур на Basis
Если у вас есть проект, который уже использует форматы сжатия устаревших текстур и вы хотите использовать Basis, выполните следующие действия:
- Удалите все форматы устаревших текстур.
- Включите и используйте Basis.