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

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

▍ Содержание



▍ Какие же это кубики


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

Первые шаги пиксельной графики — игра Space Invaders 1978 года выпуска

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

Пиксели достигли совершеннолетия — игра Metal Slug 1996 года выпуска

К тому времени возникла мода на ретро, и на фоне успеха переизданий хитов прошлого в цифровом виде, некоторые крупные разработчики выпустили новые игры, выполненные в классической пиксельной графике (Mega Man 9, Contra ReBirth). Их успех оценили и инди-разработчики. Они с радостью приняли пиксельную графику на вооружение, ведь зачастую её проще и дешевле создавать силами маленького коллектива художников (если речь не идёт о пиксельных шедеврах AAA-класса типа Metal Slug). С тех пор вышли сотни успешных пиксельных проектов, хотя далеко не всем из них удалось уловить эстетику игр прошлого, и многие стали по-своему интересной, но весьма вольной фантазией на тему.

Независимые пиксели современности — игра Shovel Knight 2014 года выпуска

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

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

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

▍ Текстовые видеорежимы


Исторически визуализация результатов работы компьютера начиналась далеко не с привычной нам сейчас графики. Поначалу это были просто мигающие лампочки, затем телетайп — печатное устройство, выдающее текстовую распечатку на бумаге. Со временем телетайп преобразовался в компьютерный видеотерминал, делающий всё то же самое, но на экране, и главной его особенностью, унаследованной от электромеханического предшественника, была работа исключительно в текстовом режиме, причём строго последовательная, без возможности поменять ранее отображённую на экране информацию (переместить курсор), заложенная глубоко в его устройстве. Именно в таком виде работа с экраном была реализована в одном из первых в истории персональных компьютеров, Apple I (1976). Легко догадаться, что отсутствие возможности вывести информацию в заданное место на экране делало практически невозможным создание динамических видеоигр.

Игра Lunar Lander на Apple I, 1976 год. Этот текст печатался на экране примерно 30 секунд

Текстовый видеорежим позволяет оперировать только целыми символами на экране. За счёт этого он выгодно отличается экономным расходом оперативной памяти и времени процессора — очень ценных ресурсов в микрокомпьютерах конца 1970-х годов, когда оперативная память стоила очень дорого. Чтобы отобразить страницу текста на экране, нужно всего один-два килобайта оперативной памяти. Слабый процессор без особых проблем справится с обработкой такого количества данных для быстрого обновления экрана. Платой за эти удобства становится некоторое усложнение устройства видеоадаптера, или видеокарты — оно должно уметь формировать картинку из символов в ПЗУ и текста в ОЗУ на лету, во время прохода луча по растру.

Commodore PET показывает знаменитый лабиринт из слэша и бэкслэша. Фото CC-BY Dave Ruske

Ранние реализации текстовых видеорежимов в микрокомпьютерах, например в Commodore PET (1977), позволяли отображать одну или несколько страниц текста размером 40x25 или 80x25 монохромных символов, расположенных по регулярной сетке — в так называемых «знакоместах». Изображения символов хранились в небольшом ПЗУ, закладывались при изготовлении компьютера, и их нельзя было изменять программно. Текстовая страница стала доступна процессору целиком, и теперь он мог обновить текст в любом участке экрана, а значит, стали возможными какие-никакие игры. Для хоть какой-то минимальной визуальной манипуляции изображением в ПЗУ шрифта на том же PET хранилось большое количество псевдографических символов, а каждый символ был представлен в двух вариантах — нормальном и инверсном изображении. Таким образом один бит в 8-битном коде символа работал на атрибут инверсии, и это можно считать началом концепции «атрибутов»: набора бит, устанавливающих опции отображения для отдельной фиксированной области экрана. Как правило, это был выбор цвета, и атрибуты назывались «цветовыми», но иногда присутствовали и другие опции.

Игра Karateka в версии для IBM PC с видеоадаптером CGA, 1986 год

Первые видеоадаптеры строились на логических микросхемах, но так как задача отображения текста стала типовой, появились специализированные БИС для её решения, такие как Motorola 6845 и Intel 8275. Они добавили более широкую поддержку атрибутов: теперь можно было задавать символам на экране мигание, подчёркивание, повышенную яркость и даже смену цвета. На контроллере 6845 был построен видеоадаптер CGA для платформы IBM PC (1981), в котором реализация атрибутов символов обрела свою современную, наиболее практичную форму: каждому символу на экране отводится два байта, один на 8-битный номер (код) символа в шрифте, другой на цвет символа и его фона, по четыре бита, 16 цветов. При этом можно было выбрать режим, в котором количество цветов фона ограничивалось до восьми, а оставшийся бит работал как атрибут мигания символа — забавный рудимент, вероятно сохранившийся со времён, когда видеотерминал никак не мог вернуться к ранее отображённому тексту, чтобы реализовать мигание программным способом.

▍ От текста к графике


Определяющим свойством классического графического видеорежима является возможность программно изменять цвет каждого отдельно взятого пикселя на экране — то, что называется all points (или pixels) addressable. Поэтому для работы с произвольными растровыми изображениями значительно больше памяти. Если текстовый режим, отображающий на экране 40x25 символов размером 8x8 точек, требует только 1000 байт ОЗУ, графический монохромный режим такого же разрешения потребует уже 8000 байт.

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

Freeway, одна из встроенных игр приставки RCA Studio II, 1977 год. Такая вот графика

Начинался переходный процесс довольно просто. Первые полностью графические режимы были монохромными или очень малоцветными, и не имели никаких опций отображения: один или два бита просто задавали цвет каждой точки. Например, микросхема видеоконтроллера RCA CDP1861, на основе которой была построена одна из первых в истории игровых приставок RCA Studio II (1977), формировала графический растр размером от 64 на 32 до 64 на 128 монохромных пикселей (всегда 64 пикселя в ширину, с разным количеством строк), один бит на точку, что требовало для описания экрана всего лишь 256-1024 байта оперативной памяти. Четырёхцветный графический режим CGA использовал два бита на точку, и для разрешения 320x200 требовалось уже 16000 байт памяти, что создавало проблемы со скоростью перерисовки экрана в эпоху процессора Intel 8088, работающего с частотой около 4.7 МГц, и сильно затрудняло создание динамичных игр с плавной анимацией.

Игра Alley Cat для IBM PC с видеоадаптером CGA, 1984 год

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

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

Первый подход — полноценные графические растровые режимы с ограниченным цветовым разрешением. Как правило, они позволяли отображать графику (относительно) высокого разрешения без ограничений на её содержание, с адресацией всех индивидуальных пикселей, но с большим расходом памяти, и, как следствие, часто со значительными ограничениями на отображение цвета, на разрешение и на скорость обновления экрана. Этот подход применялся в основном в домашних компьютерах конца 1970-х и начала 1980-х, а также в некоторых игровых приставках, и со временем стал единственным, используемым в современности.

Второй подход — так называемая тайлово-спрайтовая графика, лежащая в основе подавляющего большинства игровых приставок третьего и четвёртого поколения, с начала 1980-х до середины 1990-х годов, а также аркадных игровых автоматов тех же лет. Это компромиссное решение, накладывающее значительные ограничения на визуальное содержание, но позволившее снизить стоимость устройств и при этом повысить их производительность. По сути это более продвинутый текстовый режим: изображения символов шрифта заменили на графические элементы фона и назвали их «тайлами», добавили больше цветов и возможность попиксельной прокрутки изображения, но сохранили регулярную сетку и ограниченное количество символов-блоков, из которых строится картинка. Для подвижных элементов добавили аппаратную поддержку «спрайтов» — небольших изображений, накладываемых поверх слоя фона (например, курсор мыши) без изменения находящегося под ними фона.

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

▍ ZX Spectrum


Компьютер ZX81 и лучшее, что он мог показать в годы своей популярности. Фото CC-BY babbagecabbage

Первые модели компьютеров британской Sinclair Research, ZX80 и ZX81, выпущенные в 1980-1981-м годах, обладали только монохромным текстовым видеорежимом 32x24. Очень демократичная цена была решающим конкурентным преимуществом всей продукции компании, поэтому в целях удешевления конструкции компьютер в базовой конфигурации имел всего один килобайт оперативной памяти, три четверти которого было занято буфером текстового экрана, а центральный процессор активно участвовал в формировании изображения, что очень сильно сказывалось на производительности.

Компьютер ZX Spectrum. Фото CC-BY Nico Kaiser

Для следующей модели, ZX Spectrum, вышедшей на рынок в 1982 году, инженерам предстояло реализовать сразу две новые возможности: отображение графики и цвета. Наличие возможности отображения 16-цветной графики даже было вынесено в название и символику компьютера (радужный уголок). Так как центральный процессор остался тем же самым, и хотя он был освобождён от участия в формировании видеосигнала, нужно было обеспечить достаточно быстрый вывод графики, хотя бы текста, при этом не усложняя и не удорожая устройство.

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

Одна из ранних хитовых игр для ZX Spectrum 16K, Jetpac. 1983 год

Нетрудно посчитать, что если бы каждый пиксель изображения мог иметь свой цвет, один из 16, потребовался бы видеобуфер размером в 24 килобайта — сильно больше, чем весь объём оперативной памяти младшей модели ZX Spectrum’а. Однако разработчики Sinclair смогли обойтись всего 6.5 килобайтами, что заодно решило и проблему скорости обновления экрана. Сделали они это, организовав структуру видеобуфера по подобию текстового экрана.

ZX Spectrum имеет единственный монохромный графический режим с разрешением 256 на 192 точки, что при использовании шрифта 8x8 точек совпадает с текстовым разрешением прежних моделей, 32 на 24 символа. Для описания такого экрана достаточно 6144 байт. Раскрашивание же изображения производится подобно текстовому экрану, с помощью байтов атрибутов, назначенных каждому блоку-знакоместу размером 8x8 пикселей — дополнительные 768 байт данных. Атрибут задаёт один из восьми возможных цветов для всех включённых пикселей в знакоместе, ещё один из восьми цветов для всех выключенных пикселей, а также содержит общий бит повышенной яркости и бит мигания.

Загрузочный экран игры Midnight Resistance, 1990 год. Буйство цвета и кажущееся отсутствие ограничений

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

Если рассмотреть тот же экран с увеличением, ни в одном блоке 8 на 8 пикселей не будет больше двух цветов одновременно

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

Процесс загрузки с кассеты картинки из игры Saboteur, 1986 год

Такая, весьма странная на первый, второй и многие последующие взгляды структура экранной памяти с чередованием полосок на самом деле имеет смысл. Она довольно эффективна при программной отрисовке текста: для перехода на соседнее знакоместо по горизонтали достаточно операции INC/DEC L, а для перехода внутри знакоместа на строку пикселей ниже или выше — INC/DEC H. Впрочем, при реализации динамической графики в играх это скорее мешало, чем помогало.

▍ Spectrum и клэшинг


Так как ZX Spectrum не имеет аппаратной поддержки спрайтов, игры вынуждены программно отрисовывать все подвижные объекты в видеобуфере, накладывая несколько разноцветных изображений друг на друга. Как следствие, приходится выбирать, какие именно цвета (фона или одного из объектов) должны отображаться в каждом из блоков. Эта проблема в рамках платформы имеет устоявшееся название «клэшинг» («attribute clash», конфликт атрибутов). Аналогичная проблема присутствует и на многих других 8-битных платформах, иногда она известна под названиями «color clash» (конфликт цвета) или «color spill» (протечка цвета).

Всенародно любимый Диззи страдает от жестокого клэшинга

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

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

Robocop на ZX Spectrum, 1988 год. Никакого цвета в игровом окне — никакого клэшинга

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

Яркая цветная графика в сочетании с чёрными коридорами для одноцветных игровых объектов в игре Firelord, 1986 год

Наиболее эффективная техника избежания клэшинга при использовании чёрного фона была применена в играх Exolon, Cybernoid, Rex, Jack the Nipper II, и ряде других. В них все подвижные объекты при взаимодействии с элементами фона рисуются как бы позади этих элементов, а если точнее — в знакоместах, где есть фоновое изображение, части спрайтов не выводятся вовсе. Это полностью устраняет конфликт атрибутов и смотрится довольно неплохо, хотя и создаёт квадратную маску, затеняющую спрайт в месте пересечения.

Игра Exolon 1987 года выглядит яркой и цветной, ловко маскируя клэшинг

Когда спрайт персонажа пересекается с любым цветным элементом фона, он просто не выводится в этом знакоместе

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

Ряд игр с плавной прокруткой экрана также вполне успешно избегал конфликта атрибутов в фоновой графике за счёт особого визуального дизайна. Например, при горизонтальной прокрутке фон раскрашивался полосками шириной во весь экран, а переходов цвета в пределах строки экрана просто не было. Или же между рядом расположенными элементами разных цветов всегда находился пропуск размером в одно знакоместо. Конечно, оставался цветовой конфликт с подвижными объектами, но, например, в R-Type эту проблему обошли, совместив плавную прокрутку фона с перемещением всех спрайтов по целому знакоместу. А в игре Zynaps применили технику, аналогичную Exolon, и хотя некоторое количество клэшинга в игре всё же есть, работает это очень неплохо.

R-Type 1989 года эффективно сочетает прокрутку цветного фона с цветными спрайтами, почти без клэшинга

Игра Zynaps 1987 года также весьма успешно скрывает клэшинг, хотя и не так хорошо, как R-Type

Достаточно спорный, но очень эффективный способ борьбы с конфликтом атрибутов был реализован в играх Savage, Astro Marine Corps, Teenage Ninja Mutant Turtles, и в отечественном Буратино. В них перемещение вообще всех объектов — и фона, и спрайтов — происходило по целому знакоместу, то есть с шагом 8 пикселей. Это создавало довольно неприятное на вид дёрганое движение, но позволяло максимально раскрасить и фон, и персонажей. Для уменьшения заметности квадратной маски, возникающей вокруг персонажей при таком способе наложения их на фон, сами персонажи рисовались максимально квадратно-гнездовым способом, чтобы их знакоместа или были почти заполнены графическим содержанием, или оставались пустыми.

Буйство цвета в Teenage Mutant Hero Turtles 1990 года. Контуры атрибутов видны на цветном фоне при повышенной яркости в спрайтах, но это едва ли бросается в глаза

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

▍ TMS9918 и все-все-все


Компьютер Texas Instruments TI-99/4. Фото stiefkind, PD

В 1979 году компания Texas Instruments выпустила на рынок первый в мире 16-битный персональный компьютер собственной разработки, TI-99/4. Эта весьма дорогая машина обладала выдающимися для своего времени характеристиками — цветной графикой, большим объёмом ОЗУ, трёхканальным звуковым синтезатором. Сам компьютер по ряду причин не имел успеха, однако аппаратные решения, лежащие в его основе, оставили значительный след в индустрии.

Одно из этих решений — видеоконтроллер TMS9918. Объём видеопамяти, необходимой для его работы, составлял 16 килобайт (восемь микросхем динамического ОЗУ с организацией 16384x1 бит). Вероятно, это весьма дорогостоящее в 1979 году решение повлияло на коммерческий провал самого TI-99/4, но смогло стать успешным в составе десятков других платформ в начале 1980-х, когда память стала стоить дешевле — достаточно упомянуть приставки ColecoVision (1982), Sega SG-1000 (1983) и семейство компьютеров MSX первого поколения (1983).

Приставка ColecoVision 1982 года выпуска всё ещё вызвает интерес. Фото CC-BY Kuba Bożanowski

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

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

Во-вторых, в TMS9918 была реализована концепция аппаратных спрайтов — маленьких подвижных изображений, которые отображались поверх графического изображения на лету, без программного врисовывания их в растровый буфер. Такие спрайты существовали и ранее, например в приставке Atari 2600. Но она могла отображать всего два спрайта, которые представляли собой регистры, куда нужно было помещать графику прямо во время прохода луча развёртки по растру. TMS9918 может отображать 32 спрайта размером 8 на 8 или 16 на 16 пикселей, и они представлены в виде простого списка их координат и указателей на графику в видеопамяти, что значительно удобнее в использовании. Именно такая архитектура стала стандартом для множества аркадных автоматов и игровых приставок в дальнейшем.

Пожалуй, самое интересное, что в архитектуре TMS9918 оказался буквально запечатлён момент перехода от чисто текстовых видеорежимов к графическим. Дело в том, что в изначальной версии контроллера, TMS9918 без букв, было реализовано только три видеорежима: два текстовых и один псевдографический, очень низкого разрешения. Чуть позже, примерно в 1981 году, появилась версия TMS9918A (именно её применением отличается компьютер TI-99/4A от предшественника без буквы A в названии), в которой на основе одного из текстовых режимов был реализован дополнительный графический режим высокого (нормального) разрешения. Именно он является наиболее интересным, но для понимания момента перехода рассмотрим их все.

Режим 0: монохромный текстовый, 40 на 24 символов. Интересной особенностью этого режима является размер символов шрифта, 6x8 пикселей. Это даёт итоговое разрешение 240 на 192 пикселя. Шрифт при этом загружаемый, что позволяет ограниченно отображать графику, однако для игр этот режим не очень подходит, так как в нём недоступны ни цвет, ни аппаратные спрайты.

Текстовая игра Yobai для компьютера MSX, использующая режим 0, 1983 год

Режим 1: цветной текстовый, 32 на 24 символа с размером символов 8x8, что даёт разрешение 256 на 192 пикселя, такое же как у ZX Spectrum. Шрифт также загружаемый, состоящий из 256 символов размером 8 на 8 точек. В этом режиме реализовано очень специфическое ограничение на цвет. Группы по 8 символов шрифта имеют один общий байт атрибута, определяющий их цвет, независимо от места их использования на экране. То есть можно покрасить все цифры одной комбинацией из двух цветов (фона и рисунка), все буквы — другой комбинацией, а специальные символы — третьей. В этом режиме также доступны аппаратные спрайты, и, по сути, это концептуальный предвестник тайлово-спрайтового режима на более поздних платформах, таких как, например, Famicom.

Встроенный стартовый экран ColecoVision демонстрирует цветной текстовый режим TMS9918. Шрифт, конечно, не обязан состоять только из букв 8 на 8, это может быть и графика букв покрупнее

Режим 2: цветной графический режим, появившийся в версии 9918A. Основной режим для игр. Фактически это немного изменённый режим 1, такой же текстовый экран 32 на 24 символа. Однако, в нём доступен не один, а три разных шрифта по 256 символов размером 8x8 точек, каждый назначен на свою треть экрана. Это открывает возможность персональной адресации каждой точки экрана. Также действуют отличающиеся цветовые ограничения: комбинация из двух цветов задаётся для каждой 8-пиксельной строки каждого символа каждого из шрифтов. Говоря иначе, размер цветового атрибута составляет 8x1 пиксель, а видеопамять представлена буфером 32x24 байта для индексов символов, тремя наборами по 2048 байт для трёх шрифтов. И ещё тремя 2048-байтными наборами атрибутов этих шрифтов. Итого 13 килобайт из 16 доступных — довольно много, учитывая невысокую скорость работы с видеопамятью. Тем не менее, структура экрана с небольшими атрибутами снизила проблему клэшинга, а столь хитроумная организация видеопамяти при креативном использовании позволяет оптимизировать манипуляции с видеопамятью по скорости и реализовать плавный попиксельный вертикальный скроллинг без цветовых артефактов.

Порт аркадной игры BurgerTime 1982 года использует атрибуты 8x1 с чувством стиля

Игра Pippols 1985 года для MSX весьма ловко применяет особенности графического режима для организации попиксельной вертикальной прокрутки без клэшинга

Режим 3: очень странный видеорежим, в котором можно видеть отголоски псевдографического режима Intel 8275, и который крайне редко использовался в играх. В нём доступно разрешение 64 на 48 крупных псевдо-пикселей, состоящих из четырёх блоков 4 на 4 реальных пикселя. При этом структура экрана по-прежнему реализована в виде текстового экрана 32 на 24 символа и шрифта. В текстовом буфере задаётся номер символа, а сам символ вместо изображения содержит два байта, определяющих цвет каждой из четырёх псевдо-точек, причём для каждой из четырёх строк символов это разные два байта из восьми. Итого экран описывается структурой из 1728 байт (768 байт текстового буфера и 1536 байт цветовой информации). Это позволяет назначать каждому псевдо-пикселю собственный цвет, но ценой очень низкого разрешения и весьма запутанной организации видеопамяти.

Единственный пример использования режима 3 удалось найти в игре Smurf Paint'n Play для ColecoVision, 1984 год. Детальные изображения поверх блочной графики выводятся аппаратными спрайтами

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

Титульный экран версии игры Gradius 1986 года для MSX демонстрирует цветовую детализацию без заметного клэшинга

В увеличении видно, что ни в одной полоске 8x1 нет больше двух цветов

Впоследствии видеорежимы TMS9918 были скопированы и расширены в видеоконтроллерах разработки компании Yamaha, которые, помимо прочего, легли в основу приставок компании Sega — Master System и Sega Genesis. В частности, в Master System в целях обратной совместимости с играми для SG-1000 и SC-3000 были сохранены режимы 1-3.

▍ Commodore 64


Компьютер Commodore 64. Фото CC-BY France1978

Интересное слияние чисто текстовых, чисто графических и тайлово-спрайтовых режимов, иллюстрирующее переходный период между разными графическими архитектурами, оказалось запечатлено и в прямом, гораздо более продвинутом конкуренте ZX Spectrum — компьютере Commodore 64, также вышедшем на рынок в 1982 году.

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

Также Commodore 64, наряду с ранними компьютерами Atari и некоторыми режимами Amstrad CPC, является одним из ярких представителей обладателей, так сказать, широко-пиксельной графики. В некоторых графических режимах используются пиксели двойной ширины, что снижает горизонтальное разрешение экрана вдвое, но позволяет использовать тот же объём памяти для хранения более разноцветной графики. Это также создаёт особую визуальную эстетику, особенно в сочетании с весьма специфической палитрой C64.

Кратко рассмотрим все основные стандартные видеорежимы.

Режим 0: текстовый 40x25 высокого разрешения (320x200). Может отображать до 256 загружаемых в ОЗУ символов размером 8 на 8 точек. У каждого знакоместа есть байт атрибута, в котором можно установить цвет пикселей в каждом знакоместе, выбрав один из 16-ти доступных цветов. Цвет фона у всех символов одинаковый. Для описания экрана используется 2000 байт. Благодаря наличию в стандартном шрифте компьютера псевдографических символов PETSCII, этот режим оказывается полезен для довольно интересно выглядящей псевдографики, которую можно эффективно анимировать силами не самого производительного процессора, и в нём иногда даже делаются демо и игры.

Относительно современная игра Digiloi, очень эффектно демонстрирующая потенциал PETSCII-псевдографики в текстовом видеорежиме, 2018 год

Режим 1: текстовый 40x25 низкого разрешения (160x200) с повышенной глубиной цвета. Это режим с широкими пикселями, за счёт чего становится возможным отображать многоцветный шрифт, до четырёх цветов на символ, однако с весьма специфическими ограничениями. Три из четырёх цветов задаются глобально для всего экрана, и только четвёртый цвет берётся из атрибута символа, причём это может быть только восемь старших (с индексом выше 8) цветов из доступных 16-ти. Объём экранной памяти прежний — 2000 байт. Этот режим также иногда используется в играх с прокруткой экрана, так как он требует меньше манипуляций с памятью, и приближает видеосистему к тайлово-спрайтовой концепции, принятой на игровых приставках.

Одна из лучших игр платформы, Uridium 1986 года, использует текстовый режим с широкими писелями для того, чтобы получить максимально плавную и быструю прокрутку экрана, хотя и ценой довольно малодетализированной картинки

Режим 2: графический режим высокого разрешения (320x200). Этот режим очень похож на графический режим ZX Spectrum. В нём также есть знакоместа размером 8 на 8 точек, и каждому из них можно назначить цвет фона и цвет изображения, любые из 16-цветной палитры. Отличия заключаются в размерах экрана, отсутствии атрибутов яркости и мигания, и, конечно, в цветах палитры. Объём экранной памяти составляет 9000 байт — 8000 байт на пиксели и 1000 байт на их атрибуты. Этот режим часто использовался при портировании мультиплатформенных игр с того же ZX Spectrum, за счёт чего они выглядят весьма похоже. Однако, в руках умелых художников немного другая палитра и техники рисования при тех же ограничениях создают весьма интересную визуальную эстетику, заметно отличающуюся от работ художников на Спектруме.

Почти ZX Spectrum, но всё же другой: интерпретация тех же атрибутных ограничений, но в другой палитре в игре Dizzy: Prince of the Yolkfolk,1991 год

В каждом знакоместе 8 на 8 пикселей — не более двух разных цветов

Режим 3: графический режим низкого разрешения (160x200) с повышенной глубиной цвета. Самый характерный для Commodore 64 режим, являющийся его визитной карточкой: действительно многоцветная графика с широкими пикселями. В этом режиме есть возможность использовать четыре цвета в каждом знакоместе, любых из 16-цветной палитры, однако, один из цветов общий для всех знакомест — это цвет фона. Несмотря на весьма большой объём экранной памяти, 10000 байт (8000 байт пиксели, 2000 байт атрибуты), он также довольно активно использовался в программах для C64.

Классический C64 с его широкими пикселями в заставочной картинке одной из лучших игр платформы — Turrican, 1990 год

В каждом знакоместе 4 на 8 пикселя — не более четырёх разных цветов

Так как Commodore 64 со временем стал главной платформой демосцены — направления технического творчества, суть которого во многом заключается в достижении того, что ранее казалось невозможным в рамках ограниченных аппаратных возможностей — с годами энтузиасты придумали множество нестандартных, компромиссных видеорежимов, смешивающих имеющиеся возможности и эксплуатирующие недокументированные особенности аппаратуры. В том числе это позволило снять некоторые цветовые ограничения — например, разрешить использование любых 16 цветов в каждом пикселе в режиме 160x200, и отображать весьма впечатляющую по меркам платформы графику, хотя обычно и ценой задействования всех вычислительных ресурсов процессора.

Более современная графика на C64 в графическом режиме высокого разрешения — Obey the Machine, Archmage, 2009 год

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

▍ Famicom, NES и Денди


Игровая приставка Family Computer. Фото CC-BY MiNe

Считается, что инженеры Nintendo оглядывались именно на архитектуру TMS9918 (и на общую архитектуру построенной на нём игровой приставки ColecoVision) при создании графического контроллера для собственной приставки Famicom (1983), известной на Западе как Nintendo Entertainment System (NES), и в наших краях под названием «Денди». В отличие от западных коллег, они не стали размениваться на довольно неуклюжий набор неудобоваримых, компроммисных видеорежимов с различными нетривиальными ограничениями в каждом, и сделали всего один режим, в котором окончательно сформировали концепцию тайлово-спрайтовой графики. Эта архитектура оказалась достаточно удачной, чтобы на протяжении десяти лет на Famicom выходили всё более визуально впечатляющие игры, а аналогичная архитектура была реализована во всех игровых приставках конкурентов, как текущего, так и следующего поколения.

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

Максимально классический скриншот игры для Famicom. Здесь герой представлен слоем спрайтов, а фон соответственно слоем фона

Слой спрайтов похож на спрайты контроллера TMS9918, но сами они немного мельче — 8 на 8 или 8 на 16 точек, зато многоцветные, по четыре цвета на точку, ещё и с выбором одной из четырёх программируемых палитр. На экране их может быть до 64 штук, и хотя это самый ценный ресурс на приставке, которого всегда не хватает, даже с таким количеством мелких спрайтов разработчики игр добивались очень впечатляющих результатов.

Как и у всех платформ с поддержкой аппаратных спрайтов, у Famicom есть ограничение на количество одновременно отображаемых спрайтов в одной строке экрана — до 8 штук. Если превысить это количество, лишние спрайты просто не отображаются. Чтобы обойти эту проблему, в играх повсеместно реализовано перемешивание порядка спрайтов, за счёт чего при превышении лимита они не исчезают, а начинают перемигиваться. В играх это случается довольно часто, и этот характерный визуальный артефакт стал одной из узнаваемых визуальных особенностей платформы.

Перемигивание спрайтов в игре Super C, 1990 год

Слой фона по сути представляет собой текстовый экран с видимой областью 32 на 30 символов, с символами размером 8 на 8 пикселей, из набора в 256 символов. От обычного текстового режима его отличает наличие плавной прокрутки, размер буфера текста — он больше чем экран, и может иметь размер 64 на 30 либо 32 на 60 символов. Как и спрайты, символы четырёхцветные. Присутствуют и атрибуты для дополнительной раскраски символов фона путём выбора одной из четырёх палитр, отдельных от палитр спрайтов. Всего Famicom может отображать до 25 цветов на экране: у всех символов один общий цвет фона, у всех спрайтов один цвет всегда прозрачный, четыре палитры с тремя разными цветами для символов, и четыре палитры с тремя разными цветами для спрайтов.

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

В отличие от многих других платформ, размер атрибутов не равен размеру символа: он применяется к группе из четырёх символов, то есть блоку 16 на 16 пикселей. Эта небольшая деталь очень существенно повлияла на визуальную эстетику большинства игр платформы, особенно ранних — это хорошо заметно в Super Mario Bros, Bomberman, Lode Runner, Battle City и многих других. Из-за небольшого количества графических элементов, которые можно одновременно отображать на экране, разработчикам было проще не пытаться замаскировать переходы из одного набора цветов в другой, а напротив, сделать эти переходы явными, и строить уровни из чётко очерченных блоков размером 16 на 16 или 32 на 32 пикселя. Со временем художники научились эффективнее использовать доступные ресурсы и маскировать эти переходы, но в целом такой квадратно-гнездовой способ построения игровых карт стал одной из наиболее визуально заметных особенностей платформы.

Явно заметная сетка 16 на 16 пикселей в Metroid 1986 года

Сетка 32 на 32 пикселя в Mega Man 1987 года

Видеоконтроллер имеет открытую системную шину, выведенную на разъём картриджа, что дало системе большую долю гибкости, и, вероятно, способствовало поддержанию её актуальности на протяжении десяти лет. На плате картриджа может использоваться ПЗУ символов шрифта, либо ОЗУ с подгрузкой символов из ПЗУ кода, либо схема управления ПЗУ большого размера, что позволяет мгновенно подменять весь набор символов или его часть, и таким образом увеличивать количество одновременно отображаемых на экране символов либо анимировать слой фона. Наиболее продвинутые аппаратные расширения способны даже увеличить количество символов в шрифте до 16384, и уменьшить размер атрибута до 8x8. К сожалению, использование этих решений в реальных играх было очень ограничено, так как появились они под конец жизненного цикла приставки, и были относительно дорогостоящими.

Все эти оптимизации привели к тому, что с одной стороны Famicom очень плохо справляется с произвольными визуальными сюжетами, особенно с 3D графикой, которая вполне неплохо даётся ZX Spectrum и даже C64. Даже для отображения элементарных статичных детализированных картинок, таких как загрузочные экраны в играх для упомянутых компьютеров, на Famicom приходится прибегать к особым трюкам. С другой стороны, как показала история, такая архитектура видеосистемы прекрасно справляется с динамичными двухмерными играми — платформерами в духе Super Mario Bros, боевиками типа Contra, и им подобными. Немалое достижение, учитывая, что первоначальная задача, поставленная перед инженерами примерно в 1982 году, требовала лишь обеспечить возможность запуска порты аркадных игр Galaxian и Donkey Kong с близким к их оригинальным версиям качеством. Можно сказать, что в случае с Famicom речь идёт не просто о технологии, определяющей визуальную эстетику, но о технологии, определившей преобладающие жанры игр на два поколения игровых систем вперёд.

Всё, что требовалось от железа Famicom в 1983 году — отображать эту картинку

К 1989 году разработчики научились отображать на Famicom и такие картинки, к тому же с хорошей анимацией

▍ Genesis и так далее


Несколько слов о дальнейшем развитии тайлово-спрайтовой концепции. Своего пика она достигла в игровых системах четвёртого поколения, взявшего старт в 1987 году — в 16-битных Sega Genesis и Super Nintendo, в условно 16-битной PC Engine (TurboGrafx-16), а также в современных им аркадных игровых автоматах.

Концепция сохранила все черты, оформившиеся в Famicom, но показала количественный и качественный рост. Больше оперативной видеопамяти, стандартно 64 килобайта. За счёт внедрения в архитектуру контроллера DMA стало больше времени на доступ к видеопамяти со стороны центрального процессора. Увеличилось количество одновременно отображаемых спрайтов, увеличился их размер. Больше одновременно отображаемых символов на слое фона — достаточно, чтобы показать уникальное изображение на весь экран. Больше самих слоёв фона — от двух у Genesis до трёх-четырёх на SNES. Больше цветов — теперь это всегда 16 цветов на точку спрайта или тайла, каждому спрайту и тайлу может быть назначен один из нескольких 16-цветных наборов цветов, а эти цвета выбираются из более богатой палитры оттенков — 512 на Genesis, и даже 32768 на SNES. Расширился и набор атрибутов тайлов, помимо выбора палитры появилась возможность индивидуального переворота каждого символа на экране по горизонтали или вертикали, а также изменения его приоритета, чтобы он отображался перед или за другими слоями фона и спрайтов.

Один из первых хитов, показавший мощь 16-битной графики, игра Sonic The Hedgehod, 1991 год

Разбор изображения того же по слоям — слой спрайтов, два слоя фона

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

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

Эффект имитации вращения (наклона) картинки, являющийся одной из узнаваемых особенностей графики Sega Genesis. Игра The Adventures of Batman & Robin, 1995 год

Узнаваемые плавные цветовые градиенты, на которые способна SNES. Игра Super Turrican 2, 1995 год

Уже в этом поколении были и первые ласточки смены парадигмы, например, Neo-Geo использует исключительно спрайты, а единственный классический тайловый слой применяется там для отображения очков и вспомогательных текстовых сообщений. Такой подход вкупе с огромным объёмом видеопамяти (десятки мегабайт) снял практически все ограничения и позволил пиксельным художникам довести своё мастерство до совершенства, создавая уникальные, очень детально прорисованные игровые локации почти без повторяющихся элементов.

В то же самое время более дорогие домашние и персональные компьютеры, на которых также расцветала игровая индустрия — Amiga, Atari ST, IBM PC с 386 и 486 процессорами, и множество менее известных — шли иным путём, в основном комбинируя различные подходы с полноценными графическими режимами, битпланами, аппаратными спрайтами или с чисто программной отрисовкой. Как правило это давало гораздо большую гибкость в визуальных сюжетах за счёт меньшей скорости работы, но более мощные процессоры позволяли компенсировать эту проблему. В результате это сделало возможным Doom и приблизило следующую, принципиально иную эпоху визуализации в играх. Впрочем, это уже совсем другая история.

▍ Креативные атрибуты


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

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

Эту особенность часто используют на ZX Spectrum в различных целях. Это и оптимизация по скорости, и различные вычислительно сложные эффекты в демо и 256-байтных интро. Также существует так называемый режим 53c — когда все пиксели экрана заполнены шахматной сеткой, сочетание разных цветов фона и изображения в атрибутах даёт условную имитацию новых оттенков цвета (всего 53, отсюда и название), недоступных в стандартной спектрумовской палитре. Этот режим полюбился организаторам и участникам различных конкурсов, так как столь низкое разрешение без сложных для понимания ограничений по цветам позволяет рисовать осмысленные изображения даже начинающим художникам, не знакомым с платформой.

Графика в формате 53c, работа Dog авторства Buddy, 2016 год

Другой особенностью, которую открывают атрибуты, является своего рода стеганография. Если установить одинаковый цвет фона и изображения в знакоместе, содержание экранной памяти, описывающей пиксели этого знакоместа, не будет давать никакой визуальной разницы. Этот эффект на ZX Spectrum применяли как для скрытия различных авторских надписей на загрузочных экранах, так и в чисто практических целях: в условиях нехватки оперативной памяти в кассетных копировщиках часть их кода размещали в экранной памяти, и выводили в соответствующем месте экрана служебные надписи крупного размера, используя только атрибуты.

Загрузочный экран игры Arkanoid II скрывает, внезапно, логотип The Beatles

Крайне лаконичный интерфейс кассетного копировщика TF-Copy скрывает под атрибутным счётчиком байт полезные данные, хранимые в экранной области

Ещё одним примером креативного использования наименее полезной возможности ZX Spectrum, а именно признака мигания, являются атрибутные анимации. При установке в знакоместе признака мигания цвета фона и изображения в нём меняются местами два раза в секунду. С помощью хитро спланированной расстановки атрибутов, часть из которых мигает, можно создавать анимацию из двух кадров. Это может быть просто две перемигивающиеся надписи, а может быть удивлённый котик (больше примеров с миганием по тегу Flash на ZX-Art).

Загрузочный экран классической игры Manic Miner, 1983 год

Работа «Nichosi» авторства Al-Rado, 2022 год

На Famicom легко увидеть атрибуты, вытащив или слегка недовставив картридж во время работы приставки. Когда ПЗУ или ОЗУ с графикой на плате картриджа не подключено, приставка считывает вместо графики байт FF. Данные же цветовых атрибутов находятся в ОЗУ видеоконтроллера, и таким образом они проявляются на экране в виде закрашенных квадратов.

Из-за довольно крупного размера атрибутов на Famicom их практическое применение по аналогии с ZX Spectrum затруднено. Чаще они пригождаются для раскрашивания в разные цвета одного и того же объекта, например, знаменитый пример облака и куста в Super Mario Bros. Также таким образом удобно раскрашивать строки текста в разные цвета, подсвечивать пункты меню.

Знаменитые облака, перекрашенные в кусты при помощи выбора другой палитры

Довольно интересный частный случай перекраски можно видеть в Mitsume ga Tooru (всеми любимый «трёхглазик»). На второй локации этой игры реализован эффект параллакса за счёт дополнительной прокрутки в видеопамяти содержимого графики тайлов фонового узора (аналогично Battletoads и ряду других игр). На этом фоновом узоре используется два разных атрибута, раскрашивающих его в более светлый и тёмный оттенок. Таким образом создаётся убедительный эффект полупрозрачной тени.

Убедительная имитация полупрозрачной тени с помощью атрибутов в игре Mitsume ga Tooru, 1992 год. В движении смотрится ещё лучше!

▍ Заключение


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

Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх ????️

Комментарии (31)


  1. saboteur_kiev
    07.09.2023 12:10
    +11

    Практически не был знаком с другими архитектурами, только с Spectrum и БК, но было интересно какие идеи были реализованы у других. Спасибо, очень интересно!


    1. igor_suhorukov
      07.09.2023 12:10
      +4

      На Spectrum можно было заполнить знакогенератор своими значениями пикселей и в текстовом режиме отображать графику. Первую свою игру так и делал псевдографикой. Ностальджи!

      БК у нас были редкостью, в отличии от спектрумов, которые были даже с 5` флоппи дисководом и 128K адресным пространством, с переключаемыми банками памяти 2x64K

      А чтобы программировать свои программы с графикой была мотивация учить тригонометрию раньше чем ее преподавали в школе!


      1. salnicoff
        07.09.2023 12:10

        На «Спектрумах» и 3-D полноценное было. Чисто софтово, разумеется.


        1. igor_suhorukov
          07.09.2023 12:10
          +2

          Carrier Command
          Carrier Command

          Все что помню в wireframe графике из игр тогда. В основном интересное было в демках на спектруме!


      1. saboteur_kiev
        07.09.2023 12:10
        +5

        Да вообще, из тех у кого был свой спектрум и кто не делал свои шрифты, по пальцем можно посчитать. По-моему даже в Artstudio можно было нарисовать свой набор шрифтов/знакогенератор и сохранить. Я так конструктор к Laser Squad делал


  1. swordgna
    07.09.2023 12:10
    +4

    Спасибо за большую проделанную работу! Узнал много нового, того что не знал раньше. Очень интересно читать спустя 20-25 лет то, что было новинкой в своё время.

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


  1. da-nie
    07.09.2023 12:10
    +3

    особенно учитывая довольно своеобразную, очень яркую и ядовитую палитру цветов.

    Там ничего своеобразного не было. Там просто три бита R,G,B и бит яркости. Все они (включено/выключено) и дают в своих комбинациях 15 цветов (на чёрный яркость не влияет, за исключением ряда моделей (Эльф, например), где эффект просветления чёрного цвета присутствует).


    И, кстати, картинки там вполне себе приятные глазу можно нарисовать:






    Для увеличения скорости работы с графикой экранная память была организована весьма нетривиальным образом.

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


    1. shiru8bit Автор
      07.09.2023 12:10

      Именно такого же RGBI с двумя чёрными на других платформах почти нигде нет. Или RGB без I, или какие-то вариации. Даже в CGA, где похожее решение, сделали ярко-чёрный (серый) и модифицированный тёмно-жёлтый (он сдвинут в коричневый). Поэтому всё-таки палитра ZX вполне себе уникальна.

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


      1. da-nie
        07.09.2023 12:10
        +1

        Поэтому всё-таки палитра ZX вполне себе уникальна.

        Она может быть уникальной, но никак не своебразной. И очень простой схемотехнически, так как не требует никаких преобразований кода цвета в цвет. Именно поэтому
        ink 7 — белый (1,1,1);
        ink 6 — жёлтый (1,1,0);
        ink 5 — голубой (1,0,1);
        ink 4 — зелёный (1,0,0);
        ink 3 — фиолетовый (0,1,1);
        ink 2 — красный (0,1,0);
        ink 1 — синий (0,0,1);
        ink 0 — чёрный (0,0,0).


        1. da-nie
          07.09.2023 12:10
          +2

          А вот как это реализовали схемотехнически в Ленинграде.



          D11 формирует суммарный синхроимпульс из кадрового (KS) и строчного (SS) (кстати, синхроимпульсы у Ленинграда неправильные по формату, но для советских телевизоров это было не критично)
          D36 делает развязку ink/paper. Его же дёргает сигнал flash (мигание). Прямо с выхода D36 через простейшие делители (при отключённой яркости) формируются R,G,B. Дальше все эти каналы отправляются на эмиттерные повторители и дальше через делители на телевизор.
          Вот и всё. Очень простая схемотехника.


    1. saboteur_kiev
      07.09.2023 12:10
      +1

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


      1. da-nie
        07.09.2023 12:10
        +1

        Не все. Тем не менее, все эти картинки возможны в рамках графики ZX.


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

        Это не так. ZX Forum показывал схему простого устройства видеозахвата (картинка получалась ч/б и не очень хорошего качества).


      1. salnicoff
        07.09.2023 12:10

        Помню, в главный спектрум-магазин нашего города в мае 1994 года завезли девайс для захвата картинки с телевизора. Картинка, конечно, была адская — из-за ограничений 256×192 и цветов, и ценник довольно конский, но оно работало. Так что в жизни можно было потратиться на девайс, купить видеомагнитофон (да, я помню, сколько он стоил), и брать картинки из фильмов, поставив их на паузу. Особо экстремальный случай — снять что-то на полноформатную VHS-камеру, потом через тот же девайс перенести в «Спектрум». Такая вот цифрофотография 30 – 40-летней давности.


  1. NickDoom
    07.09.2023 12:10

    Сэр Клайв Синклер вроде запатентовал свою организацию видеопамяти? Интересно, как при этом все эти денди обходили его патент %) и обидно, что он не поиграл в своё время на чужом поле, в результате чего мы довольствовались EGA :) С таким методом организации видеопамяти можно было просто сделать поле 128х128 знакомест, каждое — 4х3 пиксела (в угоду тогдашним мониторам), выделить каждому 32 бита и ровно получается один сегмент 86-го! При этом для минимальной работы достаточно добавить регистры «цвет фона по умолчанию», «цвет пиксела по умолчанию» и распаять хотя бы 12 бит (три чипа шириной по 4 или какой они тогда были ширины…), а под остальное сделать «кроватки», чтобы в дальнейшем можно было добавить каждому знакоместу персональные цветовые атрибуты, «перекрывающие» значения регистров. Причём при организации типа «3-4-3 RGB» (без палитры) их вообще можно добавлять по частям, скажем, купить микруху под старшие 1-2-1 бит цвета пиксела, потом микруху под 1-2-1 цвета фона, потом под 2-0-2, потом под последние 1-2-1… в общем, не знает история сослагательного наклонения, но патент его явно позволял, когда перестали сами «Спекки» продаваться, устроить IBM весёлую историю почище даже той, которую им устроила видеокарта «Геркулес» :)


    1. salnicoff
      07.09.2023 12:10

      Сэр Клайв Синклер вроде запатентовал свою организацию видеопамяти? Интересно, как при этом все эти денди обходили его патент %)

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


    1. CrashLogger
      07.09.2023 12:10
      +1

      У Денди со Спектрумом нет ничего общего ) Вы похоже невнимательно читали статью.


  1. axe_chita
    07.09.2023 12:10
    +1

    Очень жалко, что в обзоре вы не рассмотрели развитие TMS9918 видеочипы от Yamaha VDP V9938/V9958. Они имели не только более высокое разрешение (максимально до 512(256)х424(212) 16 цветов на пиксел из палитры 512) или 256 цветов direct RGB. Плюсом в новых графических режимах этих VDP существовало аппаратное ускорение рисования линий, копирования областей, заливка цветом области, как с учетом логических операций, так и без их учета. То есть, в какой-то степени, их можно рассматривать как предтечу современных GPU.


    1. shiru8bit Автор
      07.09.2023 12:10
      +2

      Я знаю про эти чипы, немного занимался ими и последующим V9990. Это целая большая тема, а статья и так вышла объёмная. Возможно через время наберу и такой материал, про MSX в принципе можно рассказать много чего интересного.


  1. mvv-rus
    07.09.2023 12:10
    +1

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

    IMHO, этот скриншот (из все той же игры: "3D Monster Maze") таки круче:


    image


    1. shiru8bit Автор
      07.09.2023 12:10

      Я выбирал между этим и тем, но нужно было наглядно показать, что у ZX81 текстовый режим. А тут картинка всё же выглядит графикой, и это требует пояснений.


  1. Refridgerator
    07.09.2023 12:10
    +3

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


    А звуки загрузки игр я до сих пор иногда слушаю в приступах ностальгии. И иногда из глубин памяти выплывает паника "вот, вот сейчас будет Tape loading error!". Своя атмосфера, в общем.


    1. shiru8bit Автор
      07.09.2023 12:10

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


    1. IvanPetrof
      07.09.2023 12:10
      +1

      Своя атмосфера

      Когда просматривал скриншоты игр, из глубин памяти всплывали приятные обонятельные воспоминания, связанные с запахами наэлектризованной от монитора пыли :)

      Сейчас таких мониторов нет.. И ощущения не те))


  1. da-nie
    07.09.2023 12:10
    +4

    Верно. Вот с zxnext.narod.ru сравнение телевизора и монитора:




    1. salnicoff
      07.09.2023 12:10

      Никаких аппаратных сглаживателей еще не сделали?


      1. Nest_aka_Swan
        07.09.2023 12:10
        +1

        Есть шейдеры, которые «эмулируют» ЭЛТ, например https://emulation.gametechwiki.com/index.php/CRT-Royale


        1. salnicoff
          07.09.2023 12:10
          +1

          Я не про это. То, что Вы предложили, это какой-то софтовый хак драйверов и данных, которые передаются в видеокарту (или хак процедуры обработки их в ядрах видеокарты).

          Я же мечатал об аппаратном сглаживателе, который вставляется между реальным «Спектрумом» и монитором. Грубо говоря, у меня есть настоящий «Спектрум», который выдает картинку 256×192, и Full--HD-монитор, к которому он подключен. И железяка переделывает микроскопическую картинку в большую, но не тупо увеличивая пикселы, а делая из каждого некую эмуляцию трех полосочек люминофора на CRT-телевизоре.


  1. DimaFromMai
    07.09.2023 12:10
    +3

    Кому интересно (может кто не знает) в Яндекс музее можно даже в это поиграть, посмотреть на консоли тех лет, там много всего интересного.


  1. cybermind8801
    07.09.2023 12:10
    +2

    Если говорить про интересные видеосистемы начала 1980-х, нельзя не упомянуть достаточно популярную в Японии, но практически неизвестную в остальном мире на фоне остальных компьютеров серию Fujitsu FM-7 (вышедшую в 1982 году как удешевленный вариант компьютера Fujitsu FM-8).

    На фоне своих конкурентов (NEC PC-8801, Sharp X1) данная серия компьютеров отличалась интересной особенностью - в ней было 2 CPU модели Motorola 6809, второй при этом работал независимо от первого и отвечал за видеосистему и доступ к видеопамяти (ну и вдобавок отвечал за ввод с клавиатуры). Процессоры были связаны между собой небольшим окном в адресном пространстве, через которое они могли обмениваться данными. Графика выводилась путем отправки программы и данных из основной памяти в видеопамять, после чего второй CPU исполнял эту программу и рисовал на экране пиксели, линии и другие примитивы.

    Да, это по сути первый персональный компьютер (именно персональный, профессиональные графические станции к тому времени уже существовали) с программируемым видеопроцессором (то есть GPU), а программы для него можно назвать самыми первыми шейдерами.

    Подробнее про программирование под него можно почитать тут: https://www.chibiakumas.com/6809/fm7.php

    Под него даже пару демок имеется (правда, далеко не выжимающие все возможности платформы):

    Hidden text


    1. shiru8bit Автор
      07.09.2023 12:10
      +2

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


  1. Laryx
    07.09.2023 12:10
    +1

    У CGA был весьма приятный "композитный" режим, который давал шестнадцать цветов при полном пиксельном разрешении 320х200, однако, работал он только при подключении по композитному выходу. К сожалению, большинство игрописателей имели цифровые RGBI мониторы, и абсолютное большинство игр в то время такой режим не использовали.