Как стать автором
Обновить

Графика древности: палитры, часть 1/2

Уровень сложностиПростой
Время на прочтение21 мин
Количество просмотров15K
Всего голосов 91: ↑90 и ↓1+126
Комментарии38

Комментарии 38

Для ZX Spectrum помню цвет задавался еще не для конкретного пикселя, а для знакоместа размером 8х8 пикселей. И при ближайшем рассмотрении графика неслабо так "квадратИла")) зато процессор на ура вывозил 25х40 знакомест с палитрой 8 цветов. И никаких тебе видеокарт или быстрой памяти))

Цифры чуть другие, 32 на 24 знакоместа, но в целом да, всё так, и так было не только на ZX Spectrum. Этой теме как раз была посвящена первая статья цикла.

Отличный обзор!
В ZX Spectrum было неприятное ограничение - в одном знакоместе (8х8 пикселей) можно использовать только два отдельных цвета (трёхбитовый цвет "чернил" INK и трёхбитовый цвет "бумаги" PAPER) плюс бит яркости и бит мигания (мигали редко - мигающий квадратик сильно выбивался из композиции на экране).

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

P.S. не читал вашу первую статью, где проблема уже описана...

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

Про количество тактов между двумя кадровыми синхроимпульсами я вообще молчу. В наших Спекки их было почти на 10000 больше (что-то типа 71500?), что позволяло делать более клёвые эффекты. Как минимум, "на халяву" добавлять музыку, которая жрала от 4 до 8 тысяч тактов (в зависимости от плеера, оф коз).

Да, с палитрами много чего весёлого можно сделать, например анимацию за счёт циклического переключения цветов, я вот несколько лет назад баловался (автор оригинала Mark J. Ferrari, я так красиво рисовать не умею):

Исходник (правда на LabVIEW — на чём умею, на том и пишу), там кода всего ничего, просто сдвиг раз в 50 мс:

Ещё вот тут есть несколько примеров.

Если мне не изменяет склероз, то в таким же образом была реализована анимация экрана загрузки (бегущая полоса) в Win 9x.

off Хотелось бы чтобы когда-нибудь написали про палитры советских ПЭВМ. Похоже там свои велосипеды были.

Согласен, в целом в теме советских ПЭВМ было бы очень интересно покопаться. Возможно через некоторое время.

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

НЛО прилетело и опубликовало эту надпись здесь

Да, безусловно, про артефактинг и многое другое будет рассказано во второй части.

А можно спойлер ко второй части? Переключаться в конце строки между разными 4-цветными CGA-палитрами — это реально, кто-то пользовался?

Это реально, но почти никто не пользовался, потому что нужно очень точно подгонять тайминги, а PC известен их разнообразием. Точно есть в California Games, там при запуске можно выбрать режим CGA MORE-color. Тогда в паре мест будет деление экрана на две палитры.

А жаль, недавний Prince of Persia для БК-0011 показывает, что переключения палитры полезны, там это используется на титульном экране.

С одной стороны, таймер в досовскую эпоху легко перепрограммировался на любую частоту. С другой — по таймеру на экстишках ещё не читались показания независимых часов реального времени, их там не было. По таймеру часы реального времени шли. Поэтому для выживания остальной системы, включая всякие там дисководы, перепрограммировать его надо было на кратную величину и регулярно вызывать оригинальное прерывание (а я ещё клавиатурный буфер очищал, это позволяло совместить реалтайм-обработку нажатий клавиш и системный текстовый ввод, не переполнив буфер после 15 шагов героя — отличная штука, когда надо нажать Retry-Ignore-Abort из-за плохой дискетки посреди игры).

Получается нехорошая штука, потому что частота строк в общем случае не кратна частоте, необходимой системному таймеру :( Не, ну можно сделать «високосное прерывание», конечно — но это уже совсем не весело :(

Да и само прерывание на экстишке больно много тактов жрёт :( так что палитру, наверное, только раз в N строк по таймеру менять можно :( отсюда и изначальный вопрос — хватило ли терпежу хоть одному ежу реально этим пользоваться :) А так, конечно, в теории вроде даже в монохроме «высокого» разрешения можно каждую строчку своим цветом выводить. Но не припомню случаев, кроме всяких демок типа qualcolo.

UPD: даже странно, что, имея перед глазами пример в виде Channel F, не сделали в начале каждой строчки полубайт «какую палитру берём». Экономили, видимо. Или протупили. А ведь сразу на порядок бы графоний улучшился.

Официально он всё же 16 цветов поддерживал. В режиме 160*200 на аналоговом выходе. И игры это поддерживали. О чём в статье и написано.

Уточню по MSX2, у Yamaha V9938 (VDP) можно было использовать палитру из 512 оттенков формата R3G3B3, также был не палитровый графический режим отображения 256 цветов на точку (direct color) формата R3G3B2.

Вот были времена - каждые два года че то новое. а сейчас засовывают это вес в свисток размером с большую флешку и никакой романтики....

Великолепная статья. Есть некоторая недосказанность про палитры Vic-20, C64 и Apple II. Надеюсь будет раскрыто в следующей статье.

А ещё хотелось бы, наконец, узнать почему у CGA такие странные палитры. Вопрос уже лет 30 мучает. Должны быть какие-то технические причины для этого. Я вижу, что 4 палитры из 6 имеют фиксированные яркость и синий цвет (одинаковые для цветов 1-3), а 2 бита управляют зелёным и красным каналами. Кроме цвета 0, он может быть любым из 16 и обычно черный. Оставшие 2 палиты так же имеют фиксированный бит яркости, но 2 бита управляют зелёным+синим и красным каналами. Почему так? Один костыль для нулевого цвета запилили, а ещё 3 костыля для остальных цветов пожалели?

Про Apple II будет во второй части, а про C64 сейчас добавил абзац, как раз попался источник на эту тему.

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

А ещё хотелось бы, наконец, узнать почему у CGA такие странные палитры. Вопрос уже лет 30 мучает. Должны быть какие-то технические причины для этого.

Да вроде всё очевидно: RGBI; контрастность и яркость; экономия, а значит оптимизации и хаки.

Я вижу, что 4 палитры из 6

Формально там две палитры. Ещё две обеспечивает отдельно выставляемый глобальный бит интенсивности.

имеют фиксированные яркость и синий цвет (одинаковые для цветов 1-3), а 2 бита управляют зелёным и красным каналами.

Верно. В палитрах зафиксирован бит синего. Вот и (почти) вся "магия".

Кроме цвета 0, он может быть любым из 16 и обычно черный.

Да, для 00x реализован специальный хак выбора любого из 16 цветов.

И не забываем коричневый цвет. Это специальный хак уже в схеме соответствующих RGBI-мониторов производства IBM. Многие мониторы сторонних производителей его не содержали.

Через композитный выход же коричневого вообще не было.

Оставшие 2 палиты так же имеют фиксированный бит яркости, но 2 бита управляют зелёным+синим и красным каналами. Почему так?

Эта пара палитра + интенсивность возникает в отдельном режиме - Mode 5. И на самом деле она идентична палитре 1 из Mode 4, но в Mode 5 выключена генерация сигнала color burst для композитного выхода, что даёт там чёрно-белую картинку. А так как схема построения композитного и RGBI "выхлопов" была на самом деле общая, опять-таки ради экономии, то из-за её особенностей возникал побочный эффект - на мониторах фиолетовый становился красным.

Один костыль для нулевого цвета запилили, а ещё 3 костыля для остальных цветов пожалели?

Вы просто не представляете себе цену этого "ещё 3" в 1981 году. В оригинальном CGA экономили на всём. Поддержка композитного выхода NTSC была сделана на линиях задержки, например.

*Напомню, родоначальник почти всего IBM Personal Computer (он же IBM Model 5150, он же IBM PC) c 16(!) KB памяти, CGA, клавиатурой, без дисководов и без монитора продавался за 1565 долларов. Тогдашних долларов. В нынешних это ~5500.

Спасибо за ответ. Поищу чуть больше информации про mode 5, пока не очень понятно как именно фиолетовый цвет превращался в красный.

На самом деле, без этой третей палитры всё было бы на своих местах и экономия была бы понятна. Но она выбивается из всего остального. Почему 2 бита управляют зелёным+синим и красным каналами, а не, например, зелёным и красным+синим каналами?

Мне, на самом деле, сложно представить насколько сложно было добавить "ещё 3 костыля" в 1981. Но один костыль есть и его сделали именно выбором любого цвета из 16. Если бы, например, нулевой цвет был всегда чёрным, то я бы с лёгкостью поверил бы в упрощение схемы. Или, например, насколько сложно было сделать выбор из 4х вариантов для каждого из RGBI каналов: брать из бита 0, брать из бита 1, всегда 0, всегда 1? Тогда можно было бы собрать палитры вида синий, жёлтый, белый (привет пакмену :)) или, например, 4 градации серого.

Ещё один момент это палитры печатающих устройств. Первыми настольными, способными на цветную печать, стали матричные принтеры. В цветных матричниках используется стандартная 4-цветная модель CMYK, в целом такой принтер способен воспроизводить палитру из 7 стандартных для них цветов, включая три дополнительных - красный, зелёный и фиолетовый, Y+M, Y+C и C+M, соответственно, цвета заданы в системе команд ESC/P. Но это не полноценный 7-цветный принтер, технология очень не любит смешения цветов, растровых изображений и страдает от быстрого загрязнения жёлтого цвета на ленте за счёт контакта с многоцветным оттиском, даже несмотря на то, что алгоритмы принтера стараются беречь его. Цветной, а скорее, многоцветный матричный принтер более или менее годится только для разноцветного текста встроенным шрифтом и простейшей векторной графики.

Интересно, что цветные матричные принтеры выпускаются до сих пор, например, Epson предлагает модели LX/LQ-300+II в цветном варианте и самое главное, недавно представил новейший DLQ-3500II. Только вот я не могу представить себе современную задачу именно для такого принтера.

А ещё матричник можно складывать до размеров, значительно меньших ширины листа. В теории, даже для телефона можно сделать матричник с выдвижным барабаном :)

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

Ах вот оно что… Тоже поспекулирую, что потому-то мы и не увидели на пека какой-нибудь там SGA. Ему просто не было интересно заботиться об игрушках.

Ну, или потому, что в тот момент никто (кроме разве что разработчика «Поиска», да и тот не до конца — вместо ISA какую-то дрянь спроектировал) не понимал, что платформа IBM вовсе не злобный конкурент их маленькой любимой домашней пивоварне, которую ещё дедушка строил, а просто общий язык, на котором все теперь могут вместе общаться.

Великолепная статья, спасибо!

Единственная просьба, не называйте IBM PC серьезными компьютерами))) Серьезное - это 24 битный цвет, высокое разрешение и ускорение 3д графики без текстурирования в 1989/90 у Sun SPARCstation 1 :)

Мне всё же кажется, что в 1981 году PC XT 5150 был одним из самых серьёзных ПК на рынке. Хотя бы по ориентированности на бизнес, и заодно по цене.

ПК - да, но был еще мир рабочих станций (по сути еще недавно бывших малыми ЭВМ) - вот там серьезная графика начала появляться намного раньше. Но там движущей силой были CAD/CAE системы, а не игры.

На PC особых удобств для CAD не было - ни цветов, ни разрешения:

Вот и я о чем. А тут…! ПК к середине 90х только достигнут этого уровня!

Вот и я о чем. А тут…! ПК к середине 90х только достигнут этого уровня!

На PC такой уровень был ровно тогда же когда и на Sun.

Насколько можно судить, на фото SunDiag запущенный на системе с GS CG12.

GS CG12 это видеоадаптер-ускоритель разработки Matrox. Практически такой же (и за такие же деньги) они выпускали и для PC. MG-3D Ultra назывался.

И у него, кстати, разрешение было больше :) В Sun, ещё со времён их первых аппаратов, было стандартизировано 1152x900 (чтобы влезало в 1 MB видеопамяти с 8-битным цветом), а на PC уже успели к 1280x1024 прийти (при 24-битном цвете как раз в 4 MB умещается).

На PC особых удобств для CAD не было - ни цветов, ни разрешения

Всё там было. Просто в 1990 году цена добавления таких удобств начиналась в районе $5000 (без монитора), поэтому лично вы с ними и не встречались.

off Вспомнил любимую палитру своего детства:

В детстве моими самыми любимыми кадрами во всех диафильмах были именно начальные технологические экраны и логотипы. Само содержание было не так интересно.

До сих пор не знаю их функционала. Особо интересным был этот кадр, который я представлял себе как дверь сейфа с кодовым замком:

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

Нашлось, что это расшифровывается примерно так:

Снято на второй фотоустановке (подиндекс 1) на негатив с порядковым номером 675 по издательскому плану от июня 1984 г.

ТУ 19-241-82

Про диафильмы: цифры на первом кадре, съемочные аппараты, пленки

Установка микрофильмирующая "УДМ-2"

Зарегистрируйтесь на Хабре, чтобы оставить комментарий