Manuals
Manuals




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 тощо).

Існує два типи стиснення: програмне стиснення зображень і апаратне стиснення текстур.

  1. Програмне стиснення (як-от PNG і JPEG) зменшує розмір ресурсів зображень на диску. Завдяки цьому кінцевий пакет стає меншим. Однак під час зчитування в пам’ять файли зображень потрібно розпаковувати, тому навіть невелике на диску зображення може займати багато пам’яті.

  2. Апаратне стиснення текстур також зменшує розмір ресурсів зображень на диску. Але, на відміну від програмного стиснення, воно зменшує обсяг пам’яті, який займають текстури. Це можливо тому, що графічне обладнання здатне безпосередньо працювати зі стисненими текстурами без попереднього розпакування.

Обробка текстур налаштовується за допомогою спеціального профілю текстур. У цьому файлі ви створюєте профілі, які визначають, які формати й тип стиснення слід використовувати під час створення пакетів для певної платформи. Потім профілі пов’язуються з відповідними шаблонами шляхів файлів, що дає змогу точно визначати, які файли у вашому проєкті слід стискати та як саме.

Оскільки всі доступні методи апаратного стиснення текстур мають втрати, у даних текстур з’являтимуться артефакти. Ці артефакти значною мірою залежать від вигляду вихідних матеріалів і вибраного методу стиснення. Перевіряйте свої вихідні матеріали й експериментуйте, щоб отримати найкращі результати. Тут вам допоможе Google.

Ви можете вибрати, яке програмне стиснення зображень застосовувати до кінцевих даних текстур (стиснених або необроблених) в архівах пакета. Defold підтримує формати стиснення Basis Universal та ASTC.

Стиснення потребує значних ресурсів і часу та може спричиняти дуже тривале збирання залежно від кількості зображень текстур, які потрібно стиснути, а також вибраних форматів текстур і типу програмного стиснення.

Basis Universal

Basis Universal (або скорочено BasisU) стискає зображення в проміжний формат, який під час виконання перекодовується в апаратний формат, відповідний до графічного процесора поточного пристрою. Формат Basis Universal забезпечує високу якість, але має втрати. Усі зображення також стискаються за допомогою LZ4 для подальшого зменшення розміру файлів під час зберігання в архіві гри.

ASTC

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 ▸ New..., а потім Texture Profiles, щоб створити новий файл профілів текстур. (Також можна скопіювати default.texture_profiles у розташування поза builtins)
  • Виберіть назву й розташування нового файлу.
  • Змініть запис texture_profiles у game.project, щоб він указував на новий файл.
  • Відкрийте файл .texture_profiles і налаштуйте його відповідно до своїх вимог.

Новий файл профілів

Налаштування профілю текстур

Ви можете вмикати й вимикати використання профілів текстур у налаштуваннях редактора. Виберіть 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
Усі файли .atlas у каталозі /gui або будь-якому з його підкаталогів оброблятимуться відповідно до профілю «gui_atlas».
/**/*.atlas
Усі файли .atlas у будь-якому місці проєкту оброблятимуться відповідно до профілю «atlas».

Зауважте, що загальніший шлях розміщено останнім. Алгоритм зіставлення працює згори вниз. Використовується перший запис, який відповідає шляху ресурсу. Вираз шляху, що також відповідає ресурсу, але розташований нижче в списку, ніколи не перевизначає перший збіг. Якби шляхи було розташовано у зворотному порядку, кожен атлас оброблявся б із профілем «atlas», навіть у каталозі /gui.

Ресурси текстур, які не відповідають жодному шляху у файлі профілів, будуть скомпільовані й масштабовані до найближчого степеня 2, але в іншому залишаться без змін.

Профілі

Розділ profiles файлу профілів текстур містить список іменованих профілів. Кожен профіль містить одну або кілька платформ (platforms), кожна з яких описується списком властивостей.

Профілі

Platforms
Визначає відповідну платформу. OS_ID_GENERIC відповідає всім платформам, OS_ID_WINDOWS — цільовим пакетам Windows, OS_ID_IOS — пакетам iOS тощо. Зауважте, що якщо вказано OS_ID_GENERIC, він буде включений для всіх платформ.

Якщо два налаштування шляхів відповідають одному файлу й ці шляхи використовують різні профілі з різними платформами, буде використано обидва профілі та згенеровано дві текстури.

Formats
Один або кілька форматів текстур для генерування. Якщо вказано кілька форматів, текстури генеруються для кожного з них і включаються до пакета. Рушій вибирає текстури у форматі, який підтримує платформа виконання.
Mipmaps
Якщо прапорець установлено, для платформи генеруються піраміди текстур (mipmaps). За замовчуванням прапорець знято.
Premultiply alpha
Якщо прапорець установлено, значення кольору в даних текстури попередньо множаться на альфа-значення. За замовчуванням прапорець установлено.
Max Texture Size
Якщо встановлено ненульове значення, розмір текстур у пікселях обмежується вказаним числом. Будь-яка текстура, ширина або висота якої перевищує вказане значення, буде зменшена.

Кожен із форматів Formats, доданих до профілю, має такі властивості:

Format
Формат, який використовується для кодування текстури. Усі доступні формати текстур наведено нижче.
Compressor
Компресор, який використовується для кодування текстури.
Compressor Preset
Вибирає набір налаштувань стиснення для кодування кінцевого стисненого зображення. Кожен набір налаштувань є специфічним для компресора, і його параметри залежать від самого компресора. Для спрощення налаштування наразі доступні чотири рівні:
Набір налаштувань Примітка
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 найкращий набір налаштувань стиснення