This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold підтримує автоматичну обробку текстур і стиснення даних зображень (у Atlas, Tile sources, Cubemaps та окремих текстурах, що використовуються для моделей, GUI тощо).
Існує два типи стиснення: програмне стиснення зображень і апаратне стиснення текстур.
Програмне стиснення (як-от PNG і JPEG) зменшує розмір ресурсів зображень на диску. Завдяки цьому кінцевий пакет стає меншим. Однак під час зчитування в пам’ять файли зображень потрібно розпаковувати, тому навіть невелике на диску зображення може займати багато пам’яті.
Апаратне стиснення текстур також зменшує розмір ресурсів зображень на диску. Але, на відміну від програмного стиснення, воно зменшує обсяг пам’яті, який займають текстури. Це можливо тому, що графічне обладнання здатне безпосередньо працювати зі стисненими текстурами без попереднього розпакування.
Обробка текстур налаштовується за допомогою спеціального профілю текстур. У цьому файлі ви створюєте профілі, які визначають, які формати й тип стиснення слід використовувати під час створення пакетів для певної платформи. Потім профілі пов’язуються з відповідними шаблонами шляхів файлів, що дає змогу точно визначати, які файли у вашому проєкті слід стискати та як саме.
Оскільки всі доступні методи апаратного стиснення текстур мають втрати, у даних текстур з’являтимуться артефакти. Ці артефакти значною мірою залежать від вигляду вихідних матеріалів і вибраного методу стиснення. Перевіряйте свої вихідні матеріали й експериментуйте, щоб отримати найкращі результати. Тут вам допоможе Google.
Ви можете вибрати, яке програмне стиснення зображень застосовувати до кінцевих даних текстур (стиснених або необроблених) в архівах пакета. Defold підтримує формати стиснення Basis Universal та ASTC.
Стиснення потребує значних ресурсів і часу та може спричиняти дуже тривале збирання залежно від кількості зображень текстур, які потрібно стиснути, а також вибраних форматів текстур і типу програмного стиснення.
Basis Universal (або скорочено BasisU) стискає зображення в проміжний формат, який під час виконання перекодовується в апаратний формат, відповідний до графічного процесора поточного пристрою. Формат Basis Universal забезпечує високу якість, але має втрати. Усі зображення також стискаються за допомогою LZ4 для подальшого зменшення розміру файлів під час зберігання в архіві гри.
ASTC — це гнучкий і ефективний формат стиснення текстур, розроблений ARM і стандартизований Khronos Group. Він пропонує широкий вибір розмірів блоків і кількості бітів на тексель, що дає змогу розробникам ефективно збалансувати якість зображення та використання пам’яті. ASTC підтримує різні розміри блоків, від 4×4 до 12×12 текселів, що відповідає діапазону від 8 до 0.89 біта на тексель. Така гнучкість дає змогу точно налаштовувати співвідношення між якістю текстур і вимогами до обсягу сховища.
ASTC підтримує різні розміри блоків, від 4×4 до 12×12 текселів, що відповідає діапазону від 8 до 0.89 біта на тексель. Така гнучкість дає змогу точно налаштовувати співвідношення між якістю текстур і вимогами до обсягу сховища. У таблиці нижче наведено підтримувані розміри блоків і відповідну кількість бітів на піксель:
| Розмір блока (ширина x висота) | Бітів на піксель |
|---|---|
| 4x4 | 8.00 |
| 5x4 | 6.40 |
| 5x5 | 5.12 |
| 6x5 | 4.27 |
| 6x6 | 3.56 |
| 8x5 | 3.20 |
| 8x6 | 2.67 |
| 10x5 | 2.56 |
| 10x6 | 2.13 |
| 8x8 | 2.00 |
| 10x8 | 1.60 |
| 10x10 | 1.28 |
| 12x10 | 1.07 |
| 12x12 | 0.89 |
Хоча ASTC забезпечує чудові результати, його підтримують не всі відеокарти. Ось невеликий список підтримуваних пристроїв за виробниками:
| Виробник графічного процесора | Підтримка |
|---|---|
| ARM (Mali) | Усі графічні процесори ARM Mali з підтримкою OpenGL ES 3.2 або Vulkan підтримують ASTC. |
| Qualcomm (Adreno) | Графічні процесори Adreno з підтримкою OpenGL ES 3.2 або Vulkan підтримують ASTC. |
| Apple | Графічні процесори Apple підтримують ASTC починаючи з чипа A8. |
| NVIDIA | ASTC підтримується переважно на мобільних графічних процесорах (наприклад, чипах на базі Tegra). |
| AMD (Radeon) | Графічні процесори AMD з підтримкою Vulkan зазвичай підтримують ASTC програмно. |
| Intel (інтегровані) | Сучасні графічні процесори Intel підтримують ASTC програмно. |
Кожен проєкт містить спеціальний файл .texture_profiles із конфігурацією, що використовується для стиснення текстур. За замовчуванням це файл builtins/graphics/default.texture_profiles, конфігурація якого зіставляє кожен ресурс текстури з профілем, що використовує RGBA без апаратного стиснення текстур і стандартне стиснення файлів ZLib.
Щоб додати стиснення текстур:


Ви можете вмикати й вимикати використання профілів текстур у налаштуваннях редактора. Виберіть File ▸ Preferences.... На вкладці General є прапорець Enable texture profiles.

Розділ Path Settings файлу профілів текстур містить список шаблонів шляхів і вказує, який профіль (profile) використовувати для обробки ресурсів, що відповідають шляху. Шляхи задаються як шаблони «Ant Glob» (докладніше дивіться в документації). У шаблонах можна використовувати такі символи підстановки:
*sprite*.png відповідає файлам sprite.png, sprite1.png і sprite_with_a_long_name.png.?sprite?.png відповідає файлам sprite1.png, spriteA.png, але не sprite.png чи sprite_with_a_long_name.png.**/gui/** відповідає всім файлам у каталозі /gui та всіх його підкаталогах.
Цей приклад містить два шаблони шляхів і відповідні їм профілі.
/gui/**/*.atlas/gui або будь-якому з його підкаталогів оброблятимуться відповідно до профілю «gui_atlas»./**/*.atlasЗауважте, що загальніший шлях розміщено останнім. Алгоритм зіставлення працює згори вниз. Використовується перший запис, який відповідає шляху ресурсу. Вираз шляху, що також відповідає ресурсу, але розташований нижче в списку, ніколи не перевизначає перший збіг. Якби шляхи було розташовано у зворотному порядку, кожен атлас оброблявся б із профілем «atlas», навіть у каталозі /gui.
Ресурси текстур, які не відповідають жодному шляху у файлі профілів, будуть скомпільовані й масштабовані до найближчого степеня 2, але в іншому залишаться без змін.
Розділ profiles файлу профілів текстур містить список іменованих профілів. Кожен профіль містить одну або кілька платформ (platforms), кожна з яких описується списком властивостей.

OS_ID_GENERIC відповідає всім платформам, OS_ID_WINDOWS — цільовим пакетам Windows, OS_ID_IOS — пакетам iOS тощо. Зауважте, що якщо вказано OS_ID_GENERIC, він буде включений для всіх платформ.Якщо два налаштування шляхів відповідають одному файлу й ці шляхи використовують різні профілі з різними платформами, буде використано обидва профілі та згенеровано дві текстури.
Кожен із форматів Formats, доданих до профілю, має такі властивості:
| Набір налаштувань | Примітка |
|---|---|
LOW |
Найшвидше стиснення. Низька якість зображення |
MEDIUM |
Стиснення за замовчуванням. Найкраща якість зображення |
HIGH |
Найповільніше стиснення. Менший розмір файлу |
HIGHEST |
Повільне стиснення. Найменший розмір файлу |
Зауважте, що компресор uncompressed має лише один набір налаштувань із назвою uncompressed, який означає, що стиснення до текстур не застосовуватиметься.
Список доступних компресорів наведено в розділі Компресори
Текстури для графічного обладнання можна перетворювати на нестиснені дані або дані, стиснені з втратами, з різною кількістю каналів і бітовою глибиною. Апаратне стиснення з фіксованим розміром означає, що отримане зображення матиме фіксований розмір незалежно від його вмісту. Це означає, що втрата якості під час стиснення залежить від вмісту початкової текстури.
Оскільки перекодування стиснених даних Basis Universal залежить від можливостей графічного процесора пристрою, для стиснення Basis Universal рекомендовано використовувати такі універсальні формати, як:
TEXTURE_FORMAT_RGB, TEXTURE_FORMAT_RGBA, TEXTURE_FORMAT_RGB_16BPP, TEXTURE_FORMAT_RGBA_16BPP, TEXTURE_FORMAT_LUMINANCE і TEXTURE_FORMAT_LUMINANCE_ALPHA.
Засіб перекодування Basis Universal підтримує багато вихідних форматів, як-от ASTC4x4, BCx, ETC2, ETC1 і PVRTC1.
Наразі підтримуються такі формати стиснення з втратами:
| Формат | Стиснення | Подробиці |
|---|---|---|
TEXTURE_FORMAT_RGB |
немає | 3 канали кольору. Альфа-канал відкидається |
TEXTURE_FORMAT_RGBA |
немає | 3 канали кольору та повноцінний альфа-канал. |
TEXTURE_FORMAT_RGB_16BPP |
немає | 3 канали кольору. 5+6+5 бітів. |
TEXTURE_FORMAT_RGBA_16BPP |
немає | 3 канали кольору та повноцінний альфа-канал. 4+4+4+4 біти. |
TEXTURE_FORMAT_LUMINANCE |
немає | 1 канал відтінків сірого, без альфа-каналу. Канали RGB перемножуються в один. Альфа-канал відкидається. |
TEXTURE_FORMAT_LUMINANCE_ALPHA |
немає | 1 канал відтінків сірого та повноцінний альфа-канал. Канали RGB перемножуються в один. |
Для ASTC кількість каналів завжди дорівнює 4 (RGB + альфа-канал), а сам формат визначає розмір блока стиснення. Зауважте, що ці формати сумісні лише з компресором ASTC — будь-яка інша комбінація спричинить помилку збирання.
TEXTURE_FORMAT_RGBA_ASTC_4X4
TEXTURE_FORMAT_RGBA_ASTC_5X4
TEXTURE_FORMAT_RGBA_ASTC_5X5
TEXTURE_FORMAT_RGBA_ASTC_6X5
TEXTURE_FORMAT_RGBA_ASTC_6X6
TEXTURE_FORMAT_RGBA_ASTC_8X5
TEXTURE_FORMAT_RGBA_ASTC_8X6
TEXTURE_FORMAT_RGBA_ASTC_8X8
TEXTURE_FORMAT_RGBA_ASTC_10X5
TEXTURE_FORMAT_RGBA_ASTC_10X6
TEXTURE_FORMAT_RGBA_ASTC_10X8
TEXTURE_FORMAT_RGBA_ASTC_10X10
TEXTURE_FORMAT_RGBA_ASTC_12X10
TEXTURE_FORMAT_RGBA_ASTC_12X12
За замовчуванням підтримуються наведені нижче компресори текстур. Дані розпаковуються під час завантаження файлу текстури в пам’ять.
| Назва | Формати | Примітка |
|---|---|---|
Uncompressed |
Усі формати | Стиснення не застосовуватиметься. За замовчуванням. |
BasisU |
Усі формати RGB/RGBA | Високоякісне стиснення Basis Universal з втратами. Нижчий рівень якості дає менший розмір. |
ASTC |
Усі формати ASTC | Стиснення ASTC з втратами. Нижчий рівень якості дає менший розмір. |
Defold підтримує встановлення компресорів у конвеєр стиснення текстур. Це дає змогу реалізувати алгоритм стиснення текстур у розширенні, наприклад WEBP або цілком власний алгоритм.
Щоб краще продемонструвати результат, наведемо приклад. Зауважте, що якість зображення, час стиснення та розмір стиснених даних завжди залежать від вхідного зображення й можуть відрізнятися.
Початкове зображення (1024x512):

| Набір налаштувань | Час стиснення | Відносний час |
|---|---|---|
LOW |
0m0.143s | 0.5x |
MEDIUM |
0m0.294s | 1.0x |
HIGH |
0m1.764s | 6.0x |
HIGHEST |
0m1.109s | 3.8x |
Порівняння виконано за допомогою інструмента basisu (вимірювання PSNR)
100 дБ означає відсутність втрати сигналу (тобто зображення збігається з оригіналом).
| Набір налаштувань | Сигнал |
|---|---|
LOW |
Max: 34 Mean: 0.470 RMS: 1.088 PSNR: 47.399 dB |
MEDIUM |
Max: 35 Mean: 0.439 RMS: 1.061 PSNR: 47.620 dB |
HIGH |
Max: 37 Mean: 0.898 RMS: 1.606 PSNR: 44.018 dB |
HIGHEST |
Max: 51 Mean: 1.298 RMS: 2.478 PSNR: 40.249 dB |
Розмір початкового файлу — 1572882 байти.
| Набір налаштувань | Розміри файлів | Співвідношення |
|---|---|---|
LOW |
357225 | 22.71 % |
MEDIUM |
365548 | 23.24 % |
HIGH |
277186 | 17.62 % |
HIGHEST |
254380 | 16.17 % |
Ось отримані зображення (відновлені з кодування ASTC за допомогою інструмента basisu)
LOW

MEDIUM

HIGH

HIGHEST
