Google Chrome после установки занимает около 280 МБ — это примерно 7 000 копий Super Mario Bros., которая в 1985 году умещалась в 40 КБ. Цифра выглядит абсурдно, но она честная: 32 КБ программного кода, 8 КБ графики, 32 уровня, десятки врагов, физика и весь саундтрек. Обычный PNG-скриншот той же игры сегодня весит больше, чем она сама.

Чтобы понять, как это стало возможным, нужно вспомнить, как разработчики NES-эпохи работали с данными. Весь визуал Super Mario Bros. строился из тайлов — блоков 8×8 пикселей. Облако, куст и холм — это один и тот же тайл, перекрашенный через палитру. Куст Марио — буквально дефолтное облако, опущенное на землю и покрашенное в зелёный. Уровни не хранились как растровые карты: вместо матрицы тайлов движок получал инструкции — «здесь начинается земля», «поставь трубу высотой 3», «включи паттерн неба». По сути, процедурная инструкция вместо данных. Музыка работала по той же логике: звуковой чип APU получал ноты и команды для синтезатора, весь саундтрек занимал пару килобайт. Один несжатый сэмпл удара барабана в современной игре весит больше.

Игра / продуктГодРазмер
Super Mario Bros.198540 КБ
.kkrieger200496 КБ
Max Payne 22003~1,5 ГБ
Google Chrome (после установки)2020-е~280 МБ
Call of Duty: Black Ops 6 (базовая)2024102 ГБ
Call of Duty со всеми компонентами и кешем2024300+ ГБ
ARK: Survival Evolved (все DLC)2020-е435 ГБ

В 2004 году немецкая демогруппа .theprodukkt довела этот принцип до предела: их шутер от первого лица .kkrieger занимал 96 КБ — меньше, чем аватарка в Telegram. Внутри не было ни одного готового ассета. Текстуры, модели, звуки и музыка генерировались процедурно при запуске по математическим формулам: «возьми шум Перлина, наложи размытие, добавь дисторсию». Если бы .kkrieger хранил ассеты традиционным способом, он весил бы 200–300 МБ. Скриншот исполняемого файла тяжелее самого файла.

ARK: Survival Evolved со всеми DLC занимает 435 ГБ, причём каждое DLC дублирует одни и те же ассеты, включая семь копий модели птицы Додо.

От 40 КБ до 300 ГБ: как разработчики разучились экономить и что с этим делать
· Источник: Habr AI

Джон Кармак в id Software шёл другим путём, но с той же целью. Doom (1993) использовал BSP-деревья, чтобы быстро отбрасывать невидимые полигоны. Quake (1996) ввёл PVS — заранее рассчитанный набор того, что игрок может видеть из каждой точки карты: если стены закрывают комнату, она вообще не рисуется. Техника Level of Detail (LOD) решала проблему иначе: далёкие объекты рендерились упрощёнными моделями или вовсе заменялись плоским изображением — импостером. Дерево вдали — не 50 000 полигонов с текстурами листьев, а прямоугольник с фотографией дерева. Этот подход используется в каждой современной AAA-игре до сих пор.

Потом жёсткие диски подешевели, интернет ускорился, а дедлайны ужесточились. Оптимизацию перестали считать обязательной. Мусорный бак в переулке, куда игрок никогда не заглянет, получил текстуру 4096×4096 пикселей с восемью PBR-каналами весом 64 МБ. Вместо одной аудиодорожки с декодингом на лету — предекодированные версии для каждой платформы, каждого формата, каждой частоты дискретизации. Unreal Engine 4/5 при первом запуске компилирует шейдеры локально, создавая гигабайты кеша. ARK: Survival Evolved со всеми DLC занимает 435 ГБ — около 11 миллионов копий Марио. Разработчики не сделали общий репозиторий ассетов, поэтому каждое DLC тащит дубликаты: на диске буквально семь одинаковых моделей птицы Додо. Call of Duty со всеми компонентами и кешем переваливает за 300 ГБ. Max Payne 2 в 2003 году весила 1,5 ГБ. Средний размер AAA-игры вырос в 100–150 раз за 20 лет.

Автор материала проверил разницу между эпохами на практике, собрав ассет-пайплайн для классической змейки в трёх вариантах. Версия FAT — как писали бы в 2020-х, не думая о размере: 16 отдельных файлов 64×64 пикселя в формате 32-bit RGBA. Версия OLDSCHOOL воспроизводила логику 90-х с максимальной экономией каждого байта. Версия AI использовала современные нейросетевые подходы к сжатию. Разница между первой и наиболее компактной версией составила 1 120 раз — и это не та версия, в которой ИИ.

Отрасль движется по кругу. Процедурная генерация, которую .theprodukkt использовала в 2004 году из необходимости, сегодня возвращается как осознанный выбор — теперь с нейросетями. Neural Texture Compression позволяет хранить текстуры в виде весов небольшой сети и разворачивать их на GPU в реальном времени. Принцип тот же, что у тайлов NES: хранить инструкцию, а не результат. Только инструкция теперь — это обученная модель.