В 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.
Обратите внимание на горизонтальные полосы, характерные для 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 скоростями.
Я даже пыталась вернуть его в магазин.
Кадр из игры Rebel Assault. Блочность, повторы блоков характерны для VQ. Блоки 4 на 4, в основном двухцветные, скорее всего кодовая книга дополнительно кодируется с помощью BTC.
Как только позволили вычислительные мощности, все стали использовать кодеки на основе дискретного косинусного преобразования, а затем и вовсе перешли на видеовставки на игровом движке, эра FMV-игр закончилась.
Есть люди, которые исследуют старые видеоформаты, реконструируют кодеки и тщательно собирают и сохраняют эти знания.
Я очень рекомендую посетить их сайт wiki.multimedia.cx .
Много информации для всех, кто интересуется сжатием аудио и видео, включая современные кодеки.
В статье использованы скриншоты с сайта mobygames.com .
Теги: #видеокодек #мультимедиа #fmv #vq #BTC #RLE #LZ #Разработка игр #Алгоритмы #Обработка изображений #обратное проектирование
-
Пристли, Джозеф
19 Oct, 24 -
Security Essentials Не Так Уж И Плох
19 Oct, 24 -
Робот Для Перевозки Багажа На Ces2015
19 Oct, 24