Якщо подивитися на сучасні ігри зсередини, стає зрозуміло, що більша частина відеопам’яті витрачається не на моделі чи ефекти, а на текстури. Саме вони займають величезні обсяги VRAM. Камінь, метал, тканина, асфальт, стіни, шкіра персонажів — усе це окремі набори текстур. Причому не просто картинки, а цілий пакет каналів: колір, нормалі, шорсткість, тіні, освітлення. У підсумку один об’єкт може мати кілька різних карт матеріалу, які GPU постійно читає під час рендеру.
Традиційно текстури стискають спеціальними форматами, наприклад блоковими компресіями на кшталт BCN. Вони існують давно і працюють швидко, але мають одну особливість: коефіцієнт стискання там фіксований. Тобто текстуру можна зменшити лише до певного рівня. Якщо потрібно ще менше — доводиться або знижувати якість, або просто виділяти більше пам’яті.
Ідея, яка звучить трохи дивно: зберігати текстуру як нейромережу
І ось тут NVIDIA запропонувала доволі нестандартний підхід. Замість того щоб зберігати саму текстуру у відеопам’яті, можна зберігати її компактне “описання”. А вже під час рендерингу маленька нейромережа буде відновлювати потрібні пікселі прямо на льоту.
Ця технологія отримала назву Neural Texture Compression. Її суть проста: замість того щоб тримати повний набір кольорів і деталей, система записує невеликий набір так званих латентних параметрів. Вони описують основні властивості матеріалу. Коли GPU потрібно намалювати конкретну точку текстури, нейромережа бере координати поверхні і ці параметри, після чого обчислює фінальне значення пікселя.
Якщо говорити простіше — текстура фактично перетворюється на математичну модель. Відеокарта не читає готовий колір із пам’яті, а обчислює його.
Як система взагалі “вчиться” відтворювати текстуру
Перед тим як текстура потрапляє у гру, її проходять через процес навчання. Береться оригінальна картинка матеріалу, а потім невелика нейромережа багато разів намагається її відтворити.
Алгоритм працює дуже схоже на класичне тренування нейромереж. Система генерує значення пікселів, порівнює їх з оригіналом, рахує помилку і поступово підлаштовує свої параметри. Так повторюється багато ітерацій, поки результат майже не збігається з вихідною текстурою.
Після цього у грі зберігається вже не сама текстура, а компактний набір параметрів плюс маленька модель, яка вміє її відновлювати.
Скільки пам’яті можна зекономити
На демонстрації NVIDIA показала доволі показовий приклад. У тестовій сцені з великою кількістю матеріалів традиційні текстури займали приблизно 6,5 ГБ відеопам’яті. Після застосування нейронного стискання обсяг зменшився приблизно до 970 МБ. Це приблизно 85 % економії VRAM.
Тобто замість кількох гігабайтів текстур GPU працює з відносно невеликим набором даних. І при цьому зображення виглядає майже так само, як оригінал.
Чому це важливо для сучасних ігор
Сучасні рушії, особливо ті ж Unreal Engine 5, дуже агресивно використовують текстури високої роздільності. І саме через них відеокарти часто впираються у ліміт VRAM.
Нейронне стискання потенційно вирішує цю проблему одразу у двох місцях. По-перше, зменшується обсяг даних у пам’яті. По-друге, менше інформації потрібно передавати між пам’яттю і GPU. Це знижує навантаження на пропускну здатність пам’яті, яка часто стає вузьким місцем у графічному пайплайні.
У перспективі це означає, що сцени з величезною кількістю матеріалів можна буде запускати навіть на відеокартах із відносно невеликим обсягом VRAM.
Цікава деталь: текстура завжди відтворюється однаково
На відміну від генеративних нейромереж, ця технологія не вигадує нові деталі. Вона детермінована. Тобто одна й та сама текстура відновлюється завжди однаково.
Це важливо для ігор. Якщо б результат кожного разу трохи змінювався, на поверхнях могли б з’являтися мерехтіння або інші артефакти. Але в цьому випадку нейромережа просто обчислює той самий результат, який був отриманий під час навчання.
Ще один бонус: менший розмір ігор
Є ще один приємний ефект, про який часто згадують розробники. Якщо текстури займають менше місця, то і самі ігри можуть важити менше.
Величезні інсталяції по 100–150 ГБ з’явилися саме через те, що текстури зберігаються у високій роздільності. Якщо їх замінити компактними нейронними представленнями, розмір файлів може суттєво зменшитися. Менші патчі, швидше завантаження і менше місця на SSD.
Але є один нюанс — обчислення
Тут виникає очевидне питання. Якщо текстура більше не читається напряму з пам’яті, а обчислюється нейромережею, чи не стане це новим навантаженням для GPU?
Відповідь — так, певне обчислювальне навантаження з’являється. Саме тому технологія активно використовує блоки штучного інтелекту всередині відеокарт, наприклад Tensor-ядра або аналогічні прискорювачі у GPU інших виробників.
Ідея полягає в тому, що сучасні відеокарти мають величезний запас обчислювальної потужності для AI-операцій. Тому частину пам’яті можна “обміняти” на обчислення.
Чому технологія ще не з’явилася у реальних іграх
Попри те, що концепція виглядає багатообіцяюче, у масових іграх її поки що немає. Причина проста: інтегрувати таку систему потрібно прямо у графічний рушій.
Тобто розробники повинні змінити пайплайн роботи з текстурами. Це схоже на ситуацію з DLSS: технологія може бути дуже ефективною, але вона працює тільки там, де її спеціально додали.
Через це нейронне стискання поки що існує переважно у вигляді демо і SDK для розробників.
Чому ця ідея може змінити підхід до графіки
Якщо така система стане масовою, підхід до створення графіки у іграх може трохи змінитися. Замість того щоб постійно балансувати між якістю текстур і доступною пам’яттю, розробники отримають новий інструмент.
Текстури можна буде зберігати у значно компактнішій формі, а GPU відновлюватиме їх під час рендеру. У результаті відеокарти з невеликою кількістю VRAM зможуть працювати з набагато складнішими сценами, ніж зараз.
І це один із тих випадків, коли штучний інтелект використовується не для генерації контенту, а як дуже практичний інженерний інструмент — щоб просто зекономити гігабайти пам’яті і зробити графіку ефективнішою.
