Начало здесь

Создание графики

Сложное — это не горы деталей,
а свет, что положен туда, где темно.
Глаз различает цвета в перспективе, —
компьютер выводит лишь плоское дно.

Создание графики для режима Hi-Color — ключевой вопрос. Сегодня единственным способом сделать это удобно является редактор ZX-Paintbrush 2.6.4 для Windows. Он был специально доработан в 2017 году для использования режимов Hi-Color и (на закуску) ULA+. Поэтому если вы видели ранние версии, то приготовьтесь к тому, что в старших версиях это совсем другая программа. Аналогов не имеет.

Даже если художник предпочитает другие редакторы, ZX-Paintbrush потребуется как универсальный конвертор: может конвертировать из BPM, PNG и т. д. в формат SCR (и обратно), а также конвертировать обычный SCR в форматы с расширенными атрибутами (SCR и MLT).


Для переключения в Hi-Color
используйте кнопку с буквами «S/T»

Очень помогают в раскраске режимы Character Set Grid и Pixel Grid из меню View
Очень помогают в раскраске режимы Character Set Grid и Pixel Grid из меню View

ZX-Paintbrush позволяет выделять и переносить области по пикселям и атрибутам с предпросмотром на новом месте. Можно копировать изображение с атрибутами или без. Механизм переноса фрагментов — как в Deluxe Paint и Personal Paint на Амиге. Фрагменты сохраняются в формате ZXS для создания коллекций и быстрой сборки картинок. Проблемы при создании мультиколорной графики носят нетехнический характер.

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

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

В то же время, если раньше художник оперировал цветами в 768 атрибутных квадратах, то теперь ему это надо делать для 6144 атрибутных рядов, что в 8 раз больше. Графика Hi-Color требует опоры на изображение, отрисованное в обычных атрибутах, и опыта — как собственного (который надо наработать), так и других художников. Можно порекомендовать ознакомиться с работами художника Шеврон, начиная с «High Colour».

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

Мультиколорная сетка
Мультиколорная сетка

Пример новой (для Спектрума) сеточной раскраски на размышление:

Хабр в мультиколорной сетке
Хабр в мультиколорной сетке

Согласитесь, смотрится непривычно?

Форматы мультиколора

Формат — не просто размер и вес.
Жёлтый экран орёт про тоску.
Белый молчит, как застывший отвес.
Красный подносит дуло к виску.

Далее под мультиколором будет пониматься вывод двух (из 16) цветов для отдельных строк или частей знакоместа (8×2, 8×4). Под гигаскрином будет пониматься циклическое переключение двух экранов, позволяющее смешивать цвета на этих экранах и увеличивающее число видимых цветов до 102 (за счёт инертности зрения). Под мультигигаскрином следует понимать использование обеих техник для получения изображения на экране.

SCR - Yoyo Bear  от Piesiu (2014)
SCR - Yoyo Bear от Piesiu (2014)

Для работы с аппаратным мультиколором нас интересует только один формат изображения — SCR (12288 байт), т. к. он не требует преобразования. Файл этого формата содержит 6144 байта монохромного изображения и 6144 байта расширенных атрибутов. Байты обеих частей имеют нелинейную раскладку, соответствующую строению экрана ZX Spectrum. Размер фиксированный — 12288 байт. См. примеры формата.

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

MLT – Robocop от Ref (2024)
MLT – Robocop от Ref (2024)

MLT — формат видеорежима 2
(Mode 2) от компьютера SAM Coupé. Файлы этого формата содержат 6144 байта монохромного изображения (нелинейная раскладка) и 6144 байта расширенных атрибутов, хранящихся последовательно. Они легко конвертируются: достаточно загрузить их в ZX Paintbrush и экспортировать оттуда в SCR.
Размер фиксированный — 12288 байт. См. примеры формата.


MC — формат линейного мультиколора. Как и SCR с MLT, он содержит 6144 байта монохромного изображения и 6144 байта расширенных атрибутов. Но байты обеих частей имеют линейную раскладку, что неудобно для их вывода на экран. Встречается крайне редко. Размер фиксированный — 12288 байт. Конвертер DaDither умеет загружать и выгружать в этот формат.

SS4 конвертированный в SCR без доработки
SS4 конвертированный в SCR без доработки

SS4SSX – формат видеорежима 4
(Mode 4) от компьютера SAM Coupé. Картинки в этом формате имеют разрешение 256×192, 4 бита на пиксель (16 цветов) при палитре в 128 цветов, а все байты изображения хранятся линейно.

Интересен он главным образом разрешением «как на ZX Spectrum» и возможностью конвертации в формат MLT через конвертер DaDither.



Потери при этом, могут быть, невелики или приемлемы. Размер нефиксированный. В некомпрессированном виде часто занимает 24617 байт. На SAM Coupé принято хранить графику в этом формате даже в случаях когда изначально она была создана в Mode 2 (а затем компрессировать). См. примеры формата.


До наступления в 2017–18 гг. эпохи полноэкранного программного мультиколора на Спектруме огромной популярностью у отечественной демосцены пользовался графический редактор multiArtist от TmK и riskej. Он служит для создания графики в режиме «мультигигаскрин» (совмещение мультиколора с гигаскрином). Эта графика может быть (ограниченно, не любая картинка) конвертирована.

MG1 конвертированный в SCR без доработки
MG1 конвертированный в SCR без доработки

MG1 — мультигигаскрин 8×1.
Ограничен разрешением 128×192 (16×24 знакоместа).

Конвертируется в DaDither.
После конвертации в мультиколор выглядит почти адекватно.
Доводка затруднительна.
Размер фиксированный — 19456 байт. См. примеры формата.

MG2 конвертированный в SCR без доработки
MG2 конвертированный в SCR без доработки

MG2 – полноэкранный мультигигаскрин 8×2.

Конвертируется в DaDither.
Обычно требует ручной доводки для восстановления детализации.
Размер фиксированный — 18688 байт. См. примеры формата.

MG4 конвертированный в SCR без доработки
MG4 конвертированный в SCR без доработки

MG4 – полноэкранный мультигигаскрин 8×4.

Конвертируется в DaDither.
Обычно возможно подобрать режим, в котором доводка картинки в мультиколоре будет проста, понятна и касаться в основном яркостей.
Размер фиксированный — 15616 байт. См. примеры формата.


Про адекватную конвертацию в мультиколор форматов обычного гигаскрина (IMGGSCICE), триколора (3), мультигигаскрина (MGS), стеллар (STL) и других форматов, в которых преобладают цвета, полученные смешением 16 цветов Спектрума, лучше забыть. Результат гарантированно не будет удовлетворительным.

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

Шаблон для вывода

А не учи ты нас рисовать!
Мы и сами умеем выверты...

После того как картинка была нарисована/конвертирована, её надо вывести на экран. Предлагаю простейшую выводилку с монозагрузчиком. Для компиляции в SJASMplus необходимо в директории с текстовым файлом программы hw-mult.asm создать директорию inc и положить в неё BasicLib.asm, а также директорию res с картинкой (например, nextipede.C). После компиляции (sjasmplus.exe hw-mult.asm) вы получите два файла: hw-mult.tap и hw-mult.trd, которые можно приложить к релизу на фестивале/демопати, чтобы его организаторы смогли показать эту картинку запуском на реальном железе.

; hw-mult.asm
        device          ZXSPECTRUM48
        
        ; monoloader
        MODULE          boot
        INCLUDE         inc/BasicLib.asm

diskbasic
        db              #00,#01                 ; строка 01
        dw              line1end - line1
line1
        db              #EA                     ; REM
        ld              de,(#5CF4)
        ld              bc,#3005                ; NN05, где NN=30 - длина в секторах
        ld              hl,scrstart             ; картинка 12288 байт
        call            #3D13
        ld              de,(#5CF4)
        ld              bc,#0105                ; NN05, где NN=01 - длина в секторах
        ld              hl,ldstart              ; код демонстрации 59 байт
        call            #3D13
        jp              ldstart                 ; запуск кода
line1end
        LINE : db clear,val,'"48000"',':',rand,usr,val,'"23872"',':',new : LEND
diskbasend

tapebasic
        LINE : db clear,val,'"48000"',':',load,'""',code : LEND
        LINE : db load,'""',code,':',rand,usr,val,'"48896"',':',new : LEND
tapebasend
        ENDMODULE

        org             #C000                   ; 49152
scrstart
        INCBIN          res/nextipede.C
scrend

        org             #BF00                   ; 48896
ldstart
        xor             a
        out             (#FE),a
        ld              (23624),a               ; BORDCR, цвет бордюра
        
        ld              hl, #C000               ; переброска изображения
        ld              de, #4000
        ld              bc, #1800               ; 6144
        ldir
        
        ld              hl, #C000+6144          ; переброска расширенных аттрибутов
        ld              de, #6000
        ld              bc, #1800               ; 6144
        ldir
        
        in              a,(#FF)
        or              2
        out             (#ff), A                ; Включаем мультиколор Timex
        ld              a, 32                   
        ld              bc, #EFF7
        out             (c), a                  ; Включаем мультиколор ZX Evolution
        
space
        ld              a, #7F
        in              a, (#FE)
        bit             0, a                    ; если нажали Space, то
        jr              nz, space               ; выходим

        xor             a                       
        out             (#ff), a                ; Выключаем мультиколор Timex
        ld              bc, #EFF7
        out             (c), a                  ; Выключаем мультиколор ZX Evolution        
        ret

ldend

        display "-------- HW.Mult$ ----------"
        display "START-END: ",/d,scrstart," (",/h,scrstart,") - ",/d,scrend," (",/h,scrend,")"
        display "LENGTH:    ",/d,scrend-scrstart," (",/h,scrend-scrstart,")"
        display "-------- Multiview ---------"
        display "START-END: ",/d,ldstart," (",/h,ldstart,") - ",/d,ldend," (",/h,ldend,")"
        display "LENGTH:    ",/d,ldend-ldstart," (",/h,ldend-ldstart,")"
        display "----------------------------"


        define          fn_disk "hw-mult.trd"
        emptytrd        fn_disk
        savetrd         fn_disk, |"HW.Mults.B", boot.diskbasic, boot.diskbasend - boot.diskbasic
        savetrd         fn_disk, |"HW.Mult$.C", scrstart, scrend-scrstart
        savetrd         fn_disk, |"Multview.C", ldstart , ldend-ldstart

        define          fn_tape "hw-mult.tap"
        emptytap        fn_tape
        savetap         fn_tape , BASIC, "HW.Mults" , boot.tapebasic , boot.tapebasend - boot.tapebasic, 10
        savetap         fn_tape , CODE, "HW.Mults$" , scrstart , scrend-scrstart
        savetap         fn_tape , CODE, "Multiview" , ldstart , ldend-ldstart

Продолжение следует

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