51 Отредактировано garnizon (01-04-2021 00:15)

Re: Утилита DaDither: конвертация изображений

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

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

52 Отредактировано sintech (01-04-2021 00:46)

Re: Утилита DaDither: конвертация изображений

Ну, на первом видео (6-секундном) мерцание явно камера усилила.

Эти видео сняты с разной частотой кадров, где мерцание - 60 к/с, где нет 25 к/с.
Получается на втором видео, эффект гигаскрин должен быть идеально выражен. Но вместо квадратиков на записи артефакты. В реальности, на экране квадраты как в эмуляторе и на первом видео.

53 Отредактировано avivanov76 (01-04-2021 01:23)

Re: Утилита DaDither: конвертация изображений

garnizon пишет:

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

Да там как бы и нечего настраивать. Получили первое NMI - включили первую страницу, получили второе - включили вторую. Цикл повторить.

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

Я думаю, что на мерцание куча факторов влияет.

Во-первых, сочетание цветов. Картинка должна быть специально подобрана так, чтобы чередовались похожие цвета. Собственно, в утилите для конвертации настройка есть "Max Flickering". Она как раз определяет, насколько разные цвета будут выбираться. Для Мортал Комбата я поставил 50.

Во-вторых, эффект зависит от монитора/телевизора. Чем больше время послесвечения люминофора, тем меньше мерцание. Возможно, в наших кинескопах использовали люминофор с большим временем, потому что частота развертки меньше.

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

Наверняка что-то еще влияет.

sintech пишет:

В реальности, на экране квадраты как в эмуляторе и на первом видео.

Это про шахматку? Ее утилита генерирует. Сплошной цвет там только на диагонали.

54 Отредактировано Dec (01-04-2021 14:02)

Re: Утилита DaDither: конвертация изображений

avivanov76 пишет:

Вопрос. Правильно я понимаю, что цвет на пересечении должен получаться из цвета строки и цвета столбца?
А то вот я смотрю на эту картинку в эмуляторе - и несколько ячеек этому правилу не подчиняются.

Один и тот же синтетический цвет может быть получен разными вариантами. Например серый (R=0.5, G=0.5, B=0.5) может быть получен как

1) ((R=0, G=0, B=0) + (R=1, G=1, B=1)) / 2
2) ((R=1, G=0, B=0) + (R=0, G=1, B=1)) / 2
3) ((R=0, G=1, B=0) + (R=1, G=0, B=1)) / 2
4) ((R=0, G=0, B=1) + (R=1, G=1, B=0)) / 2

При этом из этих четырех вариантов наименьшее мерцание имеет вариант 3 (зеленый+магента), поэтому варианты 1, 2 и 4 никогда не используются.

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

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

Update

Подправил алгоритм. Теперь формируется такой кадр:

Post's attachments

Attachment icon All.fil 16.29 kb, 186 downloads since 2021-04-01 

Frame.png, 5.47 kb, 512 x 512
Frame.png 5.47 kb, 164 downloads since 2021-04-01 

55 Отредактировано avivanov76 (01-04-2021 17:01)

Re: Утилита DaDither: конвертация изображений

sintech пишет:

На видео 25 к/сек моргания нет, но в реальности оно есть

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

Короче, гигаскрин лучше смотреть вживую. Съемка на 60 к/с преувеличивает мерцание, а съемка на 50 к/с наоборот, преуменьшает.

Dec пишет:

Один и тот же синтетический цвет может быть получен разными вариантами.

Спасибо за объяснение, про разные варианты я не подумал.

Выкладываю сборку с исправленной картинкой.

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

Post's attachments

Attachment icon gigascreen.zip 21.63 kb, 175 downloads since 2021-04-01 

56

Re: Утилита DaDither: конвертация изображений

Так, стоп. Внимательное изучение матчасти показало, что моя реализация гигаскрина, мягко говоря, топорная. Страницами надо "хлопать" в разы чаще. Беру тайм-аут на уточнение некоторых деталей и переделку.

57 Отредактировано garnizon (13-04-2021 02:33)

Re: Утилита DaDither: конвертация изображений

А пока я напишу пару строк, так как очень активно использовал утилиту:

Возможно этот нюанс виден только при активном использовании утилиты, сам не думал что такая мелочь может оказаться неудобной:
По умолчанию, в некоторых режимах стоит "15 colors". Вообще это сам по себе не естественный для Агата набор.
Ну т.е. можно конечно подключать не родной монитор и потерять один оттенок, но в реальности такое не встречалось и под такую урезку никто не писал и писать, я думаю не станет. Все известные на сегодняшний день проги, знают или 8 или 16.
Т.е. если "15 colors" и оставлять, то желательно не цветностью по умолчанию.


Еще есть несколько пожеланий, правда их отсутствие никак не влияют на великолепность утилиты, но все же, может автор поместит их в "список добрых дел" на будущее:

-Здорово не хватает возможности открывать и просматривать ранее созданные FIL. Т.е. со всеми установками что сохранялись в хвост.
Когда куча файлов, а кроме реала с картой цветности их глянуть особенно нечем, грустно.


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


-Надеюсь что в будущем будут поддержаны режимы отображения Apple.

58 Отредактировано garnizon (05-05-2021 12:52)

Re: Утилита DaDither: конвертация изображений

Лучшее на свете описание режимов отображение Apple][

Post's attachments

Attachment icon apple-formats-2.1.rar 4.41 kb, 168 downloads since 2021-05-05 

59 Отредактировано Dec (14-04-2021 05:16)

Re: Утилита DaDither: конвертация изображений

garnizon пишет:

По умолчанию, в некоторых режимах стоит "15 colors".

В режиме 16 цветов есть "светло-черный" цвет. И этот цвет частенько "перехватывает" на себя темные оттенки цветов. Т.е. условный темно-зеленый начинает отображаться не как чередование зеленый+черный, а как сплошной "светло-черный". В режиме "15 colors" я просто откидываю этот "светло-черный". Но раз уж есть недовольство выбором режима по умолчанию, то я изменю его на "16 colors".

garnizon пишет:

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

Добавлю.

garnizon пишет:

Лучшее на свете описание режимов отображение Apple

Поизучаю. Не очень понятно, какие цвета используются в Apple режимах - родные от Apple или же агатовские? Pixel aspect ratio?

garnizon пишет:

Здорово не хватает возможности открывать и просматривать ранее созданные FIL.

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

60 Отредактировано garnizon (14-04-2021 09:56)

Re: Утилита DaDither: конвертация изображений

Все описание в документе - относится к оригинальным Apple][. И набор цветов у них свой. С уточнением что 10 и 5 цвет выглядят на реальной машине одинаково, хотя в эмуляторе AppleWin искусственно они по разному отображаются (тоже наверное имеет право на жизнь). Подробности в сообщении 3 тут: http://forum.agatcomp.ru//viewtopic.php?id=135
Вероятно в таком виде инфа полезна для отдельной вкладки "Apple" утилиты.


Следующая инфа,  вероятно полезна для дополнения вкладки "АГАТ" утилиты:
У агат есть только HiRes, других графических эпловских режимов нет. Причём, по терминологии выше, он цифровой и с четкими горизонтальными границами пикселей. Причём заливки нет, т.е. всегда полосатое.
И цвета, "подключают для себя" цвета #0, #1, #2, #4, #5, #7 из основного набора, как в таблице тут:
http://agatcomp.ru/agat/Hardware/Monic.shtml
Т.е. хоть как-то картинка похожа будет на оригинальную эпл по цветам.
Однако по совокупности изменений режима, конечная картинка может выглядеть несколько иначе на вид.
Поэтому я в описании хвоста отделил эпловский HIRES от агатовского.
http://agatcomp.ru/agat/PCutils/EXIF.shtml

61 Отредактировано garnizon (14-04-2021 14:57)

Re: Утилита DaDither: конвертация изображений

И в агатовском Hires можно задавать палитру для этих 6 цветов если плата палитр есть.
У эпла только свои

62 Отредактировано Dec (14-04-2021 15:05)

Re: Утилита DaDither: конвертация изображений

Update:
- Режим 16 Colors по умолчанию.
- Возможность добавления комментария.
----
Я не имею ни одной идеи, как автоматически конвертировать во что-то более менее адекватное в Hires, поэтому отложено на неопределенное будущее.
----
Плагин для TotalCommander для просмотра fil файлов с графикой.

63

Re: Утилита DaDither: конвертация изображений

Dec пишет:

- Возможность добавления комментария.


Вот это от души спасибо, прям приятно. Только вот я не понял как пользоваться, там получается вводиш бесконечную строку.
Сильной наглостью будет если попросить это сделать как-то более очевидно и визуально понятно.
Ну скажем прям 12 строчек по 16 символов. Вроде это не шипко сложно, а удовольствия пользователям море :)

64

Re: Утилита DaDither: конвертация изображений

garnizon пишет:

сделать как-то более очевидно и визуально понятно.

В окне не осталось свободного места (выберите gigascreen и увидите).

65 Отредактировано garnizon (15-04-2021 15:39)

Re: Утилита DaDither: конвертация изображений

Не понял, можно как-то другими словами или картинкой?

Ну как минимум можно ограничить ввод 192 символами..

66

Re: Утилита DaDither: конвертация изображений

В окне нет свободного пространства для размещения "12 строчек по 16 символов".

67 Отредактировано garnizon (15-04-2021 17:44)

Re: Утилита DaDither: конвертация изображений

ДА буковки то я понимаю, два разе не надо, я смысла не понял - туплю .

Dec пишет:

(выберите gigascreen и увидите)

Выбрал (аттач) в каком месте смотреть чтоб понять

Post's attachments

Attachment icon WIN.png 349.4 kb, 87 downloads since 2021-04-15 

68 Отредактировано Dec (15-04-2021 18:19)

Re: Утилита DaDither: конвертация изображений

У меня не такой большой монитор. И окно в текущем виде занимает почти всю высоту монитора. А бывают мониторы и еще меньше.

Post's attachments

Attachment icon Untitled.png 25.17 kb, 82 downloads since 2021-04-15 

69

Re: Утилита DaDither: конвертация изображений

Dec пишет:

В окне нет свободного пространства для размещения "12 строчек по 16 символов".

Да поставьте просто MaxLength=192 текстбоксу.

70 Отредактировано avivanov76 (16-04-2021 16:41)

Re: Утилита DaDither: конвертация изображений

Гигаскрин2 от создателя гигаскрин1 :)

Как оказалось, на Спектрумах гигаскрин делается не переключением кадров, а переключением строк. В связи с этим пришлось гоняться за телевизионным лучом, программку переписать полностью (пару раз) и заодно словить кучу самых разных проблем.

Проблема 1: частоты. В отличие от Спектрума, у Агата ДК и процессор работают от разных тактовых генераторов. Поэтому надо не просто выждать нужные 65,3 такта процессора, но еще и принять меры на случай уползания момента переключения. Ясно, что дробное число тактов отмерить нельзя, поэтому момент переключения постепенно сползает к началу гасящего импульса. Но за 8 строк он далеко не уползает и остается внутри гасящего импульса, а там приходит новое прерывание и все заново синхронизируется. Тем не менее, с кварцем 14 МГц момент переключения поползет вперед и переключение будет где-то посреди строки.

Проблема 2: время вызова обработчика. Процессор может выполнять какую-то инструкцию (до 7 тактов), плюс сам вызов занимает 7 тактов, плюс команда STA производит запись только спустя 3 такта. Итого задержка от начала гасящего импульса может достигать 17 тактов, в то время как сам гасящий импульс имеет длительность 16 мкс.

В связи с этим пришлось отказаться от штатного способа установки обработчиков через адреса $36F, $37E, потому что обработка прерываний в DOS занимает слишком много времени. Кроме того, основной код программы не должен содержать инструкций длинее 5 тактов :) У меня основной код - это цикл опроса клавиатуры, поэтому там все нормально. Но вообще, делать что-то полезное одновременно с показом гигаскрина довольно трудно, потому что процессор 80% времени проводит внутри обработчиков прерываний.

Проблема 3: IRQ возникает в начале 7, 15, 23 и т.д. строк. Со строками 0-6 возникает конфликт двух обработчиков: в 311 строке предыдущего кадра вызывается IRQ, а в нулевой строке его перешибает NMI. Пришлось изменить код еще раз и заставить обработчик IRQ во время кадрового гасящего импульса быстренько выходить, а NMI научить переключать строки. Когда это не заработало так, как ожидалось, то выяснилось, что NMI вызывается синхронно со строчным гасящим импульсом, а не с началом отображения строки. (Владимир выкладывал картинку, но я эту тонкость с импульсами прохлопал.)

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

Мерцание, к сожалению, все равно ощущается, хотя, на мой взгляд, умеренное.

Post's attachments

Attachment icon gigascreen.zip 21.69 kb, 176 downloads since 2021-04-15 

71 Отредактировано Dec (16-04-2021 06:35)

Re: Утилита DaDither: конвертация изображений

@avivanov76

Либо я что-то не понимаю, либо что-то не понимаю я.

А откуда информация что на Спектрумах гигаскрин делается не переключением кадров, а переключением строк? Насколько мне известно, классический гигаскрин на Спектрумах делается именно переключением кадров.

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

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

72 Отредактировано avivanov76 (16-04-2021 16:46)

Re: Утилита DaDither: конвертация изображений

Dec пишет:

А откуда информация что на Спектрумах гигаскрин делается не переключением кадров, а переключением строк? Насколько мне известно, классический гигаскрин на Спектрумах делается именно переключением кадров.

Я смотрел здесь и здесь.

В частности, вот этот абзац:

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

Как раз Игорь говорил про "волнение над отмелью".

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

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

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

Я согласен, в режиме 256x256 построчное переключение, скорее всего, будет выглядеть хуже, потому что в смежных строках окажутся одинаковые строки шахматки. Но и режим 256x256 на Агате менее интересен для гигаскрина, потому что цветов всего 4. Ну, в теории 5, если учесть аппаратные палитры, но это не сильно помогает, потому что цвета первичные и их наложение будет давать заметное мерцание.

73 Отредактировано garnizon (16-04-2021 17:41)

Re: Утилита DaDither: конвертация изображений

avivanov76 пишет:

(и на экране, в отличие от эмулятора, это видно).

А как бы видео-то увидеть?

Может Константин опять подтянется?


Dec пишет:

У меня не такой большой монитор. И окно в текущем виде занимает почти всю высоту монитора. А бывают мониторы и еще меньше.

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

74 Отредактировано Dec (16-04-2021 18:16)

Re: Утилита DaDither: конвертация изображений

avivanov76 пишет:

Я смотрел здесь и здесь.

Понятно. В случае zx это переключение экранов каждую строку нужно как раз для того, что бы перевести соседние строки в противофазу.

avivanov76 пишет:

Но, видимо, на заметность мерцания влияет размер областей одного цвета.

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

avivanov76 пишет:

В случае Агатовского режима 128x128 происходит похожая ситуация: каждый пиксель занимает две строки (и в ширину он достаточно большой).

Правильно ли я понимаю, что видиосистема читает память/палитру дважды для каждой строки? Первый раз для верхней части строки, и второй раз для нижней части? И в вашем алгоритме происходит переключение страниц не только при смене строки, но и в момент перехода от верхней части к нижней части строки?

Если да, то тогда имеем следующую исходную ситуацию (Т - темный пиксель, Я - яркий пиксель, с учетом их физического размера):

   Фрейм 0       Фрейм 1
0: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ... 
0: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ...
1: ЯЯТТЯЯТТ...   ТТЯЯТТЯЯ...
1: ЯЯТТЯЯТТ...   ТТЯЯТТЯЯ...
2: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ...
2: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ...
   ...           ...

И при переключении каждую строку результат будет таким:

   Фрейм 0       Фрейм 1
0: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ... 
0: ЯЯТТЯЯТТ...   ТТЯЯТТЯЯ...
1: ЯЯТТЯЯТТ...   ТТЯЯТТЯЯ...
1: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ...
2: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ...
2: ЯЯТТЯЯТТ...   ТТЯЯТТЯЯ...
   ...           ...

Т.е. переключение каждую строку приводит к тому, что двойной пиксель просто смещается на полустроку вниз. А должно быть в идеале так:

   Фрейм 0       Фрейм 1
0: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ... 
0: ЯЯТТЯЯТТ...   ТТЯЯТТЯЯ...
1: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ...
1: ЯЯТТЯЯТТ...   ТТЯЯТТЯЯ...
2: ТТЯЯТТЯЯ...   ЯЯТТЯЯТТ...
2: ЯЯТТЯЯТТ...   ТТЯЯТТЯЯ...
   ...           ...

Т.е. лучше использовать иную стратегию переключения.

Оффтоп: И получается, что меняя страницы в правильный момент, можно создать программный режим 128x256?

garnizon пишет:

Просто создание под определенный размер экрана, кажется не лучшая идея.

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

75

Re: Утилита DaDither: конвертация изображений

Dec пишет:

Правильно ли я понимаю, что видиосистема читает память/палитру дважды для каждой строки? Первый раз для верхней части строки, и второй раз для нижней части? И в вашем алгоритме происходит переключение страниц не только при смене строки, но и в момент перехода от верхней части к нижней части строки?

Да, именно так. У меня переключение происходит каждую телевизионную строку.

Dec пишет:

Т.е. переключение каждую строку приводит к тому, что двойной пиксель просто смещается на полустроку вниз.

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

Dec пишет:

Оффтоп: И получается, что меняя страницы в правильный момент, можно создать программный режим 128x256?

Да, вполне.