
Девяностые годы ознаменовались стремительным технологическим рывком в индустрии игровых консолей[1]. Каждое новое поколение устройств предлагало пользователям возросшие вычислительные мощности и более совершенную визуальную составляющую.
Знаковым, но весьма неоднозначным событием той эпохи стало внедрение CD-ROM. Несмотря на то что емкость диска в 640 МБ в 320 раз превышала объем стандартных картриджей[2], характеристики приводов оказались крайне низкими: скорость доступа (800 мс[3]) и пропускная способность (150 КБ/с для односкоростных моделей) уступали картриджам в 4 миллиона раз и в 35 раз соответственно.
Sega Mega-CD была призвана расширить функционал консоли Genesis за счет работы с оптическими носителями. Библиотека платформы насчитывала около двух сотен[4] проектов, включая такие жемчужины, как Sonic CD, Snatcher, Final Fight CD и ряд качественных RPG. Впрочем, общая репутация приставки сильно пострадала из-за наводнившего рынок потока посредственных игр, активно эксплуатирующих видеовставки в формате Full Motion Video (FMV) — например, Night Trap, Prize Fighter, Slam City, Corpse Killer, Supreme Warrior, WireHead и A/X-101.
На фоне этого сомнительного контента выделялась Silpheed. Благодаря отточенному художественному стилю и инновационному графическому движку, игра вызвала настоящий восторг у критиков[5][6]. Аудитория до последнего спорила, является ли картинка трехмерным рендерингом в реальном времени или же это заранее просчитанная анимация[7]. Проект заслуженно получил статус культового, не утратив своего очарования и сегодня[8][9].
Если визуальный ряд не кажется вам впечатляющим, вспомните, что полноэкранные катсцены обрабатывались процессором m68k с частотой 12,5 МГц, использовали всего 16 цветов и передавались с пропускной способностью 150 КБ/с. С учетом качественного 16-битного звука (16 кГц) на каждый кадр видео при 15 fps оставалось лишь 8 КБ данных.
Последние две недели я посвятил реверс-инжинирингу формата FMV в этой игре. Опыт оказался уникальным: для достижения цели мне не пришлось написать ни строчки программного кода.
Ниже я делюсь результатами исследования. А если вы хотите детально изучить катсцены и фоновые видео, приглашаю посетить сториборд, сформированный с помощью разработанных мной инструментов (хотя в их создании я прибегал к помощи ИИ).
Техническое устройство Sega-CD
Прежде чем углубляться в оптимизационные приемы, обеспечившие феноменальную производительность Silpheed, необходимо понять принципы взаимодействия Sega Genesis и Mega-CD.
GENESIS │ MEGA-CD
│
┌──────────────────────┐ │ ┌───────────┐ ┌──────────┐
│ MC68000, 7,67 МГц │ │ │ WORD RAM │ │ MC68000 │
│ │ ┌───┴──────┐ │ 256 КБ │ │ │
│ ОЗУ 64 КБ ◄──┤ Порт ├────────►───────────┤ │ 12,5 МГц │
│ │ │расширения│ │PROGRAM RAM│ │ │
│ Audio RAM 8 КБ (Z80) │ └───┬──────┘ │ 512 КБ │ │ │
└──────────┬───────────┘ │ └─────┬─────┘ └─────┬────┘
│ │ └──────────────┬─────┘
┌─────┴──────────┐ │ │
│ │ │ ┌───────┐ ┌────┴────┐
┌────▼──────┐ ┌─────▼─────┐ │ │ Ricoh │ │ ASIC │
│ VDP │ │ Z-80 │ │ │ PCM ├─────┤ GFX │
│ ┌───────┐ │ │ YM2612 │ │ └───┬───┘ └────┬────┘
│ │64KVRM │ │ │ SN76489 │ │ │ │
│ └───────┘ │ │ │ │ │ │
└─────┬─────┘ └──────┬────┘ │ │ │
│ │ │ │ ┌───────┴──────┐
│ │ ┌──┴───────┐ ┌────▼────┐ │ Привод │
│ └───┤RCA-кабель├────────► Микшер ◄─┤ CD-ROM │
│ └──┬───────┘ └────┬────┘ └──────────────┘
│ │ │
┌────▼────┐ │ │
│ ТВ ◄──────────────────┼─────────────────────┘
└─────────┘ │
Подключение модуля Mega-CD превращает консоль в связку из двух параллельно работающих вычислительных систем. Mega-CD берет на себя воспроизведение PCM-аудио и управление CD-приводом (сигнал напрямую идет в микшер)[10], а также оснащена собственным ASIC-чипом для ускорения 3D-графики. Синхронизация между устройствами происходит через общую память расширения, а аудиосигналы объединяются на аппаратном уровне.
После глубокого анализа этой архитектуры я проникся глубоким уважением к инженерам Mega-CD: заставить эту конфигурацию работать слаженно — задача колоссальной сложности.
Архитектура Silpheed

Рендеринг видео в Mega-CD выводится в три слоя: два фоновых (тайловые карты A и B) и один спрайтовый (передний план). Ведомый CPU (m68k) занимается подготовкой данных для фона B, тогда как основной процессор отрисовывает элементы HUD и объекты на переднем плане.
Для обеспечения плавной смены кадров используется система двойной буферизации в Word RAM. Пока основной процессор занят выводом данных в VDP, ведомый процессор уже приступает к рендерингу следующего кадра в свободный сегмент памяти.
Для неинтерактивных сцен используется аудиочип Ricoh, отвечающий за музыку высокого качества. В процессе геймплея Ricoh задействуется эпизодически для PCM-эффектов, а основное музыкальное сопровождение ложится на плечи YM2612.



Интересный факт
Аудиотракт оригинальной Genesis (Model 1) конструктивно сложен. Чтобы звук с Sega-CD корректно попадал в общую систему, фронтальный аудиовыход консоли Genesis необходимо было соединять с линейным входом на тыльной стороне Mega-CD специальным кабелем. Итоговый микшированный сигнал подавался на ТВ с помощью отдельного кабеля.
Элегантность технических решений

Многие FMV-игры того времени провалились, пытаясь «впихнуть» полноценное видео в слабые возможности консоли, что приводило к сильному сжатию, дизерингу и потере качества. Команда Game Arts поступила иначе: они спроектировали Silpheed с нуля под заданные жесткие ограничения. Выбор был сделан в пользу полигонов с плоским шейдингом, палитры в 16 цветов и отказа от сложного затенения, что позволило получить чистую и стильную картинку.
Интересный факт
На ПК ситуация развивалась иначе: благодаря мощным CPU (вроде DX4-100) разработчики могли использовать продвинутые кодеки. В таких масштабных проектах, как Command & Conquer, Crusader: No Remorse или Wing Commander III (занимавшая 4 диска!), FMV стали важным инструментом развития повествования.
Проблема пропускной способности
Главным «узким горлышком» для Mega-CD была скорость считывания данных с диска. Процесс, включавший чтение, распаковку на CPU и передачу в видеопамять, был слишком затратным. Система не справлялась с интенсивным потоком данных.
Ограничение тайловых карт
Отсутствие полноценного кадрового буфера заставляло обновлять 768 тайлов (8×8) и перестраивать карту тайлов экрана (nametable) размером 32×28, что в сумме давало разрешение 256×224.
Три стратегии оптимизации

Первый метод — уменьшение области отображения. В Silpheed верхние и нижние строки были затемнены (черные полосы), что давало эффект «кинематографического» кадра. Второй — ограничение частоты кадров (от 7,5 до 15 fps). Третий — использование эффективных алгоритмов сжатия.
Сжатие видеоданных
В Silpheed не использовалось дельта-сжатие — каждый кадр был самодостаточен. Вместо этого разработчики оптимизировали саму структуру тайловой карты. Например, в одном из кадров 456 тайлов из 896 оказались залиты одним сплошным цветом — система просто ссылалась на один базовый тайл, сокращая поток данных на 50%.

Эта методика позволила значительно снизить нагрузку при передаче данных.

Для оставшихся тайлов, состоящих из двух цветов, был применен другой интеллектуальный подход.
Использование ASIC для распаковки
Функция Font bit, изначально созданная в ASIC для рендеринга текста, была адаптирована для ускорения графики. Она позволяла на основе трех байтов данных генерировать 8 байт (16 нибблов) графической информации — по сути, «распаковывать» двухцветные фрагменты изображения аппаратно. Это дало еще 37% экономии пропускной способности без лишней нагрузки на центральный процессор.

Сжатие тайловой карты
Для самой карты тайлов использовался алгоритм, распознающий линейный инкремент индексов. Вместо хранения всех 768 значений (960 байт), использовалась битовая маска, где бит «0» означал автоматический инкремент, что снизило объем данных еще на 30%.
Фракталы и палитра
Сложные текстуры («фракталы») на определенных уровнях сжимались минимально и требовали снижения частоты до 7,5 fps. Для динамических эффектов (взрывы, лазеры) применялся трюк с резервированием четырех цветов в палитре, которые основной процессор m68k «вращал» в каждом кадре, создавая иллюзию сложного многоцветия.
В итоге, Game Arts блестяще реализовали проект, который до сих пор является примером того, как техническая смекалка может превратить аппаратные ограничения в визуальное достоинство.

