Відповіді:
Файли JPG та PNG майже завжди будуть меншими на диску, ніж у пам'яті; їх потрібно декомпресувати на ходу, щоб отримати необроблені RGB-дані, тим самим вимагаючи більшої потужності для завантаження та більше оперативної пам'яті після цього. Так багато сучасних двигунів вирішили зберігати на диску такий самий формат, що і у пам'яті, що призводить до файлів такого ж розміру, що і вимоги до пам'яті текстури (але також більших, ніж PNG або JPG). RGB / RGBA і S3TC / DXTn / BCn - це найбільш широко використовувані формати, оскільки вони читаються прямо в пам'ять без будь-якої обробки (тексту DXT попередньо стискаються).
Отже, це розміри для різних поширених форматів текстур:
Якщо ви використовуєте зображення з міпмапами , текстура вимагатиме 4/3 стільки пам’яті. Крім того, ширина і висота текстури можуть бути округлені внутрішньо, щоб бути потужністю двох на старому або менш здатному обладнання, а також на деяких дуже обмежених обладнаннях, також змушених бути квадратними.
Більше інформації про DXT: це стиснення втрат; це означає, що деякі дані про колір втрачаються при стисненні текстури. Це негативно впливає на вашу текстуру, спотворюючи гострі рамки та створюючи «блоки» на градієнтах; але переваги набагато кращі, ніж недоліки (якщо у вас DXT текстура виглядає жахливо погано, просто тримайте її нестиснутою; інші компенсують втрату розміру). Крім того, оскільки пікселі стискаються блоками фіксованого розміру, ширина та висота текстури повинні бути кратними чотирма.
Очевидно: Це залежить від формату.
Візьмемо квадратну текстуру 256 на 256 пікселів. Якщо він нестиснений 32-бітний з альфа-каналом ( Color
у XNA), то він займає 256 КБ ( 256*256*4
байт).
16-бітні формати (наприклад :),Bgr565
очевидно, будуть наполовину меншими - 128 КБ .
Потім ви потрапляєте на стислі формати. У XNA у вас є DXT1, DXT3 і DXT5 (також відомий як компресія S3 ). Це формат стиснення збитків. Це також формат на основі блоку - це означає, що ви можете зробити вибірку з нього (адже ви знаєте, в якому блоці знаходиться піксель). Це також швидше, оскільки ви використовуєте меншу пропускну здатність.
Коефіцієнт стиснення DXT1 становить 8: 1, а для DXT3 і DXT5 - 4: 1.
Отже, зображення DXT1 розміром 256x256 становить 32 КБ . А DXT3 або DXT5 - 64 КБ .
А потім є карта карти . Якщо це ввімкнено, це створює серію зображень у графічній пам’яті кожну половину розміру попередньої. Отже для нашого розміру 256x256: 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1. Текстура з картографічним відображенням приблизно на 133% перевищує розмір оригіналу.
Більшість графічних процесорів можуть читати лише дуже специфічний формат стиснення. напр. BC *, DXT *, не формати, як png. Так, так, здебільшого вірно, що .png займе більше місця у відеопам'яті, ніж на диску.
Текстури можуть зберігатися стислі або нестиснуті як у відеопам'яті, так і в системній пам'яті.
Для нестиснених текстур загальне правило полягає в тому, що це займе стільки ж місця у відеопам'яті, скільки в нестисненому вигляді в системній пам'яті.
Для стислих текстур DXT1. GPU зберігає 8 байтів для кожної плитки 4x4 у вашій текстурі. Нестиснені дані (при 8 бітах на RGB-канал) зазвичай становлять 4х4х3 = 48 байт, тому це коефіцієнт стиснення 6: 1. Для стислих текстур DXT3 / DXT5 GPU зберігає 16 байт для кожної плитки 4x4 у вашій текстурі. Це трохи нижчий коефіцієнт стиснення 3: 1.
Існує декілька застережень із стислими та стислими текстурами:
Більшість пам'яті розподіляється на сторінках (розмір яких варіюється між графічними процесорами) фіксованого розміру. напр. 4 КБ, і часто це не виділяється і не ділиться з іншими даними gpu. Тобто якщо ваш текстурний слід менший за розмір сторінки, слід у пам’яті vid часто все ще буде розміром сторінки.
Деякі gpus мають дуже специфічні вимоги до вирівнювання. Раніше деякі графічні процесори мали вимогу, щоб текстури були потужністю 2. Це часто було потрібно для підтримки шикарного представлення (див. Замовлення Мортона: http://en.wikipedia.org/wiki/Z-order_(curve )) для покращення локальності доступу під час вибірки з текстури. Це означало, що текстури непарних розмірів будуть забиті для збереження цих вимог (як правило, з цією накладкою обробляється драйвер). Хоча замовлення мортона не обов'язково використовується в сучасних гпусах, все ще може бути здуття живота, щоб підтримати конкретні вимоги gpu.
Кілька зображень вашої текстури можуть існувати в пам'яті в будь-який момент часу, особливо якщо ви використовуєте скасовувані блоки на них. Це може посилити використання вашої пам’яті до тих пір, поки gpu не використовуватиме представлення (як правило, це декілька кадрів позаду CPU-рендерінгу)
Якщо ви ввімкнете відображення карт, додаткові пробіли споживають в середньому приблизно третину базового рівня мип. YMMV на основі вищезазначених застережень.
AFAIK - це ширина зображень * висота * BPP, незалежна, якщо це PNG, JPG або BMP. Я не знаю, як розміщуються DDS або інші формати, що стискаються.
Mip-карти збільшать потребу в відеопам'яті.
Мої знання з цієї теми можуть бути трохи застарілими. Я покинув 3D деякий час тому.