Adventurer #14
30 июня 2003

Tutorials - новое слово в демомакинге: чанковый движок 2x2.

<b>Tutorials</b> - новое слово в демомакинге: чанковый движок 2x2.
Chunks 2x2              
Poisoned CyberJack/TBK  

Новое слово в демомакинге :)

Приветствую всех, считающих се-
бя кодерами - крутыми и так себе!
Сегодня я попытаюсь вас удивить
:)

Современный  кодинг  (на
Спектруме, of coz) в основном ос-
нован на чанковых движках. И это
правильно - ибо иначе очень слож-
но реализовать многие вещи. Объ-
яснять подробнее не буду - все бы-
ло высказано уже весьма давно.
Тем более, выбор уже сделан...

Чанки бывают разные. Вопреки
распространенному мнению вся-
ких гопников, разбирающихся в
коде, как я в китайской кулинарии,
чанки - это не только квадратики
4х4 :) Грубо говоря, чанки - это
такая технология, при которой эк-
ран заполняется блоками, имею-
щими одинаковый размер; обычно
изображение строится не сразу на
экран, а в буфер; мы имеем произ-
вольный доступ к любому элемен-
ту изображения, независимо от
других (в отличие от нашего пла-
нарного экрана); и обычно мы ри-
суем картинку в большем коли-
честве цветов, чем имеет наш ZX
(15, не забыли?) Так как ликбез
полных чайников не входит в мои
планы, то на этом сумбурном опи-
сании я этот вопрос закрываю - ко-
му надо, могут найти информацию
в других изданиях (Deja Vu, De-
mo or Die, Buzz, etc)

Так вот - чанки бывают разные. На
Спеке в основном юзаются раз-
мером 4х4 (двух видов - пиксель-
ные [Refresh, Dogma, Inbetween]
и мультиколорные [Eye Ache 1/2,
Rage, Stellar Contour]), так как
это оптимальное соотношение
между разрешением и объемом
экрана. Разновидности 8х8, как
чисто атрибутные [любые демы го-
дов 95-97], так и пиксельно-атри-
бутные [Emergency, 63Bit3,
Smile_4K], из-за низкого разре-
шения сильно проигрывают, так
как сделать что-то нормальное в
32х24 почти нереально. О, забыл
сказать - говоря о коде, я имею в
виду 3D - ибо это наиболее сложное
(следовательно и интересное) при-
ложение кодерских способностей.

Все это было опробовано очень
давно (97й год), и многим уже на-
било оскомину. Неужели нет ника-
кой альтернативы?

А выход есть - и тоже давно из-
вестен. Помните такие вещи
Higher State / 3SC, Over The Top
/ Enigma, Matricks / Baze? Ну
да -я говорю о чанках 2х2.

Многие кодеры, которые давно уже
не новички, сейчас недоверчиво
усмехаются. Да-да, на первый
взгляд пользы от такого размера
чанок мало, так как экран увеличи-
вается аж в 4 раза по сравнению с
4х4 (а, следовательно, и кадр бу-
дет строиться в 4 раза дольше) -
да и в память такой экран затол-
кать не так-то и просто. А исполь-
зование крохотных окошек - дале-
ко не выход. Да еще фишка - в чан-
ках 2х2 мы имеем всего 5 цветов,
что ужасно мало для реализации
освещения в 3D-частях (и Phong, и
Gourado, и даже Flat смотрятся
просто ужасно). В довершение ко
всему еще и c2p тормознее, так
как приходится больше читать и
меньше писать (по сравнению с
4х4, опять же).

Но! Я не стал бы просто так тра-
тить ваше время (а заодно и свое,
которое мне намного дороже :),
если бы не реализовал чанки 2х2 в
нашей деме, которую мы, к сожа-
лению, не смогли привести на
CAFe'02, да и сейчас не можем ни-
как довести до конца :((( Вот об
этом я вам сейчас и расскажу...

Наиболее просто решить проблему
нехватки 5ти цветов. Само собой
дизеринг. Кто не в курсе - в
каком-то Deja Vu была хорошая
статья про это. Кстати, о
птичках. Сравнительно недавно в
Psychoz#11c была опубликована
статья Dark/X-Trade о дизеринге
в чанках 2х2. Несмотря на все мое
уважение к данному человеку, код
дизеринга там ужасно слабый. Еще
в 2000м году мы на пару с
Baze/3SC придумали правильную
рутину c2p для чанок 2х2, а в
своей интре Matricks он как раз и
применил дизеринг в 16 цветов
(правда, c2p там его персональная
более тормозная). Код c2p такой:

sp - chunk screen
de - 1st line on spectrum screen (#401F)
bc - 2nd line on spectrum screen (#4120)
pop hl
ld a,(hl)
pop hl
ld l,(hl)
ld h,a
ldd
ld a,(hl)
ld (bc),a
итого: 10+7+10+7+4+16+7+7= 68tct

[напомню, что у Dark'а два зна-
коместа отрисовываются за 90+94
такта, то есть 92 такта в среднем]

Вся хитрость в использовании ко-
манды LDD. Небольшая особен-
ность - картинка рисуется пере-
вернутой по горизонтали, так как
SP растет вверх, а BC и DE умень-
шаются. Чанки вида %---xxxx0. Для
дизеринга прийдется ставить таб-
лицы графики в разные банки и ра-
ботать на одном экране. Объяснять
подробно не буду, так как это все
равно уже пройденный этап :) Кому
все-таки интересно и непонятно -
пишите мне, объясню.

Как видите, такая скорость вполне
нормальна - весь экран отрисовы-
вается примерно за 3 фрейма. Но
проблема слишком большого экра-
на остается -поэтому это неполно-
ценное решение.

Экспериментируя с разными движ-
ками и фильтрами, мне пришла в
голову великолепная мысль :) А
что если мы будем обсчитывать эк-
ран не полностью, а лишь частично
а оставшуюся часть заполнять
программно, скажем, через ли-
нейную интерполяцию? Тогда мож-
но будет не использовать тормоз-
ной фильтр (a la Sair00s) для
скрытия дефектов движка -то есть
получаем выгоду и в скорости, и в
объеме экрана. Есть некоторая па-
раллель с амижным режимом HAM8
(насколько я понял), где цвет груп-
пы пикселов зависит от узлового
и последние демы работают в раз-
решении вовсе не 640х480 или
320х240, а намного меньше. Так
как я не амижник (совсем), то мо-
жет быть сейчас сказал огромную
глупость - но это неважно :) Речь
идет о Спектруме.

Что я подразумеваю под линейной
интерполяцией? Я обсчитываю не
каждый чанк экрана, а через один
по горизонтали - а пропущенные
получаю как среднее между двумя
уже известными. Типа так:

так делают обычно:
!c0!c1!c2!c3!c4!c5!c6!c7!c8!

а так делаю я:
!c0!--!c2!--!c4!--!c6!--!c8!
 (c0+c2)/2   (c4+c6)/2

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

Если интерполяцию проводить от-
дельной операцией, то никакой вы-
годы в скорости мы не получим,
так как дело это не слишком стре-
мительное (достаем из памяти два
числа, складываем, по таблице
достаем результат и заносим его в
память - тактов 40 на один чанк
уйдет). Поэтому я извратился и
совместил интерполяцию с c2p:

sp - chunk screen
de - spectrum screen
 h - previous chunk
pop bc
ld a,(bc)
ld l,a
ld a,(hl)
ld (de),a
inc h
inc d
ldi
dec d
ld h,b
итого: 10+7+4+7+7+4+4+16+4+4= 67tct

Мдаааа :) Попытаюсь объяснить
доступно.

Для того, чтобы отрисовать знако-
место, (8х2 пиксела) нам надо учи-
тывать 3 чанка:

!             !             !
! -- c0 -- c1 ! -- c2 -- c3 !
!             !             !
 ^       ^     ^

У нас есть 16 таблиц (так как чанк
в предыдущем знакоместе может
быть любого цвета), и адрес гра-
фики высчитывается так (для вто-
рого знакоместа):

c1*#0100 + c2*#0010 + c3

Чанки вида %110хххх0, те #E0-#FE.
В конце сектора находится таблица
младших адресов графики, то есть
с адресов #E0E0, #E2E0, etc. В са-
мих же 32 секторах находится
графика.

Нестыковка вышла - так как графи-
ка и таблица умножения располо-
жены в одних и тех же адресах, то
происходит их наползание друг на
друга. Я обошел это, выкинув два
цвета :) То есть у меня не 16 реа-
льных цветов, а 14. Но так как
удобнее работать в шестнадцати
цветах, поэтому я просто совмес-
тил 0 и 1, 14 и 15 цвета (в таб-
лице "умножения" выставлены
одинаковые значения). Можно во-
обще-то сделать и честные 16
цветов, но только за счет замедле-
ния c2p -поэтому я выбрал такой
выход.

Дизеринг у меня сделан при помо-
щи двух банок с разной чанковой
графикой - для четных строк и для
нечетных. Все это жрет много па-
мяти, да еще и работает на одном
экране :)

Что же нам все это дает? Мы имеем
следующее - по сравнению с чан-
ками 4х4 размер экрана увеличил-
ся в два раза (а не в четыре), эк-
ран полностью отстраивается при-
мерно за три фрейма, нам не ну-
жен дополнительный фильтр, ка-
чество картинки на порядок лучше
(еще бы, ведь чанк уменьшился в 4
раза). То есть мы проигрываем в
скорости, но выигрываем в ка-
честве. На таком движке вполне
возможно что-то делать, что мы и
попытались доказать в своей деме.

В приложении к журналу вы найде-
те исходники генерилки чанковой
графики и c2p в текстовом фор-
мате, но к сожалению для многих,
с синтаксисом Storm'а :) А также
небольшую  демонстрацию
движка.

respect to all spectrum's coders
and Adventurer's readers!!!

(c) Triebkraft



----------------------------------
Я, конечно, слегка стормозил со
своей статьей (а заодно и с демой
:( ), и чтоб хоть как-нить скомпен-
сировать этот негативный момент,
предлагаю вашему вниманию оп-
тимизированный вариант c2p-рути-
ны с интерполяцией. Написал его
JtN//4d, комментариев не будет :)
Принцип работы такой же, да и во-
обще - надо головой больше ду-
мать.

pop hl          ;10
l,(hl)          ;7
ld a,h          ;4
exa             ;4
ld h,a          ;4
ldd             ;16
ld a,(hl)       ;7
ld (bc),a       ;7
;=59t!!!!!!!!!!!



Другие статьи номера:

Editorial - Our Time Machine.

Editorial - Editorial.

Editorial - Семь лет журналу, четырнадцатый номер. Магические цифры.

Editorial - о новой оболочке журнала.

Editorial - адреса редакции и авторы журнала.

News - news from: Alco/Anarchia, Studio Stall, Hooy-Program, Tbk+4d, C-jeff, Colour of Magi, Skrju, Triumph, n-Dicovery, Perspective Group, Cronosoft, Stefano.

News - новости от: Alco/Anarchia, Studio Stall, Hooy-Program, Tbk+4d, C-jeff, Colour of Magi, Skrju, Triumph, n-Dicovery, Perspective Group, Cronosoft, Stefano.

Scene - опрос демокодеров об их любимых демах.

Scene - Democoders Questionnarie: best zx demo.

Scene - современные тенденции в демомэйкинге.

Scene - Modern tendencies in demomaking.

Scene - приключение Финнов в России: отчет о поездке на русское пати CAFe'2002.

Scene - The Scene Behind A Curtain.

Scene - эпический отчет о поездке CPU на CAFe'2002.

Scene - глобальный отчет CPU о поездке на беларуское пати Millennium'1902.

Scene - подробный отчет с ростовского пати Paradox'2002.

Scene - отчет с Словацкого 8-битного пати Forever Quatro 2003.

Scene - интервью с известным польским спектрумистом Yerzmyey/Hooy-Programm.

Scene - Interview with Yerzmyey/Hooy-Programm.

Scene - беседа Sq, Diver, CJ о судьбе газеты Insanity.

Scene - интервью с Brainwave взятое на CAFe'2002.

Scene - интервью с Color of Magic взятое на CAFe'2002.

Scene - интервью с Mayhem взятое на CAFe'2002.

Scene - интервью с Power Of Sound взятое на CAFe'2002.

Scene - интервью с группой Antares взятое на CAFe'2002.

Scene - интервью с группой Triumph взятое на CAFe'2002.

Scene - интервью с группой OCA взятое на CAFe'2002.

Scene - интервью с группой Jeez взятое на CAFe'2002.

Scene - интервью с украиским спектрумистом Looker взятое на CAFe'2002.

Scene - интервью с Kacuk взятое на CAFe'2002.

Scene - интервью с группой Phantom Family взятое на CAFe'2002.

Scene - интервью с группой Master Home Computers Group взятое на CAFe'2002.

Scene - интервью с группой Placebo взятое на CAFe'2002.

Scene - интервью с Screamer'om взятое на CAFe'2002.

Scene - интервью с организаторами CAFe'2002 - xPasha, Adam Bazaroff и Unbeliever.

Interface - Forever Music compo psychology.

Interface - психология голосования за музыку на европейских демопати на примере Forever.

Interface - Проблемы русской спековской пресс сцены. Обзор современной прессы.

Interface - история создания демы Summermilk в виде IRC лога.

Interface - история создания виртуального пати Antique Toy.

Interface - History of Antique Toy.

Reviews - обзор демок за 2002 год: Alter Ego, Reject, Laya, Lovemaker, Harm, Abyss Of Madness, Losing Victoria, Inbetween, Summermilk, demo21, Black&White, Traffic Of Death, Invasion, The Loop.

Reviews - 2002 year demo review: Alter Ego, Reject, Laya, Lovemaker, Harm, Abyss Of Madness, Losing Victoria, Inbetween, Summermilk, demo21, Black&White, Traffic Of Death, Invasion, The Loop.

Review - обзор совренного спектрум железа.

Reviews - ZX Spectrum 2002 year Hardware Review.

Review - железячный ретро-фетешизм.

Review - Hardware Retrofetishism .

Tutorials - новое слово в демомакинге: чанковый движок 2x2.

Tutorials - New trend in demomaking: Chunks 2x2.

Ottyag - наблюдения за жизнью.

Ottyag - секретные места моего сознания.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
СEЛАЙ SАM - АCОUSTIC SYS: Ну ктo нe знaeт, кoлoнки - этo тaкиe кoнструкции, из кaтoрых чё-тo пoёт. А пoёт в них, кaк прaвилo, динaмик.
Юмор - Сообщение о MicroSoft WINDOWS BS-EXTRA.
Credits - Напоследок...
Игры - Диззи с Бодуна - соЦиальная мини-новелла.
Новье !? - О программах: Lemmings 2, Color Balls, The Red Stone 1&2, Crimes Santa Clause, Fillers, Prince of Persia, Soldier of Future.

В этот день...   24 апреля