COMMODORE FORMAT выпуск 13, Q&A:
Невозможно увеличить количество цветов в палитре C64, но существуют хитрые подпрограммы, которые позволяют создать впечатление большего количества цветов. Dragon Breed от Activision использует очень быстрое переключение цветов, чтобы дать промежуточный тон, а PD-кодеры создали механизм Fli-Pic, который позволяет вам использовать более четырех цветов на блок символов.
В 1991 году мне было четырнадцать лет. Можно сказать, что я был одержим компьютерами. Я был гордым обладателем коричневой «хлебницы» Commodore 64 с экзотической модернизацией — накопителем Oceanic 5.25":
В мае того года я читал COMMODORE FORMAT и пожирал обзоры игр C64. Однажды я прочитал заголовок, который засел у меня в голове на годы. Под снимком красочного роботизированного дракона было написано:
Погоди… Ты не можешь получить этот цвет на 64! Но это возможно, если менять бледно-зелёный и голубой 50 раз в секунду!
Это потрясло меня до глубины души.
Благодаря чуду интернета и страсти некоторых великих архивистов журналов, мы можем раскопать ту самую страницу, которая изумила меня давным-давно:
Это было довольно необычно. Если у вас был любой 8-битный компьютер, вы хорошо знакомы с его цветовой схемой. Эта простая фотография взорвала мой мозг. Этот синий цвет был просто невозможен.
Согласно заголовку, если чередовать два разных цвета достаточно быстро, для глаза появляется совершенно новый цвет. Как этот новый секретный цвет выглядел на вашем хреновом ЭЛТ-телевизоре ранних 90-х? Снимок экрана был только намеком. Сиял ли он? Мерцал?
Двадцать шесть лет спустя я нашёл ответ.
Эта статья посвящена переключению цветов на Commodore 64. Ниже есть несколько интерактивных примеров. Я не нашел ничего похожего, поэтому возможно, что это единственный ресурс на эту тему.
Давайте немного подумаем, почему секретные цвета были такими грандиозными?
Палитра определяла компьютер
Палитра была важна.
Типичный 8-разрядный компьютер мог отображать только шестнадцать цветов. Эти цвета были зашиты аппаратно при разработке компьютера.
Это означает, что палитра определяет фиксированные рамки для компьютера. Она ограничивала то, как выглядят и ощущаются образы. Это фундаментально отличало Commodore 64 от ZX Spectrum, от Apple II, от Amstrad CPC. Вы могли сразу сказать, на каком компьютере был сделан тот или иной скриншот.
Вполне ожидаемо, что дизайн аппаратной палитры был чрезвычайно важен. Художники работали только с шестнадцатью цветами и нуждались в тщательно подобранных тонах, которые помогут им отобразить реальный мир.
Не всегда получалось хорошо. Очень жаль кричащую палитру зашитую в Sinclair ZX Spectrum, которая порождала образы подобные этим:
Так получилось, что инженеры Commodore проделали отличную работу. На рисунке ниже в левом верхнем углу показана палитра. Остальная часть изображения показывает приятные градиенты, возможные на C64.
Примечание: Это не моя картинка! Оригинальный автор неизвестен, но я нашел её здесь.
Обратите внимание:
- Палитра обладает более земными тонами, которые соответствуют реальным объектам. Сравните со взрывом красок Спектрума.
- В ней есть множество оттенков серого. Это позволяет отображать монохромные картинки, а также такие вещи как металл. В конце концов, нейтральные оттенки серого можно смешать с другими цветами, размещая их рядом.
Поэтому владельцы C64 привыкли к таким экранам:
Такие пиксельные изображения намного лучше выглядят на типичных нечётких ЭЛТ-телевизорах, из-за более мягкого смешивания.
После долгих лет пристального изучения этой палитры, она въелась в мой мозг. Я узнаю эти цвета сразу. Они резонируют с частотой ностальгии и заставляют трепетать мой мозг. Я даже использую эти цвета в качестве моего аватара на Github:
Учитывая это, мысль о том, что можно разрушить эту грань и изобрести новые секретные цвета на C64, что можно заставить видеть то, чего не существует, казалась волшебной.
Переключение цвета
Если достаточно быстро менять два цвета, например, 50-60 раз в секунду, то можно обмануть зрение и увидеть то, чего нет. Для машины с шестнадцатью цветами даже один или два дополнительных цвета могут значительно обогатить сцену.
Так как мы все живем в будущем, и вы читаете полностью программируемый документ на суперкомпьютере, давайте попробуем повторить этот эффект.
Простой пример
Вот квадрат, который меняет свой цвет с красного на синий и обратно каждую секунду.
Примечание переводчика: Тут и далее переключайтесь на вкладку Result, чтобы запустить пример.
Нажмите на него, чтобы цвета начали переключаться со скоростью 60fps (или, в некоторых случаях, с максимальной скоростью обновления экрана вашего браузера. Было бы здорово увидеть это на 144-Гц мониторе).
Обратили внимание, как появился третий цвет? Этот оттенок фиолетового не отображается. Появляются только красные и синие квадраты, а ваш глаз видит цвет, которого там нет. Я вас не обманываю. Это переключение цвета в действии.
Нажмите ещё раз, чтобы замедлить скорость и проверить.
Пример из Dragon Breed
Вернёмся в далёкий 1991, я был заинтригован обзором, но у меня никогда не было той игры. Как на самом деле выглядел Dragon Breed?
Прежде всего, оказывается, что необычное переключение цветов не используются в игре вообще, пока вы не достигните конца STAGE 3, где босс, роботизированный дракон, начинает сиять в этом странном голубом цвете.
Лирическое отступление: У нас есть интересная возможность — запустить оригинальную аркаду. Поскольку мы живем в будущем, вы можете играть в Dragon Breed прямо сейчас в своем браузере (нажмите кнопку питания, подождите загрузки, нажмите 5, чтобы вставить монету, затем 1, чтобы начать). Это потрясающе. К сожалению, чтобы увидеть дракона, который нас интересует, вам придется дойти до конца STAGE 3. Удачи.
Наверняка кто-нибудь записывал этот эффект на longplay-видео C64? После небольших раскопок я нашел нашего знаменитого робота-босса дракона на Youtube:
Но, так как видео записано на 30fps, всплывают две проблемы:
- Оно выглядит хреново. Спрайты раздражающе мелькают.
- Эффект переключения цветов полностью потерян.
Если бы вы играли на эмуляторе с 50/60fps, эффект был бы убедительным.
Лирическое отступление: Заметка о кадрах в секунду. Европейская версия PAL C64 обновляется со скоростью 50 кадров в секунду, тогда как системы NTSC в США обновляются со скоростью 60 кадров в секунду (ссылка). Странно, да? Это означает, что эффект немного убедительнее на американской машине.
Можем ли мы показать эффект Dragon Breed на веб-странице? Давайте дойдём до STAGE 3 (с помощью читов, конечно) и сохраним босса в пару кадров:
Далее, с небольшой помощью JavaScript мы можем чередовать образы и увидеть оригинальный эффект при 60fps. На телефоне, вероятно, сначала понадобиться немного уменьшить масштаб. Еще раз, нажмите, чтобы замедлить или активировать переключение цветов:
Посмотрите на все три изображения, мы создали совершенно новый цвет!
Также обратите внимание на мерцающий хвост дракона: это следствие ограничения на спрайты в C64. Компьютер не поддерживает достаточное количество спрайтов для отображения шести сегментов хвоста и всех врагов одновременно, поэтому показываются только три и чередуются каждый кадр с мерцающим эффектом.
Мы сделали это! Мы воссоздали механизм переключения цветов из Dragon Breed в браузере. Готово?
Пример с палитрой
Нет. Можно смешать эти два цвета, а какие ещё комбинации возможны? Иными словами, каков набор всех возможных секретных цветов на данной машине?
Давайте выясним. Наденьте свои очки! Мы сведем каждую уникальную пару цветов на Commodore 64 в один прекрасный эпилептический взрыв. Опять же, нажмите, чтобы переключить режимы:
Довольно круто, да? Похоже на тартан для клана МакБуэ.
Имейте в виду, что каждый мерцающий квадрат выше — это уникальная пара цветов. Я выделил комбинацию, которая используется в Dragon Breed, с помощью границы.
Обратите внимание, что некоторые комбинации имеют неприятный стробоскопический эффект. Но не все из них! Почему так происходит? Все дело в яркости. Два цвета одинаковой яркости прекрасно сочетаются, тогда как черный и белый будут очень сильно мерцать.
Переключитесь в быстрый режим, найдите нужный вам смешанный цвет. Потом кликните, чтобы замедлить чередование и посмотреть, какие два цвета смешиваются, формируя этот оттенок.
Конец
Вот и вся история о том, как я читал о секретных цветах C64 в 1991 году, а затем спустя двадцать шесть лет наконец добрался до них. Если вам по-прежнему интересно и ваши глаза ещё не вытекли, дальше располагается бонусный контент.
Статья из 1991 года
До Интернета компьютерные журналы были единственным способом узнать, что происходит в мире технологий. Трудно описать, насколько волнующе было получить выпуск ZZAP! 64 или COMMODORE FORMAT и прочитать отзывы обо всех новых играх, или рассматривать рекламу периферийных устройств, а потом клянчить их у родителей/Санты.
Для максимума ностальгии, вот полные страницы обзора Dragon Breed из COMMODORE FORMAT:
Для максимума ностальгии, вот полные страницы обзора Dragon Breed из COMMODORE FORMAT:
Упоминания о переключении цветов
Это список всех ссылок на 8-битное переключение цветов, которое я нашел в Интернете.
COMMODORE FORMAT выпуск 5, обзор Dragon Breed:
Дополнительные цвета получаются с помощью переключения цветов, где пикселям назначаются разные цвета каждую 1/50-ю секунды, что создает впечатление совершенно нового оттенка
COMMODORE FORMAT выпуск 13, Q&A:
Невозможно увеличить количество цветов в палитре C64, но существуют хитрые подпрограммы, которые позволяют создать впечатление большего количества цветов. Dragon Breed от Activision использует очень быстрое переключение цветов, чтобы дать промежуточный тон, а PD-кодеры создали механизм Fli-Pic, который позволяет вам использовать более четырех цветов на блок символов.
COMMODORE FORMAT, выпуск 32, дневники разработчиков Mayhem in Monsterland:
Как и в случае с нашей фоновой графикой, мы хотели получить больше 16 комодоровских цветов для спрайтов. Однако, мы не могли использовать тот же метод смешивания, что и для графики уровня (См. CF28), потому что у нас недостаточно цветов спрайта. Поэтому для спрайтов я реализовал другую процедуру смешивания, которая быстро переключается между двумя цветами (равной яркости) для создания новых оттенков.
Интервью C64.com с программистом Dragon Breed Эшли Рутледж:
Я часто вспоминаю дракона с этим странным оттенком сине-голубого.
Как менять картинки на скорости 60fps
При написании программ для этой статьи я обнаружил, что довольно сложно заставить два изображения меняться со скоростью 60fps без визуальных артефактов.
Чтобы все заработало, вам нужно создать пару объектов Image, установить их атрибут src и дождаться их полной загрузки (используя событие) перед началом цикла анимации. Фух! Если понадобится, просмотрите исходный код этой статьи или изучите этот код.
- GIF (обычный GIF, а не GIFV) слишком медленный для 60 кадров в секунду.
- Манипулирование backgroundImage работает, но адски мерцает.
Чтобы все заработало, вам нужно создать пару объектов Image, установить их атрибут src и дождаться их полной загрузки (используя событие) перед началом цикла анимации. Фух! Если понадобится, просмотрите исходный код этой статьи или изучите этот код.
ОК, теперь точно всё! Спасибо за прочтение. Если вам понравилось, я хотел бы услышать от вас комментарии ниже.
Поделиться с друзьями
Комментарии (27)
5erg
04.04.2017 10:24+1На спектруме были (Flash color, по-моему) аналогичные доработки (которые работали и без HW-апгрейда). Да, выглядело так себе, заметно мерцало. И только статичные кадры, никакой анимации
neko_nya
04.04.2017 16:26Там они еще расширяли цветовую палитру немного другим способом. У спектрума в обычном режиме на одно знакоместо 8х8 полагалось два цвета. Путем быстрой смены атрибутов, синхронизированной с разверткой экрана, два цвета остались в горизонтальной полоске 8х1, и в соседних полосках пары цветов могли быть разными.
lzb_j77
04.04.2017 11:03+1На Спектруме аналогичное было. Правда, в игрушках не видел, но в демках бывало:
immaculate
Надо же, в первой половине 90-х услышал байку о том, как какой-то гениальный программист сумел написать код, показывающий цветное изображение на ч/б мониторах за счет моргания пикселами с высокой частотой. Конечно, даже тогда, будучи зеленым школьником, я не поверил. Но оказывается у этой байки было вполне реально происхождение. Хоть это и не цветное изображение на ч/б телевизоре, но все равно впечатляет!
DrZlodberg
Цветное на чб делалось накладными цветными плёнками. :)
Однако в своё время мне порвало мозг, когда на VGA 640*480 (16 цветов) увидел гораздо более многоцветное демо. Впоследствии удалось нарыть инфу и даже поиграться немного с этой фишкой.
Смысл в том, что программа ждала сигнала о начале обратного хода луча ЭЛТ и в этот момент перегружала палитру. Т.е. вместо 16 цветов на кадр получали 16 цветов на строку.
Познее видел и ещё более упоротый вариант, когда графику рисовали в текстовом режиме монитора динамически меняя палитру одного цвета прямо во время хода луча! Картинка получалась кривоватая, но вполне смотрибельная. Естественно оба варианта требовали всех ресурсов машины и отрубали вообще все прерывания, иначе картинка сбивалась.
К слову попадался и другой мозголомный вариант, рисовавший труколор в режиме 256 цветов. Похоже он в каждом кадре пересчитывал цвет и палитру.
GreenStore
> гениальный программист сумел написать код, показывающий цветное изображение на ч/б мониторах
Я в 90-х делал демку, которая на мониторе выводит бегущие белые полоски. При этом, на ч/б мониторе по краям белых полосок «видна» цветная окантовка, с одной стороны — фиолетовая, с другой стороны — зеленая.
Эффект возникает из-за особенностей человеческого зрения.
Это, случайно, не мой случай?
opxocc
Это он, «цвет» на ч/б мониторах достигается за счёт эффекта Фехнера-Бенхема, в 60х даже были идеи так транслировать цвет по ТВ.
justmara
GreenStore
Выше написали про эффект Фехнера-Бенхема, причем здесь дисперсия/аберрация?
https://deadbees.net/eto-cherno-beloe-video-obmanyvaet-nash-mozg-zastavlyaya-videt-cvetnye-kartinki/
justmara
А, тоже забавная штука, не знал.
Я, просто, сначала подумал, что раз в 90е годы, то речь про элт мониторы и эффект получался за счёт искажения луча. НО это я что-то затупил — там же решётка прям у переднего стекла и тупо недостаточное расстояние для возникновения сколько-нибудь заметных искажений.
В общем сам себя перемудрил.
А всего-то можно было после расплывчатого "особенностей человеческого зрения" добавить маааленькую ссылку или хотя б название эффекта, чтоб было понятно, что гуглить ;)