Архаичные Алгоритмы Сжатия Видео Из Эпохи Fmv-Игр

В 90-е годы сложилась интересная ситуация: вычислительных мощностей компьютеров было недостаточно для расчета хоть сколько-нибудь реалистичной графики, и в то же время компакт-диски давали возможность записать огромное по тем временам количество информации.

В общем, идея лежала на поверхности: было бы неплохо улучшить качество изображения игры за счет видеоконтента и иметь место для записи этого контента.

Но возникла проблема: типичное игровое разрешение того времени составляло 320 на 200 пикселей с палитрой в 256 цветов, что дает нам 64 килобайта на кадр или полтора мегабайта на 25 кадров, при скорости чтения с компакт-диска 150 килобайт в секунду.

Те.

видео нужно было сжимать и сжимать достаточно сильно, а сжав его, потом нужно было уметь его декодировать, ведь мы помним, что компьютеры были слабыми и декодирование, например, MPEG, для них было вообще невозможно.

Тем не менее, производители видеоигр успешно решили проблему недостаточной производительности, создав множество видеокодеков и форматы игрового видео , некоторые из которых мог воспроизводить аж 286-й (прописью: двести восемьдесят шестой) процессор.

Так началась эпоха FMV-игры (Полноценные видеоигры).

Думаю, многие помнят его ярких представителей: Криминальный патруль от Американских лазерных игр, Потерянный Эдем , Киберия , Новашторм и даже Командуй и властвуй , в которую многие играли только ради видеороликов между миссиями.

В те времена это выглядело очень круто.

Ух ты! Ух ты! Ну а мне было интересно, как они это видео кодировали, в книгах про мультимедиа давали такое же описание проблемы, как и я выше, но про методы сжатия ничего вразумительного не написали, видимо авторы мало в этом разбирались и пересказывали некоторые сомнительная сплетня.

На деле все оказалось очень просто, способов было всего три и все очень простые.

Но прежде чем мы перейдем к самим методам, нужно еще упомянуть широко используемые приемы.

Во-первых, ни о каких 25 кадрах в секунду, конечно, не могло быть и речи.

Все снижали fps до 10 кадров в секунду (интерактивные тиры American Laser Games).

Типичная частота кадров — 12, 14, 15 кадров в секунду.

Во-вторых, конечно, почти всегда было урезано разрешение картинки, ведь если отрезать по 10 пикселей с каждой стороны кадра (3%), это даст ~15% выигрыша.

Ну а если снизить разрешение до 256 на 144 пикселей, как это сделали разработчики Novastorm, то выигрыш будет почти в два раза.

И вот, посмотрите, если мы возьмем 256 на 144 пикселя и 14 кадров в секунду, это даст нам полмегабайта несжатого видео вместо полутора мегабайт, что обнадёживает.



1. Грубая сила и невежество (РЛ?, ЛЗ)

Был такой формат БФИ , что разработчиками было расшифровано как «Грубая сила и невежество».

В эту группу входят различные облегченные варианты, основанные на алгоритмах RLE и LZ. Это может показаться удивительным, но зачастую этого было достаточно, а если, например, в динамической сцене не хватило сжатия, то всегда можно начать пропускать кадры, а то и еще уменьшить разрешение изображения в два, а то и в четыре раза( ММ ).

Так кодируются видео в тирах American Lazer Games, играх Wing Commander, Lost Eden и других играх Cryo.

Архаичные алгоритмы сжатия видео из эпохи FMV-игр

Обратите внимание на горизонтальные полосы, характерные для Lossy RLE.

2. Векторное квантование (ВК).

Идея проста: возьмем, скажем, восемь последовательных кадров и разрежем их все на блоки 4х2 пикселей, при разрешении изображения 320 на 156 пикселей это даст нам 50 тысяч 24-мерных векторов (8 пикселей в блоке, три цветных компоненты для каждого пикселя).

Следующие друг за другом кадры, скорее всего, имеют много общего, поэтому среди этих векторов будет много близких друг к другу.

Далее мы делим эти векторы на 4096 групп и для каждой группы вычисляем центроид. Формируем кодовую книгу из центроидов, а кадры записываем в файл в виде цепочек 12-битных ссылок на кодовую книгу.

В совокупности это дает нам примерно 13 килобайт на кадр, что в принципе вполне по силам двухскоростному видеопотоку.

Примерно такой подход использовал в ранних играх Command & Conquer. Декодирование, очевидно, очень быстрое и дешевое, но качественное кодирование видео этим методом весьма затруднительно.

Не все, кто использовал VQ, преуспели.

Посмотри на это скриншоты Игры «Существо шока».



3. Блочное кодирование усечения (BTC)

Здесь опять все просто; ничего сложного в 90-х не применялось.

Чтобы сохранить 256-цветное изображение, нам понадобится по байту на каждый пиксель.

Уменьшим количество цветов, скажем, до двух, теперь нам нужен один бит на пиксель, мы получим восьмикратное сжатие и картинку ужасного качества.

Что вы можете с этим поделать? Мы просто применяем этот подход не ко всему изображению, а к небольшим блокам, потому что с большой вероятностью все цвета внутри достаточно маленького блока близки друг к другу.

Мы разрезаем изображение на блоки, скажем 4 на 4 пикселя, и для каждого из них сохраняем два цвета (свою личную палитру) и еще 16 бит ссылок на эти цвета.

Всего 4 байта на блок по 16 пикселей, т.е.

получено 4х сжатие.

Но если вдруг окажется, что двух цветов для данного блока недостаточно, то мы можем сохранить четыре цвета — это даст нам двойное сжатие.

Или вы можете разделить блок на 4 блока поменьше и рассчитать для каждого из них два цвета.

Этот метод пользуется большой популярностью, он прост и быстр в кодировании и декодировании, обеспечивает приемлемое качество и легко реализуется.

Novastorm использует блоки размером 8 на 8, которые могут иметь палитру из 2, 4 или 8 цветов.

В известной игре З Также используется нарезка на блоки 8 на 8 пикселей и деление их на части при необходимости ( СП ).

Cyberia использует комбинированный подход: использует как разделение на более мелкие блоки, так и палитры разного размера ( С93 , М95 ).

Оригинальный BTC, о котором вы можете читать в Википедии, предназначенный для сжатия полутоновых изображений, цвета рассчитываются таким образом, чтобы сохранить среднее и стандартное отклонение яркости в блоке.

Должен отметить, что такой подход даст результаты ужасающего качества.

Правильная палитра должна минимизировать сумму квадратов отклонений — тогда получается красиво.

Конечно, все использовали межкадровое сжатие в самом примитивном виде, зачастую даже без прогнозирования движения.

Ни о какой коррекции яркости в видео с палитрой не могло быть и речи, поэтому в затемненных сценах частота кадров визуально падала.

Это было очень заметно на видеороликах самого первого Жажда Скорости , и я подумал, что у меня проблемы с моим сидром с 4 скоростями.

Я даже пыталась вернуть его в магазин.



Архаичные алгоритмы сжатия видео из эпохи FMV-игр

Кадр из игры Rebel Assault. Блочность, повторы блоков характерны для VQ. Блоки 4 на 4, в основном двухцветные, скорее всего кодовая книга дополнительно кодируется с помощью BTC. Как только позволили вычислительные мощности, все стали использовать кодеки на основе дискретного косинусного преобразования, а затем и вовсе перешли на видеовставки на игровом движке, эра FMV-игр закончилась.

Есть люди, которые исследуют старые видеоформаты, реконструируют кодеки и тщательно собирают и сохраняют эти знания.

Я очень рекомендую посетить их сайт wiki.multimedia.cx .

Много информации для всех, кто интересуется сжатием аудио и видео, включая современные кодеки.

В статье использованы скриншоты с сайта mobygames.com .

Теги: #видеокодек #мультимедиа #fmv #vq #BTC #RLE #LZ #Разработка игр #Алгоритмы #Обработка изображений #обратное проектирование

Вместе с данным постом часто просматривают: