Описание концепции VDP
- VDP
- "Video Display Processor"
- Чип видеоконтроллера, занимающийся работой с тайловой графикой, плоскостями скроллинга и спрайтами Genesis. На самом деле не является процессором.
- VRAM
- "Video RAM"
- RAM (ОЗУ), используемая VDP
- Содержит тайлы (изображения размером 8x8 пикселей)
- "Video RAM"
- Два основных типа консолей
- Консоли NTSC
- «Sega Genesis», 60-герцовые машины, в основном распространённые в США
- Разрешения
- Режим H40 — 320x224 пикселя (40x28 тайлов). Самый распространённый режим разрешения
- Режим H32 — 256x224 пикселей (32x28 тайлов). Менее популярный режим разрешения
- Наша студия Mega Cat выпускает NTSC-игры, поэтому использует эти разрешения!
- Консоли PAL
- «Sega Mega Drive», 50-герцовые машины, продавались во всём остальном мире
- Разрешение
- Режим H40 — 320x240 пикселей (40x30 тайлов). Самый распространённый режим разрешения
- Режим H32 — 256x240 пикселей (32x30 тайлов). Менее популярный режим разрешения
- Консоли NTSC
Слева: NTSC Model 2 Sega Genesis, справа: PAL Model 2 Mega Drive (европейская)
3 плоскости графики
2 плоскости скроллинга
Plane B — плоскость фона. Отображает тайловую графику при помощи тайловых карт.
Plane A — плоскость переднего плана. Отображает тайловую графику при помощи тайловых карт. Window subplane — подплоскость для Plane A, графика которой не скроллится с остальной плоскостью.
Каждая строка тайлов рендерится столбец за столбцом. Тайлы на каждой плоскости могут иметь приоритет: высокий или низкий.
Тайлы для спрайта, отрендеренные в обычном формате (4x4 тайла)
1 спрайтовая плоскость
Отрисовывает спрайтовую тайловую графику.
Внутри консоли спрайты рендерятся в обратном порядке, т.е. каждый столбец тайлов рендерится по строкам.
Спрайты располагаются в виртуальном пространстве 512x512 пикселей, где координаты (128,128) совпадают с верхним левым углом телеэкрана.
Genesis одновременно может отображать на экране до 80 аппаратных спрайтовGenesis может отображать примерно 20 спрайтов в одной растровой строке, при большем количества возникают проблемы с переполнением спрайтов и они перестают отображаться.
Для аппаратных спрайтов размеры ограничены (w x h), где w — ширина, h — высота, принимающие значения 1-4 тайла.
Спрайты больше размеров аппаратных спрайтов можно получить при помощи нескольких спрайтов.
Как и в случае с плоскостями, тайлы для спрайтов могут иметь низкий или высокий приоритет. Спрайты с низким приоритетом отображаются под тайлами с высоким приоритетом других слоёв. (На самом деле всё немного сложнее, но в целом концепция такова).
Тайлы для спрайта внутри консоли рендерятся в спрайтовом формате (перемещённые и размером 4x4 тайла)
Наглядное представление приоритета слоёв плоскостей
Источник: Genesis Software Manual
VDP CRAM ("Color RAM" — «цветовое ОЗУ»)
4 строки палитр, в каждой из которых 16 цветов
Каждый цвет имеет глубину 4bpp (4 бита на пиксель)
Первый цвет — это прозрачный цвет графики тайлов
Строки палитр могут рендериться в слегка более светлых или тёмных цветах при включении режимов highlight или shadow
Фоны
Sega Genesis имеет 2 плоскости тайловых карт: плоскость фона («Plane B») и плоскость переднего плана («Plane A»). В зависимости от типа машины (NTSC или PAL) и используемого видеорежима (H40 или H32), полноэкранная тайловая карта будет занимать в ширину 32 или 40 тайлов и в высоту 28 или 30 тайлов. Каждый тайл состоит из изображения размером 8x8 пикселя, а каждый пиксель соответствует индексу цвета (0-15). Строго говоря, window plane является подплоскостью Plane A; её графика не скроллится с остальной частью Plane A. Плоскости можно использовать множеством разных способов, например, для полноэкранных слоёв переднего плана и фона, или для техники, которой знамениты многие игры для Sega Genesis: параллаксного скроллинга. Выполняя скроллинг отдельных строк тайлов на плоскостях с разной скоростью, можно создать иллюзию глубины. Тайлы на тайловых картах разных плоскостей могут иметь параметр приоритета: высокого или низкого. Этот параметр определяет, где должны отображаться спрайты (которые тоже имеют высокий или низкий приоритет), под тайлом, или над ним.
VSRAM (Video Scroll RAM — видеопамять скроллинга)
Слои Plane A и Plane B могут иметь тайловые карты плоскостей скроллинга размером (w x h), где w — ширина в тайлах, h — высота в тайлах. Каждый из размеров может быть равен только 32, 64, или 128 тайлам. Эти плоскости скроллинга «прокручиваются внутрь/наружу» активного разрешения экрана (размер определяется типом машины и режимом H32/H40). Плоскости скроллинга размерами 128x64/64x128 и 128x128 недопустимы. По умолчанию части VRAM по стандартным адресам VRAM 0xC000 и 0xE000 отображаются как «мусорные тайлы», но на самом деле каждый пиксель в этих «мусорных тайлах» компактным образом кодирует тайловую карту VSRAM. Пользователь никогда не должен записывать в эти «мусорные тайлы» настоящие тайлы, иначе возникнут странные графические баги/сбои, замедления, или мусорные тайлы начнут отображаться на плоскостях скроллинга. Плоскости могут использовать 1 из 3 режимов скроллинга: по растровой строке, по тайлу, или по блоку (секции из 2x2 тайлов). Каждая плоскость может скроллиться одновременно по горизонтали и вертикали.
Цвет
Тайлы одновременно могут использовать только 1 из 4 строк палитр. Каждая строка палитры содержит 16 цветов. Первый цвет зарезервирован под прозрачный цвет, который рекомендуется делать розовым (255,0,255) (RGB). Чтобы сохранять в игре целостность стиля, для отдельных элементов можно выделить 1 или 2 палитры. Например, строка палитры 1 может использоваться для персонажа игрока, а строка палитры 2 — для элементов UI. Для отрисовки врагов, фонов и других изменяющихся элементов можно использовать различные палитры.
Для оптимального использования цвета на этом скриншоте применяется две палитры, по одной для каждого слоя плоскости тайловых карт. Два первых изображения — это отдельные слои (Plane B и Plane A), а третье — готовое полноэкранное изображение, на котором обе плоскости объединены. Так как каждый тайл одновременно может использовать индексированные цвета только из одной строки палитры, применение такой схемы изображения с двумя плоскостями позволяет обеспечить количество цветов, недоступное для изображения с одной плоскостью.
Существуют две популярные техники работы с палитрами — циклическая смена палитр (palette cycling) и растровые эффекты (raster effects). Благодаря смене цвета определённых элементов в отдельной строке палитры каждые несколько кадров можно реализовать такие эффекты, как водопад, пульсирующее освещение, и так далее.
Пример эффекта циклической смены палитр для мерцающих полос Берсерка в Zombie Football League
Растровые эффекты заменяют все или некоторые цвета строки палитры после определённой растровой строки. Мы не будем подробно рассматривать эту технику, но по сути она заключается в замене части всех цветов CRAM после прохождения электронного луча телевизора определённой горизонтальной строки развёртки. Эта техника полезна для реализации смены палитр для объектов, находящихся под водой. В частности, она используется для подводных цветов уровня Labyrinth Zone в игре Sonic the Hedgehog.
Спрайты
Спрайт позы Эшли из Coffee Crisis
Спрайты в Sega Genesis задаются как изображения с размером (w x h), где w — ширина в тайлах, а h — высота в тайлах, которые могут принимать значения 1-4 тайлов. Каждый спрайт одновременно может использовать только одну строку палитры. Аппаратные спрайты могут иметь максимальный размер 4x4 тайлов. Sega Genesis может обрабатывать до 80 экранных спрайтов, по 20 спрайтов на одну растровую строку, однако чтобы избегать тормозов, лучше не достигать этого предела. Чтобы обойти ограничение на размеры аппаратных спрайтов, многие игры используют несколько спрайтов, собирая из них одного персонажа/объект. Принцип создания классического пиксель-арта заключается в том, чтобы выбрать достаточно большое разрешение для обеспечения нужной детализации и читаемости изображения, но достаточно малое, чтобы его можно было легко анимировать. Вся графика тайлов Sega Genesis всегда должна делиться на 8 пикселей, чтобы соответствовать размерам тайлов. Спрайты могут зеркально отображаться по горизонтали («hflip») и/или по вертикали («vflip»), а также иметь флаг высокого или низкого приоритета. Этот параметр определяет, должен и спрайт отображаться под или над тайлами других плоскостей (которые также имеют параметр высокого или низкого приоритета). Аппаратные спрайты также могут иметь значение «link»; каждый спрайт должен иметь собственное уникальное значение link. Среди прочего, оно влияет на отрисовку: спрайты с низкими значениями link отрисовываются поверх спрайтов с высокими значениями link.
Анимация
Бегущий бронированный минотавр-футболист из Zombie Football League
В большинстве игр графика анимируется, а не является простыми статичными спрайтами. Постепенно изменяя кадры спрайтов, можно создать иллюзию движения, и использовать её для отображения ходьбы, атак и так далее. Художникам игр для Sega Genesis необходимо было помнить о количестве спрайтов и тайлов каждой анимации, чтобы слишком большое количество не привело к замедлению игры. Создание анимации спрайтов часто превращается в поиск компромисса между стремлением к низкому количеству спрайтов и созданием убедительного движения; особенно это относится к анимациям на Sega Genesis.
Сегодня среди разработчиков ROM-хаков Sonic the Hedgehog распространена техника под названием "Dynamic Pattern Load Cues" (DPLC). Она заключается в динамической загрузке тайлов для спрайтов во VRAM на лету вместо хранения всех тайлов для кадров спрайтов во VRAM одновременно. Очень часто детализированные спрайты (например, спрайты главного героя), занимают слишком большое количество тайлов во VRAM, используемых для кадров спрайтов. Если загружать в видеопамять только те тайлы, которые необходимы для текущего отрисовываемого кадра спрайта, можно экономить ограниченную память VRAM и занять её другой тайловой графикой. К сожалению, тайлы, используемые для DPLC, необходимо распаковывать в ROM, чтобы загрузка во VRAM была быстрой и не замедляла игру. (Распаковка сжатой графики тратит ресурсы процессора и занимает слишком много его циклов.) Функции спрайтового движка SGDK (в файле заголовка <sprite_eng.h>) обычно используют техники DPLC для вырезания неиспользуемых тайлов.
Рекомендуемые инструменты для отладки и создания графики
Поиск хорошего ПО для создания ретро-графики, разделения пиксель-арта на тайлы и снижение количества цветов до 4bpp может оказатся сложной задачей. Ниже представлен список рекомендуемого ПО для создания ретро-графики, а также специализированных эмуляторов, позволяющих пользователю изучать содержимое VRAM и плоскостей.
ПО для создания графики:
- RetroGraphicsToolkit
- Отличный инструмент для разделения графики на тайлы, создания оптимизированных тайловых карт и снижения цветов изображений
- Работа в Truecolor, свободное ПО, имеет открытый исходный код
- Скриптинг на Lua
- Набор инструментов для создания многоплатформенной графики
- Sega Genesis, Sega Master System, Game Gear
- NES
- Информационные ссылки
- Статья в Sega Retro
- Тема на форуме Sega 16
- Страница на Github (с информацией/скачиваемыми файлами)
- Irfanview
- ПО общего применения для просмотра/редактирования изображений, имеет плагины и широкую поддержку множества типов файлов изображений
- Может редактировать, экспортировать и импортировать палитры, а также увеличивать/уменьшать количество цветов изображения и показывать это количество. Полезен для подготовки файлов графики для работы с rescomp движка SGDK
- Свободное и открытое ПО
- Имеет PNG-плагин для изменения глубины цвета с сохранением порядка цветов в палитре
- Информационные ссылки
- Веб-сайт Irfanview
- PCXpal
- Полезное ПО, позволяющее выполнять конвертацию между несколькими разными форматами палитр.
- Полезно для преобразования из/в палитры Megadrive .bin и формат палитр Irfanview JASC
- Форматы импорта
- Изображения BMP, GIF, PCX
- Сохранения эмуляторов Genesis: GGD, GS*, MSD
- Файлы палитр Jasc, Megadrive, MS RIFF, Tile Layer Pro
- Форматы экспорта
- Палитры Jasc, Megadrive и Tile Layer Pro
- Информационные ссылки
- Страница на Sega Retro
Рекомендуемые специализированные эмуляторы для отладки VDP
- Туториал по использованию страниц отладки в эмуляторе Gens и его производных (Gens v2.11+)
- Gens v11a Re-recording
- Модифицированная версия знаменитого эмулятора Gens, написанного Stef
- Имеет возможно переключения слоёв и замены слоёв спрайтов
- Стандартная страница просмотра VDP отладчика Gens
- Запись видео в AVI
- Информационные ссылки
- Страница на Sega Retro
- Gens KMod
- Модифицированная версия эмулятора Gens с расширенными возможностями окон отладчика. Написана KanedaFR из Spritesmind
- Просмотр VRAM в реальном времени
- Просмотр спрайтов в реальном времени
- Просмотр плоскостей в реальном времени
- Просмотр регистров VDP в реальном времени
- Переключатель слоёв
- Информационные ссылки
- Страница на Spritemind
- Модифицированная версия с исправлением ошибок, отображающая при просмотре VRAM все тайлы (0x800) (написана Firerat, Gens_KMod 2.12a 0.7.3b)
- Страница на Spritemind
- Эмулятор Exodus
- Точно моделирующий циклы эмулятор, предназначенный для отладки и разработки. Создан Nemesis, известным по ROM-хакингу Sonic и Spritesmind. Настоящий Rolls-Royce эмуляции Genesis.
- Может быть полезен для отладки задержек, возникающих только на реальном оборудовании
- Может создавать достаточно серьёзную нагрузку на систему, и для работы с удобной частотой кадров требуется очень мощная машина
- Просмотр VDP VRAM, CRAM
- Просмотр спрайтов
- Просмотр регистров VDP
- Информационные ссылки
- Веб-сайт
- Тема на форуме Spritemind
- Тема на форуме о необходимых системных требованиях
- Веб-сайт
- Точно моделирующий циклы эмулятор, предназначенный для отладки и разработки. Создан Nemesis, известным по ROM-хакингу Sonic и Spritesmind. Настоящий Rolls-Royce эмуляции Genesis.
Игры для SEGA GENESIS, которые стоит изучить
Существует множество красивых игр для Sega Genesis, из которых можно почерпнуть различные техники и спецэффекты. В том числе:
- Серия Streets of Rage
- Серия Sonic the Hedgehog
- Растровые эффекты палитры воды
- Приоритет спрайтов/тайлов (особенно циклы и двуслойная система фрагментов в Sonic 2 и Sonic 3/Knuckles)
- Высокопроизводительный, быстрый, очень качественный игровой движок
- Спрайтовая DPLC
- Отличный дизайн уровней и стили графики (особенно в Sonic 3/Knuckles)
- Эффекты циклической смены палитр
- Эффекты параллакса
- The Adventures of Batman and Robin
- Куча сложных графических эффектов
- Castlevania Bloodlines
- Aladdin
- Серия Earthworm Jim
- Плавная анимация
- Серия Phantasy Star
- Red Zone
- 1-битное плавное чёрно-белое видео в заставке
- Программная имитация поворота спрайтов и тайловых карт!
- Графика в изометрии/с видом сверху
- Panorama Cotton (Jap), Street Racer
- Графика, напоминающая SNES Mode 7, очень сложный скроллинг строк и графические эффекты
- Hard Drivin' и Race Drivin'
- 3D, программный рендеринг полигональной графики
- Zero Tolerance и Beyond Zero Tolerance (не выпущена)
- Программный raycaster, напоминающий DOOM
- Toy Story
- Растровые эффекты палитры, позволяющие превысить количество цветов CRAM в статичных изображениях заставок
- Raycaster в стиле DOOM на уровне от первого лица
- Эффекты параллакса для геометрии уровня на первом уровне с Вуди
- Star Cruiser (Jap)
- 3D, программный рендеринг полигональной графики
- Contra: Hard Corps
- Робот-минибосс Giant на первом уровне — это тайловая карта с имитацией поворота тайловых карт/спрайтов
- Огромная самодельная RPG под названием Pier Solar
- Отличная графика
- Несколько лет создавалась командой фанатов, гуру и homebrew-разработчиков Genesis
- Огромный картридж на 64 МБ
Заметьте, как разные игры используют аппаратные ограничения Genesis и как некоторые игры выжимают из железа максимум. В Streets of Rage и Batman превосходно показаны суровые городские локации. В играх Sonic присутствуют очень яркие, контрастные цвета, которые позволяют распознавать окружение даже несмотря на высокую скорость Соника. В Aladdin и Earthworm Jim реализованы плавные и забавные анимации, хорошо подчёркивающие характеры персонажей.
Справочные материалы и дополнительное чтение
- Документ sega2f
- «Библия» программирования для Sega Genesis
- Документация по VDP, написанная Чарльзом Макдональдом
- Genesis Software Manual
- Официальная документация Sega по Genesis
- VDP в 16 картинках
- Краткий обзор наиболее важных характеристик VDP
- Сайт Genny4ever
- Сайт разработчика Pier Solar (Fonzie)
- Докментация по VDP с Sonic Retro
- Пост MarkeyJester о деформации фонов
- Информация, в основном относящаяся к моддингу Sonic 1 и 2, может оказаться полезной
- Spritesmind
- Часть форумов Spritesmind, посвящённая VDP