Графика древности: легендарный Mode 7

в 9:00, , рубрики: mode 7, ruvds_статьи, Super Nintendo, графика, Демосцена, игры, Игры и игровые приставки, игры и консоли, пиксель-арт, пиксельная графика, псевдо-3d, псевдотрёхмерность, ретрокомпьютеры, трёхмерная графика

Графика древности: легендарный Mode 7 - 1


Технологический переход в индустрии видеоигр, случившийся в середине 1990-х годов — от пиксельной графики игр прошлых лет к полигональной графике игр чуть менее прошлых лет — произошёл не одномоментно. Ему предшествовала эпоха экспериментов, когда разработчики придумывали разнообразные способы убедительной имитации трёхмерного изображения в рамках скромных вычислительных ресурсов. Изометрический движок Filmation и силуэтная графика в Tau Ceti на ZX Spectrum, технология масштабирования спрайтов Super Scaler компании Sega, рейкастинг в Wolfenstein 3D, BSP-дерево в Doom, воксельный ландшафт в игре Comanche — эти времена породили множество любопытнейших технологий, каждая из которых достойна отдельного рассказа.

В до сих пор звучащих отголосках так называемых консольных войн той эпохи (что круче — Sega Genesis или Super Nintendo?) часто можно услышать ещё одно название, которым уместно дополнить список выше — Mode 7. Мы не знаем, что это такое, если бы мы знали, что это такое, но обычно под этим подразумевается какое-то вращение или масштабирование объектов в играх, или же уходящая вдаль дорога, как в гоночных играх F-Zero и Super Mario Kart, или же карта мира, как во многих играх жанра JRPG. В реальности всё интереснее, сложнее, и как водится, требовало от разработчиков недюжинной креативности. Сегодня поговорим об этой технологии.

Двигатель прогресса

Для начала нужно объяснить, каким образом наименование Mode 7 вошло в публичный лексикон — в отличие от, например, эквивалентного по смыслу int 10h, которое очень памятно всем причастным к разработке игр под MS-DOS, но совершенно не на слуху у рядовых игроков.

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

Так произошло с пресловутыми битами (8 бит, 16 бит и далее), которые не являются конкретной технической характеристикой, но маркетинг научил нас, что чем их больше, тем лучше. Или таинственный Blast Processing в приставке Mega Drive от Sega. Лучшие умы человечества, в том числе современные разработчики для этой платформы, до сих пор гадают и спорят, что именно могло подразумеваться под этим названием. Маркетинг же объяснял нам, что это когда на экране всё шевелится крайне стремительно, и даже игровая камера иногда не поспевает за ёжиком Соником.

Mode 7 стал скорее исключением из правила: это вполне официальное название (из документации Nintendo) совершенно конкретной вещи, обладающей конкретными техническими характеристиками. Маркетинг, впрочем, не стал вдаваться в тонкости, и на пальцах объяснил, что это когда всё вращается, увеличивается, вообще очень круто, и есть только на SNES.

Графика древности: легендарный Mode 7 - 2

Mode 7 открытым текстом позиционируется как символ мощи платформы в августе 1991 года в журнале Electronic Gaming Monthly

Образ получился весьма удачным, настолько, что публика стала воспринимать этот термин как синоним трёхмерной графики на платформе, и до сих пор приписывает использование Mode 7 играм, в которых такового на самом деле не было. Такое произошло, например, с игрой Axelay, в которой используется довольно редкий, но достаточно простой в реализации растровый эффект. В нём как бы есть и ощущение вращения, и растягивания, а всем известно, что это то, чем славится Mode 7, и в результате многие видят там суслика, которого нет, до сих пор включая Axelay в списки лучших игр с использованием Mode 7 (да, есть и такие).

Графика древности: легендарный Mode 7 - 3

Mode 7 беспокоил умы игроков и в мае 1994 года. Журнал Game Players

Так или иначе, название ушло в народ и стало синонимом графической мощи платформы. С тех пор, многие годы спустя, когда SNES давно потеряла актуальность, любой эффект текстурированной плоскости пола в около-ретро играх на любых платформах часто называют Mode 7, даже если фактическая реализация никакого отношения к этой технологии не имеет.

Семь чего?

Семь колец — искусным гномам во дворце подгорном. Нет, название, конечно, не имеет отношения к Кольцам Власти. Его происхождение очень банально, это просто один из видеорежимов приставки, проходящий в документации под номером 7. Правда, начинается нумерация режимов с нуля, таким образом на самом деле это не седьмой, а восьмой режим по счёту, последний из восьми доступных.

Как и многие видеоигровые системы того времени, SNES оперирует тайлово-спрайтовой графикой: изображение строится из слоёв фона и спрайтов. Слои фона состоят из регулярной сетки с графическими элементами 8 на 8 пикселей, наподобие символов в текстовом режиме, а спрайты представляют собой небольшие объекты, размером от 8 на 8 до 64 на 64 точек, перемещающиеся независимо от слоёв фона.

Графика древности: легендарный Mode 7 - 4

Титульный экран в Super Mario World работает в Mode 1 и складывается из трёх слоёв фона и слоя спрайтов

От конкурирующих платформ приставку отличает необычно большое количество видеорежимов — конфигураций, отличающихся набором слоёв фона (от одного до четырёх), цветовых ограничений (от 4 до 256 цветов на слой фона), и поддержкой некоторых дополнительных возможностей. Например, в одних режимах возможно смещение элементов фона относительно их стандартной сетки, а в других — чередование строк для удвоения вертикального разрешения. Спрайтовый слой работает одинаково во всех режимах.

Графика древности: легендарный Mode 7 - 5

Содержимое слоёв целиком для той же сцены

Главной же изюминкой видеосистемы SNES стал режим с номером 7, очень особенный, сильно отличающийся от всех остальных. В нём есть всего один слой фона с 256-цветной палитрой и набором из 256-ти блоков размером 8 на 8 пикселей. По сути, это старый добрый текстовый режим, только символы 256-цветные, а размер текстового буфера 128 на 128 символов. Однако этот слой можно не только перемещать по двум осям, как обычно, но масштабировать и вращать в плоскости экрана. Это всё, ничего больше делать с ним нельзя, никаких уходящих в перспективу псевдотрёхмерных плоскостей. Всё остальное достигается за счёт креативного совместного применения этой и других возможностей аппаратуры SNES.

Далее статьи, пытающиеся объяснить, как устроен Mode 7, обычно начинают ругаться формулами, поминая системы координат, матрицы перехода и аффинное преобразование. То есть, недалеко уходят от маркетинга — ничего не понятно, но очень интересно. На самом деле можно объяснить то же самое и простыми человеческими словами.

Кручу-верчу

При обычном отображении двухмерной картинки экран строится пиксель за пикселем, строка за строкой. И на каждый пиксель происходит формирование пикселя фона, точно так же, пиксель за пикселем и строка за строкой. Координаты пикселей на экране и пикселей в источнике меняются по одной единичке строго синхронно. То есть и на экране, и в слое фона сначала X координата увеличивается на единицу, а когда строка экрана кончается, X возвращается в изначальное состояние, и увеличивается Y координата на единицу. Получается отрисовка пиксель-в-пиксель.

Графика древности: легендарный Mode 7 - 6

Синхронное сканирование пикселей источника и приёмника с одинаковым шагом, 1 к 1

Но что, если на одно прибавление координаты пикселя на экране мы будем прибавлять координаты пикселя фона через раз? То есть, к X и Y экрана будет по-прежнему прибавляться единица, а к X и Y фона — 0.5. Тогда в каждый пиксель экрана содержимое каждого пикселя фона продублируется дважды, картинка увеличится вдвое — получится простейший случай масштабирования изображения.

Графика древности: легендарный Mode 7 - 7

Сканирование пикселей источника с меньшим шагом, чем приёмника, 0.5 к 1

Если же вместо увеличения координаты пикселей фона по одной оси мы используем произвольный вектор, то есть будем на каждый шаг прибавлять к X и Y координатам дробное значение — например, проходя пиксели немного по диагонали, это и будет пресловутое аффинное преобразование. Меняя направление вектора, мы получим поворот изображения на экране, а меняя величину шага — масштабирование.

Графика древности: легендарный Mode 7 - 8

Сканирование пикселей источника с поворотом (к X прибавляется дробная дельта, для следующей строки X сбрасывается на начальное значение и другая дельта прибавляется к Y) приводит к повороту содержимого приёмника

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

Графика древности: легендарный Mode 7 - 9

Возможные аффинные и невозможные (неаффинные) преобразования

Конечно, даже для таких простых вычислений потребовалось усложнение устройства видеоконтроллера по сравнению с обычным сканированием, а оно повлекло за собой в конечном счёте и удорожание приставки — видеоконтроллер в ней выполнен в виде двух чипов, и видеопамять также представлена двумя раздельными чипами. Точная аппаратная реализация в SNES достоверно неизвестна (чипы ещё не разобраны полностью), но по косвенным признакам для сканирования пикселей слоя фона используется две координаты, к которым на каждый пиксель экрана прибавляется два значения. Вычисления идут в целых числах с фиксированной точкой, то есть на уровне аппаратуры это просто два двоичных счётчика-сумматора, из которых выбором нужных бит формируются адреса конкретных тайлов в видеопамяти и пикселей в них. Насколько мне известно, точная разрядность сумматоров в реальном видеоконтроллере тоже пока не подтверждена, а лучшие эмуляторы используют реализацию с дробной частью шириной в 8 бит, дающую визуально схожий результат.

Для установки вектора сканирования действительно используется матрица 2 на 2, то есть аффинное преобразование задаётся четырьмя 16-битными параметрами, плюс ещё два 16-битных смещения центральной точки. Матрица нужна для упрощения аппаратной реализации, но стоящая за этим математика не столь важна для дальнейшего понимания.

Перспективы

Как выяснилось выше, видеоконтроллер приставки может вращать и масштабировать один-единственный слой фона и выводить поверх него спрайты обычных, фиксированных размеров, безо всяких поворотов. Но в реальных играх можно наблюдать куда более сложные эффекты — и вращение огромных спрайтов, и слои фона одновременно с ними, и, в конце концов, уходящую вдаль перспективу в гоночных играх, да ещё с меняющими размер спрайтами гонщиков. Откуда всё это берётся?

Графика древности: легендарный Mode 7 - 10

Самый известный пример использования Mode 7, практически синоним — игра F-Zero

Для начала нужно рассмотреть ещё один очень интересный элемент архитектуры SNES, можно сказать, играющий роль её серого кардинала. В отличие от Mode 7, он не на слуху у игроков, но именно он позволяет эффективно применять и комбинировать предлагаемые видеоконтроллером возможности, и можно сказать, что именно связка этих двух элементов определяет визуальную эстетику платформы. Речь идёт про контроллер HDMA.

Как следует из названия, это прежде всего DMA — устройство, выполняющее быстрые пересылки данных без участия центрального процессора. Но это не простой DMA, а очень специализированный. Он предназначен для пересылки данных из памяти в регистры видеоконтроллера в начале каждой новой строки телевизионного растра, во время периода горизонтального гашения (H-blank). Причём пересылки идут в восемь потоков, и для каждого может быть задана своя особая программа, определяющая схему пересылки, и какие данные на какой строке должны быть переданы. За одну строку каждый канал может пересылать от одного до четырёх байт, итого до 32 байт.

Зачем всё это нужно и чем может быть полезно? Большинство визуальных эффектов на приставках с тайлово-спрайтовой архитектурой видеосистемы достигаются путём изменения параметров отображения (записью данных в регистры видеоконтроллера) на каждой строке. Но обычно это делается с помощью крайне точно выверенного по времени исполнения кода, или строчных прерываний, а часто и комбинацией этих подходов. Это отнимает довольно много времени процессора, не позволяет менять много параметров отображения за строку, а также может приводить к нежелательным визуальным артефактам, если время выполнения подобных операций продумано недостаточно точно. HDMA же является практически идеальным аппаратным решением столь специфической задачи — можно менять до восьми параметров отображения в каждой строке с максимальной точностью, причём эти параметры могут иметь разрядность от 8 до 32 бит.

Разумеется, видеоконтроллер SNES рассчитан на такие манипуляции и позволяет менять на лету очень многие полезные вещи. Например, сам номер видеорежима — можно смешивать несколько режимов в пределах экрана, выбирая нужный режим для определённых строк, и, например, сделать, чтобы в верхней части экрана на слое обычного фона в обычном режиме отображалась панель статуса, а ниже — эффект в Mode 7. Можно менять параметры наложения цветовой маски на фон, создавая разнообразные градиенты. Можно управлять двумя масками границ экрана, что позволяет формировать выпуклые фигуры и силуэты — например, скрыть изображение плавно уменьшающимся кружком, как в мультиках. И, конечно же, можно менять любые параметры, управляющие отображением слоя фона в Mode 7, в том числе и весь набор параметров аффинного преобразования.

Получив возможность менять смещение и размер слоя фона в каждой строке экрана, мы уже можем получить классический псевдо-трёхмерный эффект уходящей вдаль дороги из Pole Position, Out Run и других спрайтовых гоночных игр, просто постепенно увеличивая масштаб строк по мере продвижения к низу экрана, а повороты можно имитировать, меняя горизонтальное смещение строк.

Графика древности: легендарный Mode 7 - 11

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

Но HDMA позволяет менять не только масштаб, но и поворот слоя, и это открывает возможность перспективной проекции. Изменение и масштаба, и поворота в каждой строке позволяет превратить проецируемую на экран область слоя фона из прямоугольной в трапецеидальную, и таким образом, что и даст на экране эффект перспективы. Поворот слоя позволит вращать камеру, а простое смещение начальной точки в слое — имитировать движение по текстурированной плоскости. Гоночным играм это открывает невиданные ранее возможности — действительно поворачивать вбок и даже разворачиваться. Классический способ рисования дороги из Pole Position и Out Run такими возможностями не обладал.

Графика древности: легендарный Mode 7 - 12

Проекция расширяющегося прямоугольника в слое фона на экран с помощью Mode 7 в игре Street Racer

Хьюстон, проблемки

Казалось бы, плоская трасса спроецирована в перспективу, камера перемещается и вращается — гоночная игра почти готова. Но не всё так просто. В Mode 7 слой фона имеет размер до 128 на 128 тайлов, то есть 1024 на 1024 пикселя. Этого достаточно только для очень небольшой гоночной трассы. Именно такой размер имеют все гоночные треки в играх Super Mario Kart и его клоне Street Racer. В них очень хорошо чувствуется крайне ограниченный размер игрового пространства, но так как это были относительно медленные гонки на картинге, им это не сильно мешало.

Для игр же с высокими скоростями, таких как F-Zero, такой размер совершенно не годится. Для решения этой проблемы используется динамическая подгрузка карты, она постоянно дорисовывается в слой фона за пределами поля зрения игрока примерно таким же образом, как дорисовываются слои фона большого размера в обычных плоских играх. Это позволяет расширить доступное для перемещения пространство, но накладывает принципиальное ограничение — при такой схеме невозможно сделать режим на двух и более игроков, так как трансформируемый слой фона всего один, а игроки могут находиться в разных точках огромного трека.

Помимо отображения трассы, в гоночных играх есть и другие сложности. Одной только проекции фона для такой игры недостаточно. Требуется также проецировать игровые объекты, пересчитывая их координаты из условно трёхмерного пространства в плоскость экрана, что требует относительно ресурсоёмких вычислений (те же самые матрицы для поворота системы координат), и здесь Mode 7 уже никак помочь не может, центральному процессору приходится честно выполнять эту неблагодарную работу.

Так как SNES известна не самой выдающейся производительностью процессора, Nintendo изначально предусматривала аппаратуру для решения этой частной задачи, которая, однако, была исключена из финальной архитектуры основной приставки и выполнена в виде отдельного чипа, устанавливаемого на плату картриджа некоторых игр. Это так называемый DSP1, 16-битный цифровой сигнальный процессор NEC µPD77C25. Микропрограмма DSP1 реализует всё необходимое для высокопроизводительных манипуляций с камерой и объектами в трёхмерном пространстве, в том числе она производит матричные преобразования и проекции координат объектов, а также формирует данные для передачи через HDMA для перспективного проецирования слоя фона Mode 7 для заданной камеры. Этот чип применяется в играх Pilotwings, Super Mario Kart, и многих других, но без него смогла обойтись F-Zero, где количество необходимых расчётов сведено к минимуму дизайном самой игры.

Графика древности: легендарный Mode 7 - 13

Чип Nintendo DSP1

Так как спрайты на SNES не обладают возможностями вращения и масштабирования, если вы видите проекцию трассы и плавно изменяющие размер спрайты гонщиков (как в Super Mario Kart), значит, что-то тут нечисто. И действительно, во всех таких случаях, когда меняющие размер объекты накладываются друг на друга, только один из них может быть сделан с помощью слоя фона в Mode 7. Другой же сделан какой-то иной техникой, например, банально использованием заранее заготовленных всех нужных размеров спрайта, хранимых в памяти картриджа.

Графика древности: легендарный Mode 7 - 14

Заранее заготовленные спрайты одного из персонажей в памяти картриджа Super Mario Kart

Иногда в играх можно видеть вполне обычный слой фона и меняющие размер спрайты. Если здесь задействован Mode 7, на самом деле такой спрайт на экране всего один, и он находится на слое фона. Обычный же слой фона в этом случае собран из спрайтов. Таким образом, например, сделана битва с боссом в Super Mario World.

В редких случаях дополнительные объекты масштабируются на лету программно, как правило, в играх с использованием дополнительного процессора Super FX внутри картриджа, способного делать это достаточно быстро. Они могут комбинироваться и с Mode 7 для вращения фона или крупных объектов. Так реализована тоже битва с боссом, но уже в продолжении Super Mario World — Yoshi’s Island.

Креативы

Благодаря удачному маркетингу и узнаваемой визуальной эстетике, недоступной в тот момент на других платформах, мультиплатформенные игры в версиях для SNES очень часто получали дополнительные вставные уровни с каким-либо использованием этого режима, чтобы демонстрировать превосходство совершенной игровой системы. А некоторые эксклюзивы (всё тот же F-Zero) и вовсе целиком строились вокруг его возможностей.

Где-то это получалось не очень удачно, не прибавляя игровой ценности, и было сделано только ради внесения хоть какого-то отличия от версий для других платформ. Тем не менее, немало игр, в которых применение режима оказалось действительно интересным, или просто симпатичным, и хотя перечислить все интересные случаи использования Mode 7 в играх на SNES не представляется возможным, вооружившись пониманием технической подоплёки происходящего, можно по достоинству оценить устройство хотя бы нескольких из них.

▍ Pilotwings

Пожалуй, наиболее впечатляющее применение возможностей Mode 7 можно наблюдать в одной из самых первых игр для платформы, Pilotwings, поступившей в продажу 1990 году вскоре после выхода самой SNES. Она изначально разрабатывалась для демонстрации новой графической возможности, и под неё также был специально разработан упомянутый выше, устанавливаемый в каждый картридж с копией игры чип DSP1.

Игра представляет собой аркадный авиасимулятор, предлагающий набор тематических игровых сюжетов, включающих взлёты, полёты и посадки на различных летательных аппаратах, от самолёта до ракетного ранца. Плоскость земли убедительно трансформируется согласно перемещениям камеры, а спрайтовые объекты добавляют пространству глубины. Столь эффективное использование Mode 7 позволило маркетинговому отделу уже в начале 1990-х утверждать, что SNES способна на трёхмерную графику, хотя в реальности это была всего лишь проекция плоскости и нескольких спрайтов.

▍ Super Star Wars

Серия из трёх игр Super Star Wars, вышедшая эксклюзивно для Super Nintendo в 1992-1994 годах, в каждой части включала по две сцены, построенные на основе Mode 7: поездку на песчаном скутере и полёт над поверхностью Звезды Смерти в Super Star Wars, битву с шагоходами на планете Хот и полёт между облаков в Облачном городе в The Empire Strikes Back, полёт на глайдере и максимально трипово выглядящий полёт внутри Звезды Смерти в Return of the Jedi.

Лучше всего удалась сцена битвы на планете Хот, в которой помимо традиционной текстурированной плоскости разработчикам удалось сделать имитацию холмов. Как понятно из объяснения выше, при перспективной проекции с помощью Mode 7 в одной строке экрана может отображаться только одна строка слоя фона, и поэтому технология не позволяет реализовать ландшафт переменной высоты, подобный воксельным ландшафтам, который потребовал бы смешивать несколько строк фона разного размера в одной строке экрана.

Единственный способ имитации перепада высот, который был применён в этой и некоторых других играх — техника реализации холмов в классических спрайтовых псевдо-трёхмерных гонках. При этом холм не может вращаться одновременно с текстурой плоскости, и поворот камеры при проходе холма выглядит довольно странно, разрушая иллюзию, но в игровых ситуациях такие повороты происходят относительно редко, а внимание игрока сосредоточено на действии, и это вполне приемлемый компромисс.

И конечно же, каждая из игр серии содержала в себе каноничные, улетающие вдаль титры, для реализации которых Mode 7 подошёл просто идеально.

▍ Castlevania IV

Компания Konami в эпоху 16-битных игр славилась продвинутыми и изобретательными визуальными эффектами, и её игры для SNES не стали исключением.

В игре Castlevania IV 1991 года на первом же уровне с классической сценой попадания героя в замок реализован эффект плавно закрывающегося моста. Игрок при этом сохраняет возможность перемещаться по экрану и начинает соскальзывать от возрастающего наклона поверхности.

В начале уровня используется обычный Mode 1 с тремя слоями фона — два игровых задника и верхняя панель игровой статистики. Как только игрок достигает моста и локация кончается обрывом у воды, происходит быстрый автоматический скролл в сцену, где начинается вращение моста. В ней видеорежим незаметно подменяется на лету, при этом в верхней части с помощью HDMA сохраняется Mode 1 со слоем игровой статистики, а в нижней части устанавливается Mode 7, и теперь уже неподвижная часть сцены реализована спрайтами, а вращающийся мост — слоем фона.

На четвёртом уровне игры есть два примечательных применения Mode 7. Одно интегрировано в игровой процесс для создания невиданной ранее в играх сцены: герой попадает в плавно вращающуюся комнату, и должен перемещаться с пола на стены и потолок по мере вращения. Во втором применении реализована просто визуально красивая сцена — вращающийся тоннель, с текстурой, расширяющейся к верхней и нижней частями экрана. Помня про технические ограничения, можно легко заметить, что в первой сцене остаётся всего один слой фона, хотя в предыдущих и последующих плоских сценах слоёв несколько, а во второй сцене помимо фона есть только падающие платформы, сделанные из спрайтов.

И конечно же, в игре есть карта локаций с простым, но красивым эффектом плавного увеличения. При этом на большом размере изображение не превращается в пиксельную кашу, так как оно изначально было уменьшено, и просто возвращается к исходному размеру. Неподвижные части оформления сверху и снизу экрана выполнены комбинацией слоя фона в Mode 1 с переключением на Mode 7 в центральной с изменяющей размер картой, и спрайтами для элементов, выступающих в область с Mode 7.

▍ Contra III: The Alien Wars

Другая игра Konami, Contra III: The Alien Wars 1992 года, также содержит некоторые интересные визуальные эффекты, реализованные на основе Mode 7. Например, пролетающий с заднего плата в камеру самолёт в первом уровне. Но, пожалуй, наиболее интересным примером является целый игровой режим с видом сверху в двух уровнях игры. В отличие от классической реализации с перемещением игрока по плоской карте, в нём весь уровень целиком вращается вокруг игрока. За счёт креативного использования спрайтов и системы приоритетов также реализована возможность проходить под элементами вращающегося фона (мостиками).

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

▍ Run Saber

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

В этой сцене сам самолёт, конечно, находится на слое фона Mode 7. Герой и элементы взлётной полосы выполнены спрайтами. Иллюзию же подъёма в воздух создаёт цветной градиент на фоне, который не требует использования слоёв фона и достигается путём использования HDMA для записи в регистр цвета задника на каждой строке экрана.

▍ Super Turrican 2

Аналогичным образом устроена и сцена битвы с боссом второго уровня в игре Super Turrican 2 1995 года. Только теперь игрок находится внутри пасти огромного песчаного червя, которая вращается вокруг него.

▍ Wolfenstein 3D

Довольно своеобразное применение для Mode 7 случилось в порте классического трёхмерного шутера Wolfenstein 3D на SNES. Как можно догадаться, находилось и находится немало игроков, считающих, что уж в этой-то игре (и ещё в Doom) точно используется Mode 7. Но из описания устройства должно быть понятно, что эта технология никаким образом не может быть применена для ускорения прорисовки графики в этих играх — разве что если положить телевизор на бок.

И всё же в этой игре она действительно используется, только для совсем других целей. С её помощью организован 256-цветный буфер кадра, выводимый на экран с двукратным увеличением, чтобы получить более крупные пиксели и уменьшить объём программной прорисовки. Таким образом работает даже текстурированная сфера в начале игры, сама она рисуется в видеопамять программно, и выводится на экран увеличенной вдвое. Элементы интерфейса и оружие выводятся поверх основного экрана пониженного разрешения обычными спрайтами, что позволяет повысить их детализацию.

Графика древности: легендарный Mode 7 - 15

Игровое окно и фон интерфейса исключительной квадратности заметно контрастируют с оружием и аватаркой нормального разрешения

Что касается Doom, несмотря на часто встречающиеся слухи, Mode 7 в нём не применяется ни в каком виде. И основной игровой режим, и режим вращающейся карты реализованы программно, причём в разных видеорежимах, и они также используют идею с понижением разрешения, но реализовано это иначе.

Дань моде

При взгляде из сегодняшнего дня можно предположить, что технология Mode 7 вряд ли получила большое распространение за пределами родной платформы, ведь ей на смену очень быстро пришли новые, радикально более мощные решения. Однако у SNES было около трёх лет форы до выхода на рынок поколения игровых систем с полноценной полигональной графикой, и для технического прогресса 1990-х годов это было очень немало. За это время технология успела сформировать особую визуальную эстетику и специфический дизайн игр, полюбившиеся игрокам, и вскоре подобия Mode 7 и аналогичные игры были реализованы и на других, более поздних и мощных платформах.

▍ Atari Lynx

Уже многие годы кое-где можно встретить сенсационные заявления, что портативная игровая система Atari Lynx, вышедшая на год раньше SNES, одновременно со скромным чёрно-белым Nintendo Game Boy, имела возможности, даже превосходящие Mode 7. И хотя возможности этой редкой платформы действительно довольно уникальны, всё же это преувеличение.

Графика древности: легендарный Mode 7 - 16

Без пяти минут Mode 7 на портативке 1989 года в игре Blue Lightning, с плавным увеличением объектов фона, но без вращения камеры

В отличие от коллег по цеху, Lynx не поддерживал аппаратных спрайтов и слоёв фона. Вместо этого его графическая система была построена на основе блиттера, копировщика блоков памяти в растровый буфер, с поддержкой масштабирования и искажения, но не вращения. Это позволяло выводить на экран потенциально неограниченное количество спрайтов, создавая впечатляющие визуальные сцены. Но чем больше спрайтов выводится таким способом на экран, тем медленнее его обновление, и практически получалось показывать не очень-то много объектов со скоростью, далёкой от эталонных для видеоигр 60-ти кадров в секунду.

Тем не менее, креативное использование возможностей Lynx позволило в итоге реализовать и подобную Mode 7 перспективную проекцию, хотя и с низкой частотой кадров. В технической демонстрации 2003 года используется изображение с надписью Atari Lynx Mode 7, отдавая должное предшественнику и одновременно переводящее эту демку в фактический статус наследия.

▍ Sega Saturn

Разумеется, мощные игровые системы следующего поколения, такие как Sony PlayStation, без проблем могли имитировать эффекты, ранее создаваемые при помощи Mode 7. Но наибольший талант в этом проявила вторая по успешности система этого поколения, Sega Saturn.

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

VDP1 растеризует спрайты с поддержкой аффинных преобразований, включая вращение — в определённой конфигурации они же выполняют и роль местной альтернативы полигонам для трёхмерной графики. VDP2 заведует плоскими слоями фона для двухмерных игр, в том числе он способен отображать две бесконечные текстурированные плоскости, аналогичные перспективной проекции в Mode 7.

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

Графика древности: легендарный Mode 7 - 17

Зная устройство видеосистемы, невооружённым глазом можно деконструировать сцену на Mode 7-подобный слой земли, плоские задники и спрайтовые объекты

▍ 3DO Interactive Multiplayer

Аутсайдер поколения, система 3DO Interactive Multiplayer, также использовала аппаратный растеризатор-блиттер с поддержкой аффинных и перспективных преобразований. Его реализация, однако, была весьма специфической и очень далека от оптимальной — каждый пиксель всегда прямоугольного источника обязательно рисуется в приёмник, даже если в результате трансформаций они накладываются друг на друга. Это вылилось в не очень производительную полигональную графику, склонную к разнообразным артефактам. Этих возможностей, тем не менее, хватило, чтобы подарить миру серию игр Need For Speed, стартовавшую в роли эксклюзива для этой платформы.

Графика древности: легендарный Mode 7 - 18

Один из главных хитов платформы 3DO, игра Return Fire, по конструкции сцен недалеко ушла от SNES — карта в виде бесконечной плоскости с текстурой, с нечастыми вкраплениями полигональных деталей и очень низкой частотой кадров

▍ Sega CD

Аппаратное дополнение Sega CD 1991 года сделало возможным аналогичные эффекты и на Sega Genesis. Это устройство по сути являлась более мощной системой, чем та, которую она дополняла, и содержало как собственный более быстрый процессор, так и аппаратный блиттер, способный к растеризации изображений с поворотом и масштабированием. Однако после этого полученный результат требовалось передавать в видеопамять основной системы, и с пропускной способностью, ограниченной примерно 7 килобайтами данных за один телевизионный кадр, речи о стандартных 60 кадрах в секунду не шло — чаще это было около 15 кадров. Наличие такой возможности позволило в 1993 году реализовать Mode 7-подобный бонусный уровень в игре Sonic the Hedgehog CD, и этим подлить масла в огонь «консольных войн».

▍ Sega Genesis

Долгое время считалось, что сама оригинальная Sega Genesis без аппаратных дополнений не способна реализовать подобный визуальный эффект, что служило весомым аргументом в спорах о графическом превосходстве платформ. Но в 2010 году разработчики изрядно нашумевшей ролевой игры Pier Solar and the Great Architects смогли реализовать программный аналог псевдо-трёхмерной карты мира, аналогичной тем, какие встречались во множестве игр аналогичного жанра для SNES. Эта реализация имела довольно низкое разрешение, но неплохую скорость обновления экрана.

В 2014 году другой энтузиаст, Gasega68K, создал ряд впечатляющих технологических демонстраций для Sega Genesis, в том числе две, воспроизводящие визуальную часть игр F-Zero и Super Mario Kart, также с пониженным разрешением, но более высокой частотой кадров. Это вряд ли поставило точку в спорах, но всё же показало, что и обычная Sega Genesis родом из 1988 года всегда была потенциально способна на нечто подобное, хотя и не с такой высокой детализацией и плавностью.

▍ Клоны Super Mario Kart

Успех игры Super Mario Kart привёл к появлению множества его клонов и впоследствии сформировал целый жанр гонок на картингах с коллективом персонажей из какой-нибудь серии игр, поупражняться в котором с тех пор не побрезговал, похоже, ни один мало-мальски популярный франчайз.

Ранние клоны воспроизводили в том числе и визуальную эстетику Mode 7, с плоским рисунком трассы и редкими спрайтовыми объектами. Парадокс этого явления в том, что выпускались все эти клоны на фоне уже вышедших на рынок игровых систем следующего поколения, способных на куда более сложную графику, своеобразный карго-культ в попытках воспроизвести чужой успех.

Среди довольно удачных клонов на самой SNES, копирующих эту формулу, был уже упомянутый Street Racer 1994 года, который вскоре был перенесён на целый ряд платформ, с использованием наиболее эффективной технологии имитации трёхмерной трассы на каждой из них. Так, на SNES использовалась реализация на основе Mode 7, практически такая же, как в оригинальном Super Mario Kart, но с более яркой, красиво прорисованной графикой и без необходимости применения DSP1, а на Sega Saturn это была комбинация Mode 7-подобной плоскости, рисуемой VDP2, и дополненной спрайтами с полигональными объектами, отображаемыми VDP1.

В 1994 году небезызвестная Apogee Software (Duke Nukem) выпустила игру Wacky Wheels для MS-DOS, где формула Super Mario Kart была воспроизведена с программной реализацией Mode 7-подобного режима. Исходный код этой игры также был использован в выпущенном примерно тогда же ещё более очевидном клоне Skunny Kart от Copysoft. Программная реализация требовала довольно производительного процессора для получения приемлемой частоты кадров.

Другой популярный клон, BC Racers, также от небезызвестной Core Design (Tomb Raider), вышел в 1994 году для Sega CD, продемонстрировав дополнительные аппаратные способности этой платформы (не очень успешно), а в 1995 году был портирован на MS-DOS, 3DO и Sega 32x. Реализация на всех этих платформах примерно одинаковая — Mode 7-подобная плоская текстурированная трасса и спрайтовые объекты. Различались версии игры в основном частотой кадров, которая, впрочем, на грани фола в любой версии, кроме PC с мощным процессором.

В 1995 году вышла игра Atari Karts для обладающей, согласно рекламным заявлениям, потрясающей 64-битной мощью игровой системы Atari Jaguar. От оригинального Super Mario Kart эта игра отличается реализацией лёгкой холмистости поверхности и лучшей детализацией текстуры трассы, но в целом формула оригинала соблюдается неукоснительно.

▍ Game Boy Advance

Сама Nintendo реализовала возможности, аналогичные Mode 7, в своей портативной игровой системе следующего поколения — Game Boy Advance. Номера видеорежимов у этой системы, конечно, другие, но теперь аффинные преобразования стало возможным применять к спрайтам и слоям фона во всех режимах тайловой графики. Эти возможности можно было задействовать для получения перспективной проекции аналогично реализациям на SNES, но теперь уже получить проекцию до двух независимых слоёв фона одновременно, и до 32 аппаратно масштабируемых спрайтов в дополнение к этому.

В результате на этой платформе было представлено множество гоночных игр в визуальной эстетике, очень схожей с играми на SNES, только с лучшей детализацией, а также немалое количество прочих Mode 7-подобных визуальных эффектов.

Наследие Mode 7 отразилось на Game Boy Advance и в другом, несколько неожиданном ключе. Такое название выбрала себе группа хакеров, сделавшая серию крактро для игр на этой платформе в 2001-2004 годах.

Заключение

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

Автор: Александр Семенов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js