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, всплывают две проблемы:

  1. Оно выглядит хреново. Спрайты раздражающе мелькают.
  2. Эффект переключения цветов полностью потерян.

Если бы вы играли на эмуляторе с 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:


Упоминания о переключении цветов
Это список всех ссылок на 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 без визуальных артефактов.

  • GIF (обычный GIF, а не GIFV) слишком медленный для 60 кадров в секунду.
  • Манипулирование backgroundImage работает, но адски мерцает.

Чтобы все заработало, вам нужно создать пару объектов Image, установить их атрибут src и дождаться их полной загрузки (используя событие) перед началом цикла анимации. Фух! Если понадобится, просмотрите исходный код этой статьи или изучите этот код.

ОК, теперь точно всё! Спасибо за прочтение. Если вам понравилось, я хотел бы услышать от вас комментарии ниже.
Поделиться с друзьями
-->

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


  1. immaculate
    04.04.2017 10:19
    +3

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


    1. DrZlodberg
      04.04.2017 11:36
      +4

      Цветное на чб делалось накладными цветными плёнками. :)
      Однако в своё время мне порвало мозг, когда на VGA 640*480 (16 цветов) увидел гораздо более многоцветное демо. Впоследствии удалось нарыть инфу и даже поиграться немного с этой фишкой.
      Смысл в том, что программа ждала сигнала о начале обратного хода луча ЭЛТ и в этот момент перегружала палитру. Т.е. вместо 16 цветов на кадр получали 16 цветов на строку.

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

      К слову попадался и другой мозголомный вариант, рисовавший труколор в режиме 256 цветов. Похоже он в каждом кадре пересчитывал цвет и палитру.


    1. GreenStore
      04.04.2017 14:07

      > гениальный программист сумел написать код, показывающий цветное изображение на ч/б мониторах

      Я в 90-х делал демку, которая на мониторе выводит бегущие белые полоски. При этом, на ч/б мониторе по краям белых полосок «видна» цветная окантовка, с одной стороны — фиолетовая, с другой стороны — зеленая.

      Эффект возникает из-за особенностей человеческого зрения.

      Это, случайно, не мой случай?


      1. opxocc
        04.04.2017 14:52

        Это он, «цвет» на ч/б мониторах достигается за счёт эффекта Фехнера-Бенхема, в 60х даже были идеи так транслировать цвет по ТВ.


      1. justmara
        05.04.2017 10:01

        Эффект возникает из-за особенностей человеческого зрения.
        Скорее, из-за законов физики. Дисперсия, аберрации вот это всё.


        1. GreenStore
          05.04.2017 11:23

          Выше написали про эффект Фехнера-Бенхема, причем здесь дисперсия/аберрация?

          https://deadbees.net/eto-cherno-beloe-video-obmanyvaet-nash-mozg-zastavlyaya-videt-cvetnye-kartinki/


          1. justmara
            06.04.2017 09:51

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


            А всего-то можно было после расплывчатого "особенностей человеческого зрения" добавить маааленькую ссылку или хотя б название эффекта, чтоб было понятно, что гуглить ;)


  1. 5erg
    04.04.2017 10:24
    +1

    На спектруме были (Flash color, по-моему) аналогичные доработки (которые работали и без HW-апгрейда). Да, выглядело так себе, заметно мерцало. И только статичные кадры, никакой анимации


    1. jetman
      04.04.2017 14:18

      C HW апгрейдом добивались и отсутствия мерцания. Прозвали это GigaScreen.


    1. neko_nya
      04.04.2017 16:26

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


  1. lzb_j77
    04.04.2017 11:03
    +1

    На Спектруме аналогичное было. Правда, в игрушках не видел, но в демках бывало:


  1. frol_aleksan
    04.04.2017 11:16

    Там, где большой квадрат, на самом обычном ЖК-мониторе если курсором двигать, сам курсор цвет меняет. Видимо, сказывается медленное перестроение ЖК-ячеек.


  1. nikitasius
    04.04.2017 11:55

    Просто офигенно!


  1. yurec_bond
    04.04.2017 12:37
    +1

    В продолжение темы про использования графики основанной на палитрах и как далеко люди развили это искусство.
    https://www.youtube.com/watch?v=aMcJ1Jvtef0&t=4539s


  1. hdfan2
    04.04.2017 13:00
    +1

    Просто чудесная пастельная палитра. Напомнила мне палитру из последних Norton Utilities (это где был графический курсор в текстовом режиме). Возможно, разработчики взяли её с Commodore. Вырвиглазные CGA-шные цвета и рядом не лежали.


  1. Trottle
    04.04.2017 13:37
    +3

    Странное замечание про палитру Спектрума. Как будто его разработчики её специально дизайнили. Спектрум НАМНОГО проще Коммодора. Во всем. Его палитра есть 3 бита цвета (по 1 биту на каждую из составляющих R,G,B) + 1 бит на яркость (полная/половинная). Так что это вполне «естественная» палитра. Я бы сказал, «базовая». Её, кстати, и Мicrosoft для 16-цветнoй палитры в Windows выбрали в свое время…


    1. Trottle
      04.04.2017 13:41
      +1

      P.S. Ну а вообще, такой трюк использовали на очень многих компах с ограниченной палитрой — и на Коммодоре, и на Спектруме, и на IBMе, как тут уже написали. (разве что Amiga со своим HAM смотрела на это ребячество свысока :) )


  1. hdfan2
    04.04.2017 14:01

    для клана Макпуке

    Тут, кстати, потерялась шутка про клан McPuke (puke — рвать, тошнить). Как вариант — клан МакБуэ. Может, будет вариант лучше?


    1. AndreyMI
      04.04.2017 14:36

      Да, шутка действительно потерялась. Спасибо!


  1. Arxitektor
    04.04.2017 14:17

    А ведь в будущем мы также будем с интересом читать что раньше уровни игр делались в ручную надо было накладывать текстуры на все объекты и прочее. А теперь целый мир ИИ на мощном серваке генерит автоматом.
    Как планеты в no man's sky но на 3 порядка круче ))


    1. Zavtramen
      04.04.2017 23:13

      ИИ, вы уверены?


  1. AxisPod
    04.04.2017 14:32

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


  1. frog
    04.04.2017 14:57

    Добавлю, не совсем по теме, что упомянутый автором «exotic upgrade» — дисковод Oceanic — это один из редких примеров дисковода, разработанного для C64 сторонней фирмой. У нас в школе один человек себе такой купил и ходил с ним. Он как бы совместим со стандартным Commodore 1541, но на самом деле нет (на врезке в статье предусмотрительно заявлена лишь абстрактная совместимость с «Commodore» :).
    Очень часты были проблемы со скоростными загрузчиками и копировщиками.


  1. Krypt
    04.04.2017 15:16

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

    Я такой же приём видел на NES (Dendy, если точнее) в Battle City. На эмуляторах его колбасит точно так же, как и дракона на видео прохождения.


  1. Alews
    04.04.2017 22:45

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


    1. ScratchBoom
      04.04.2017 23:28

      Вряд ли это на ЧБ телевизоре сработает. А вот на цветном, показывающим ЧБ картинку — может получиться.


  1. Byteman
    11.04.2017 10:27

    На самом деле, это не самое интересное что можно сделать с цветом на с64-подобных. Был такой компьютер как Commodore 128 (двухпроцессорное чудо с 6502 и Z80 на борту). Одним из его видеопроцессоров был слегка модифицированный VIC-II, включающий ненужные плюшки типа порта поддержки расширенной клавиатуры. Но у него появился бит TEST. Дергая этот бит, можно было крутануть фазу цветовой поднесущей и получить расширенную палитру цветов. Штука реально классная.
    То, что описал автор, есть банальный гигаскрин, который был представлен практически на всех платформах, где была возможность мапить экран на разные области памяти.