Making of Eager

(всё что вы хотели узнать, и всё, что вы не хотели узнать — тоже). Как бы, застегните пристяжные ремни.



Я обещал сразу нескольким людям написать про Eager. Мне немного неудобно это делать, потому что это, наверное, выглядит как попытка привлечения внимания, тем более что, по всей видимости, дема оказалась не такой удачной, как бы мне хотелось. Жду ехидных комментов по этому поводу. Но любом случае, раз обещал, и раз некоторые люди готовы выкладывать совершенно неприспособленные для Hype тексты, давайте я лучше сам расскажу о внутреннем процессе, который привёл к созданию Eager и постараюсь разобрать ошибки, которые были сделаны.

Начало работы над Eager можно отнести к началу июня. Вообще-то я работал над другим своим долгостроем (имена пока опустим). Мне хотелось сделать секцию демы с цифровым треком и я прикидывал как поженить цифру и скроллер так, чтобы ни одно, ни другое не пострадало очень уж сильно. У меня уже давно написаны довольно качественные проигрыватели сэмплов для спектрума, и интеграция ударных с музыкой казалась следующим логическим шагом, в том смысле, что перкуссия всё же проще в реализации чем общий случай, произвольные сэмплы+ау (см. Condommed). Дополнительным (важным) условием для меня было придумать схему, которая бы работала сразу на пентагоне и на классике без переписывания кода несколько раз. И вот пока я сидел и раздумывал, простит ли мне сцена неполноэкранный скроллер в 3 фрейма или не простит, мне вдруг пришла в голову мысль поменять подход. Вместо того, чтобы играть честные ударные и думать как обернуть вокруг них музыку и эффект, почему бы мне не попробовать сделать ударные по биперной схеме?

Ударные на бипере обычно сделаны как interrupting drums. Прерывающие ударные. Имеется в виду, что когда нам нужно стукнуть в барабан, мы просто прекращаем играть какие-либо ноты и тупо делаем звук барабана. Если сделать звук барабана слишком длинным, становится слышно, что звук нот прерывался, и это нехорошо, но на коротких звуках возникает иллюзия непрерывного звука. Я знал по своему опыту работы с Octode XL, что звуки продолжительностью до 10000-20000 тактов звучат цельно, проблемы начинаются где-то с 25000 тактов. Но на бипере канал один, а на AY — три. Моя исходная интуиция была: если взять и сделать ударные допустим в 1 фрейм длинной, будет довольно несложно потратить один фрейм из N на барабан, а остальные — на видео эффект. Раз биперные барабаны длиной 20000 тактов звучат неплохо, тут у нас выйдет более чем в 3 раза более продолжительный звук, а так как каналов 3 вместо 1, пропадание одного из 3х каналов будет уже не так бросаться в глаза. Мне очень понравилась эта идея, поэтому я тут же сел и сделал своё первое техдемо: http://introspec.retroscene.org/hype/test1.sna

В основе этого демо — один паттерн из старого трека bfox RMI 2. Его довольно сложно узнать, т.к. в процессе работы возникли различные проблемы. Во-первых, когда я убрал всю исходную перкуссию и заменил её на цифровую, оказалось, что цифровые барабаны продолжительностью во фрейм недостаточно громкие, чтобы конкурировать с мощным басом на огибающей. Поэтому я был вынужден сменить тип огибающей и снизить громкость орнамента. Кроме этого, я, если честно, не понял поначалу, что трек у bfox был написан в BAC, поэтому стереопанорама вышла немного диковатая. Я показал этот трек нескольким знакомым, не могу сказать, что хотя бы кто-то был впечатлён, но меня это дело как-то пёрло, поэтому я продолжил работу. n1k-o очень помог советами; послушав эту дему он предложил (а) увеличить продолжительность звуков ударных в 2 раза или (б) переписать плейер так, чтобы дублировать звуки ударных сразу в 2 канала и тем самым решить проблему с громкостью. К середине июня у меня был переписан движок так, чтобы он позволял сразу и (а) и (б); звучал заново переделанный паттерн вот так: http://introspec.retroscene.org/hype/test2.sna

Если честно, меня этот звук прёт до сих пор. Но далеко не все были со мной согласны. В частности, diver4d сказал, что вообще не слышит там цифру. n1k-o считал, что звук всё ещё слишком сухой, из-за коротких сэмплов. Его идея была — будет лучше играть цифровые сэмплы ПОВЕРХ ударных AY, так что самое мясо ударных, атака и БУМ окажутся цифровыми, а затухающий шум и всякие реверберации — останутся сделанными на AY. Я не знал, прав он или нет, но мне в любом случае нужно было писать движок для цифровых барабанов, так что я взял и сделал полный ремикс в этом стиле трека bfox . Вот что у меня получилось в итоге: http://introspec.retroscene.org/hype/test4.sna

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

В дизайне демо как всегда несколько составляющих — для меня — визуальная и техническая в первую очередь. Я предупредил diver4d что не буду делать дему на 3bm в этом году, но май/июнь вышли довольно депрессивными, было ощущение что никто уже ничего не делает, и мне казалось, что м.б. нужно немного встряхнуть Пермь. Взять графику мне было негде, ну и, в общем, у меня не было достаточно времени, чтобы наводить с кем-то мосты и одновременно пытаться дизайнить и кодить новое демо. Поэтому я очень рано решил, что буду делать демо без графики. Знойное летнее ощущение скорости, мне казалось, будет легче всего воспроизвести, если сделать всякую фигню, летящую в лицо на 50гц, т.е. туннели и т.п. вещи. Из-за барабанов, занимающих по 2 фрейма, было ясно, что сделать 50гц не теряя качества звука будет в общем случае непросто. Но эта проблема уже сама по себе подсказала и решение — если бы мы могли ограничиться только атрибутными эффектами, то окажется возможным генерировать кадры несинхронно с изображением. Если вдруг оказывается, что нам нужно проиграть барабан, можно приготовить заранее 2 кадра в 2 страницы видеопамяти, проиграть полбарабана, переключить экран и проиграть вторые полбарабана. Вот эта идея асинхронной генерации атрибутных кадров и была ключевой идеей в моём понимании. Визуальный дизайн вёлся уже в рамках этих ограничений и с прицелом на то, чтобы постараться хотя бы немного замаскировать ограничения движка.

Описанная схема проигрывания барабанов накладывает ограничения, что возможно и что — невозможно делать в плане эффектов. Копирование кадров в экран делается менее чем за 15*768 ~ 11500 тактов. Трек у меня был со скоростью 5, так что на каждые 5 кадров в теории мог случится один звук барабана, занимающий 2 фрейма. Ещё один фрейм, если очень грубо (11500*5), уйдёт на копирование кадров в экран. Т.е. у нас остаётся 2 фрейма на расчёт 5 кадров в буфер. На самом деле оказывается, что барабан бьёт чуть чаще чем каждую 2ю строку в трекере, т.е. грубо, один звук барабана на 10 фреймов демо. Поэтому можно за счёт буфера чуть отстать во время проигрывания барабана, и нагнать, когда барабан бить не будет. Я исходил из того, что у меня будет примерно 2 фрейма времени на то, чтобы рассчитать 4 кадра; я ставил цель уложиться в 30000 тактов рассчётов на кадр, местами это правило чуть нарушено, но в целом, это оказалось правильной оценкой. Повторно оптимизировать в процессе пришлось только копировщик кадров с отражениями (первый вариант кода был неудачным) и хаос зумер (из-за бага в кодогенераторе).

Некоторые идеи были у меня уже достаточно давно. В демо Bomb от Atebit (СС) мне всегда очень нравился хитро сделанный твистер — Bomb целиком сделана атрибутами, но твистер кажется чанковым, благодаря тому, что растровые «чанки» варьируются в размере по мере удаления от оси твистера. Я давно думал, что это очень хороший способ сделать атрибутный туннель, т.к. это позволит прикрыть главную проблему такого туннеля — шум дискретизации из-за низкого разрешения в центре. Поэтому я сразу знал, что буду делать туннель.

В итоге я сделал 2 разных туннеля: посложнее, но с 4й вращательной симметрией, и попроще, но без симметрий. Туннель посложнее сделан основным, т.к. расчёт в нём сделан по принципу плазмы, т.е. фактически с субпикселями, это даёт ему плавность и разнообразие в движении. Симметрия отражения реализована на стадии копирования буфера в экран — оказалось, что можно адаптировать старый трюк с ldi для копирования чанков ещё и для копирования данных в экран с поворотами и отражениями (я делал немного похожую вещь в демо для mmcm):
ld a,(hl) ; исходный байт (верхняя четверть слева, идём слева направо)
ld (nn),a ; верхняя четверть справа, идём сверху вниз
ld (mm),a ; нижняя четверть слева, идём снизу вверх
ld (bc),a ; нижняя четверть справа, идём справа налево
ldi ; меньше 15t на байт

Тунель попроще — статическая карта позиций в текстуре. Меняя текстуру, можно получить иллюзию движения. Но т.к. текстура всего 16х16, выходит что движение грубоватое и фаз не очень много (никаких субпикселей). Все основные туннели сделаны по первой технологии. По второй технологии сделаны стрелочки на зацикливании демы.

Другая идея была сделать атрибутный chaos zoomer. Мне нравился этот эффект в амижных демах и мне казалось, что если заменить амижные текстурные трюки хорошо подобранной «мраморной» палитрой, может выйти неплохо, тем более что на спектруме я видел только одну реализацию — 1К от alone. Но я не понимал как работает честный chaos zoomer и кодить его оказалось лично мне крайне интересно. Я не хочу рассказывать здесь главный секрет эффекта, т.к. у меня в планах переписывание его в четырёхкратном разрешении. В плане кода же оказалось, что хаос зумер очень здорово делается развёрнутым кодом по типу:
ld hl,nn : ldi

с возможностью кучи оптимизаций. В 1990е такой эффект наверное сделали бы ассемблерным кодогенератором; я написал свой кодогенератор в Processing (все эффекты в Eager были сначала написаны в Processing, чтобы быстро подобрать параметры и улучшить внешний вид эффектов). Конечно, на самом деле не нужно тупо перегружать HL для каждого пиксела; часто оказывается нужно делать LD L,n или INC HL или DEC HL или даже не делать совсем ничего. Считайте, это тоже запилятор, просто очень специального рода. В запарке, я собрал пативерсию Eager с выключенным флажком оптимизации кода в Processing, так что пативерсия реализует Chaos Zoomer так, как его делать ни в коем случае не нужно.


С двумя псевдочанковыми эффектами, было ясно, что очень не хватает хотя бы чего-то в растре. Я давно прикидывал, что мои любимые 4-х фазные полосатые анимации должны отлично делаться в цвете. То есть, вместо чёрно-белой картинки берётся цветная, и после показа 2-х нормальных и 2-х инвертированных фаз, мы можем просто сдвинуть палитру на 1 шаг. Помимо увеличения числа кадров, это внешне замедляет движение, что очень важно при показе анимаций в 50гц. Так как анима всегда однообразная и так как движок не позволял быстро перегрузить графику растров, было сразу ясно, что поверх анимы нужно класть что-то ещё; в моём случае — это оказался текст.

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

Исходно дема должна была называться 3bm2u. Это совершенно дурацкое название, но оно чётко показывает исходный прицел и мотивацию демо. По мере работы, сделалось понятно, что дема должна спешить, как бы всё время немного опаздывать. Сам себе я сказал, я делаю демо Гоблиниша, т.е. такое демо, которое всё время торопится показать что у неё есть, может быть даже немного не додерживая эффекты для нормального рассматривания. По мере работы придумалось более подходящее название Keen, но т.к. Keen — очень неэмоциональное слово, я заменил его сначала на Keen and Eager и потом на Eager. Что именно мы Eager выходит непонятно, поэтому к названию добавилось (to live), чтобы придать немного больше чёткости и завершённости.

Все основные эффекты были написаны в Processing где-то за неделю работы. Основное время там ушло даже не столько на код, сколько на подбор палитр и текстур. После этого пришлось заняться новым ядром, и ядро съело практически всё время с 20х чисел июня до выходных дихальта. Главная проблема заключалась в том, что я долго не мог решить, как именно мне добиться синхронизации видео со звуком. Я совершенно точно знал, что не хочу делать демо без детальной проработки синхронизации, но я не был уверен, что каждый из моих эффектов уложится в имеющееся время и поэтому я знал, что я не мог делать ядро где кадры жёстко привязаны к фреймам. В то же самое время, чтобы сменить эффект, мне было нужно В КАКОЙ-ТО МОМЕНТ перестать генерировать кадры одного эффекта и начать генерировать кадры следующего. Меня беспокоил выбор этого момента. Я попробовал несколько схем, от которые пришлось отказаться. Что я сделал в итоге — это два уровня скриптов. Общий скрипт распаковывает, инициализирует и запускает отдельные эффекты. Он выбирает точный момент, когда кадры нового эффекта должны начать показываться, и говорит эффекту, сколько всего кадров нужно сгенерировать. Т.е. эффект может сгенерировать все кадры и вернуться в ядро, а ядро может показываеть кадры из буфера и готовиться к включению следующего эффекта. Собственно скриптование подробностей оказалось удобнее делать внутри каждого эффекта отдельно. Так сделан мелкий фикс и вариации эффектов.

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

В этот же день вышел на связь bfox , сказать, что он не смог заняться ремиксом трека. Что было особенно плохо, так это то, что за недели работы над ядром и движком, трек начал очень здорово меня утомлять. Я надеялся, что ремикс добавит треку объёма и разнообразия, но, без ремикса, я начал всерьёз сомневаться в своём выборе трека. Поэтому я набрался наглости и связался с n1k-o . Я предложим ему выбрать между ремиксом трека bfox a или оригинальным треком. Я был в полном восторге относительно трека Synchronization и хотел примерно того же драйва. Я рассказывал ему, как здорово ехать летом на машине с ветром дующим в морду. Я показал ему клип «Gimme All Your Lovin'» группы ZZ Top:

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

Сказать что я охренел — значит ничего не сказать. Мой план демы, написанный по треку bfox , летел к чертям. Я не мог выключить играющий трек, я не мог кодить, я больше не хотел иметь дему на 1-2 минуты, я хотел тупо сидеть так, ветер в морду, бесконечно. Почти сразу сделалось ясно, что трюк с подкачкой утюба в конце не сработает. В то же самое время, расширение стереобазы было моментом, который я был ОБЯЗАН обыграть, и я забросал Олежу просьбами вставить паузу в 1-2 секунды перед расширением. Олежа реально не понимал, что я несу за чушь, и впервые увидел сборку, показывающую что там происходит, только за двое суток до компо, но он мужественно вынес все эти мучения и сделал всё в итоге даже лучше чем мне там воображалось.

Потом время очень сильно скомпрессировалось. Я не мог непрерывно работать над демой в июне и начале июля, но последняя неделя перед пати была посвободнее и я погрузился в намного более детальную работу. Титры вышли отлично. Немного не хватало место в треке, чтобы показать всё нарисованное, но Олежа очень ловко вставил лишний паттерн там, где его не должно было быть. Название Eager изначально подразумевалось нарисованным спрайтом, но после бодрых титров статика не смотрелась, а скролл явно не сработал бы даже в теории, т.к. простой скролл атрибутов нарушил бы иллюзию перспективы. Времени было мало, в запарке я подумал, что может прокатить простое дискретное переключение тени по мере движения букв по экрану. Не знаю, можно ли было закодить это красиво, мой код некрасив, но итог выглядел гораздно лучше чем я ожидал, так что я удлиннил название пояснением (Eager to live our life to the full), чисто чтобы было время рассмотреть скролл. Текст немного cheesy, но в тот момент мне как-то нравилась эта пафосность. В итоге, этот спонтанно придуманный на ходу скролл оказался, как я сейчас понимаю, моментом демы, который зацепил больше всего людей.


Про утюб рассказать нечего, я нарисовал графику и сделал гигаскриновые полутона за час-два, наверное. Всё вышло в точности как я хотел.

Главная проблема заключалась в том, что визуально, расширение стереобазы должно было быть подкреплено каким-то визуальным фейерверком, а у меня осталось примерно полтора суток времени до пати, чтобы довести это всё до ума. В принципе, дела обстояли не так плохо, как это может звучать со стороны, т.к. эффекты были уже закожены в Processing, с уже известными параметрами эффектов, текстур и т.д. Кроме того, у меня уже были готовые наброски внутренних циклов для каждого из эффектов. Но, конечно, это совершенно не оставляло мне времени на доводку, и любые вещи, которые бы не заработали так хорошо, как мне хотелось бы, были обречены остаться как получилось. И так, собственно, и вышло в итоге. Я успел плюс-минус закодить все запланированные эффекты (кроме туннеля попроще), и собрать демо в некое подобие композиции. Но возникли проблемы.

Во-первых, туннель оказался очень сложным в скриптинге. Поскольку туннель сделан таблицами, которые по сути двумерные, довольно непросто сделать эффекты размазывания со скоростью и другие вещи, о которых я мечтал. Вообще, оказалось довольно неудобно рисовать текстуру в ассемблере и подбирать движение в скрипте. Поэтому туннель оказался довольно туповат, в пати версии — очень туп, в финалке — намного лучше, но всё равно слишком однообразен, и, в итоге, затянут. Решение сделать псевдочанки означало, по сути, что я лишил себя возможности двигать туннель по сторонам, что только добавило проблем в этом плане. Урок тут такой: туннель нужно рассчитывать из 3д и делать для себя какой-то тул для интерактивной настройки скриптов движения и текстурирования. Без этого хороший туннель сделать нельзя.

Во-вторых, анима оказалась в чём-то сложной в реализации, т.к. (а) я допустил ошибку в генерации перекодировочной таблицы, и (б) оказалось, что пикселы выключенные, чтобы избежать клэшинга, просвечивают «насквозь» аниму из-за быстрой смены однообразных по растру кадров. Единственное решение этой проблемы, с моей точки зрения, — гораздо более тщательная работа с исходными кадрами. Анимация, которая вошла в пати-версию была очень шумной; переделанная версия этой анимации для финальной версии демо вышла почти идеально. Вторая анимация, которую я не успел сделать для пати, получилась хуже, т.к. крутящиеся квадраты оказываются намного ближе друг к другу, чем хотелось бы.

В-третьих, работая с сэмплами, мы в основном полагались на Spectaculator. Проблема была в том, что все эмуляторы звучали по-разному. Fuse давал какой-то дикий шум. Unreal давал очень странный звук, как будто цифровые звуки находятся на расстоянии от звуков из чипа. ZXMAK2, вроде основанный на Unreal, давал звук ближе к спектакулятору. Во время показа демо на пати я был поражён тем, насколько ритм-секция на туннеле задавила солирующие инструменты. Сперва я списал это на невысокое качество трансляции, но потом riskej записал звук с реального +3 и мы поняли, что по этому поводу что-то нужно делать. Связанная проблема заключалась в том, что очень мало кто вообще говоря понял, что у нас сделаны цифровые ударные — блендинг с AY сыграл с нами злую шутку. Поэтому мы потратили несколько дней на переделку сэмплов и доводку звука. Я постарался подобрать сэмплы, которые бы чётче звучали, и я немного переделал логику плейера барабанов, чтобы барабаны не отставали немного на ударных долях, как в пати версии. Итоговый трек звучит чётче, злее и «цифровее». n1k-o должен был переделать шум для ACB версии трека, и он поколдовал над проблемными паттернами, чуть усилив соло инструмент и чуть уменьшив шум, заменив его на шумовую пульсацию: http://zxart.ee/eng/music/authors/n/nq/furious-acb-mix/

В четвёртых, графика для интро, которую я мужественно нарисовал за несколько дней в июне, видимо впечатлила только меня :) Кстати, n1k-o сразу вспомнил, откуда пришло вдохновение для этой сцены:

За пару дней до релиза финалки diver4d вызвался почистить графику. Кнопка получилась прекрасно, а вот риски регулятора громкости оказалось сложно подсветить не теряя цвета. Поэтому я быстро закодил мою старую идею с интерлейсным мультиколором; по-моему получилось очень мило.


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

Мне сложно объективно оценить итог. Я вижу сейчас, что идея «швырять что-нибудь в лицо» не вполне годна для демодизайна. Этого недостатночно для адекватного фикса и это создаёт проблемы при доводке, т.к. приходится слишком сильно полагаться на удачу при доводке эффектов. Мне повезло в том плане, что титры получились очень бодро практически сами, и что скроллер закодился удачно на ходу, но в итоге, эти находки в начале демо скорее создали проблему, что концовке демо не хватает какого-то убойного эффекта. Дополнения к скриптам улучшили расклад, но всё же не вполне разрешили проблему.

Есть ещё проблема с моими инстинктами. Меня критикуют за центрированные композиции кадров и в этом, конечно, есть элемент правды. Я действительно тяготею к этому при дизайне сцен, но я не вижу в этом какой-то существенной проблемы, т.к. это ограничение — в чём-то просто совпадение. Более существенная проблема в том, что меня очень тянет на зацикливание, особенно при работе над быстро задизайненными демами, и видимо, это мой способ избежать придумывания развязки, что не очень просто сделать когда время ограничено. Решение видимо простое: нужно делать меньше дем в запарке, нужно делать больше дем не спеша. Буду исправляться.

ОК, наболтал так, что никому мало не покажется. Вот такой бардачный у меня внутренний процесс. Спасибо за внимание! Извините, если что! :)

P.S. Самая последняя версия демо лежит вот тут. Благодаря diver4d , у нас так же есть запись демо со звуком снятым с реальной пентевы:

40 комментариев

avatar
Красава!!!
avatar
Дядь Лёша, а можно интересные куски скрипта показать?
  • VBI
  • +2
avatar
Как ни странно, скрипт попроще чем обычно в этот раз, т.к. куча скриптов оказалась вынесена во внутренние скрипты эффектов. Ну вот пара примеров, чисто понять как всё работает в этот раз:
kINIT	setupTitleFrames1 : dw 6, AttrIntroA19 : db 19, 7+5*5,8 ; frames no, sprite addr, width, x, y
Перевожу: я хочу сгенерировать 6 кадров, со спрайтом «2015», шириной 19 знакомест, стартуя с позиции 7+5*5,8 (атрибутный спрайт будет сдвигаться по 5 знакомест влево от кадра к кадру, так что на последнем шестом кадре его левый верхний окажется в позиции (7,8)). Данная команда только инициализирует генератор кадров и создаёт самый первый кадр.
kSETUSER	genTitleFrames1, 7
Вот эта команда сказала ядру, где находится процедура генерации последующих кадров. Кадры пока всё ещё не генерируются.
kFULLIM2 : kPOKE varDrumActive, #3D : kEI ; drums engine is started simultaneously with music
Тут мы разрешили прерывания, демо поехало.
kWORK
Вот эта команда новая у меня в ядре: она запускает показ кадров и работает до тех пор, пока не создаст запрошенное число кадров в буфер. Показ кадров идёт независимо от генерации. Если показ обгоняет генерацию — показ просто повторяет последний доступный кадр. Если генерация обгоняет показ, она просто забивает буфер кадрами и ждёт, пока там не освободится место для ещё кадров. После показа последнего запрошенного кадра показ автоматически останавливается.

Вторая половина команды — это скроллинг, который убирает надпись с экрана за 7 кадров:
kSETUSER	genTitleFrames2, 7
		kINIT	setupTitleFrames2 : dw 7 : db 4 ; frames no & speed
		kWAIT 40-1 : kWORK
По точно такой же схеме делается вылетание второй надписи:
kSETUSER	genTitleFrames1, 7
		kINIT	setupTitleFrames1 : dw 7, AttrIntroB32 : db 32, 0+5*6,8 ; frames no, sprite addr, width, x, y
		kWAIT 80-1 : kWORK

		kSETUSER	genTitleFrames2, 7
		kINIT	setupTitleFrames2 : dw 9 : db 4 ; frames no & speed
		kWAIT 120-1 : kWORK

		kSETUSER	genTitleFrames1, 7
		kINIT	setupTitleFrames1 : dw 6, AttrIntroC22 : db 22, 5+5*5,8 ; frames no, sprite addr, width, x, y
avatar
Красота! Изящно выглядит
avatar
Из того, что я видел на поуэте, за центрованные композиции тебя не критикуют, а просто бесстыдно троллят. Это можно игнорить, как мне кажется.
Статья познавательная получилась, спасибо — узнал про processing на javascript, теперь свой чанковый велосипед выкину и заменю на их Array 2D. Демо очень стильное, но немного критики не повредит:
* Дигитальных сэмплов лично я не распознал, пока отдельно о них не прочитал. Где-то дигитальность потерялась, отсюда крутизну кода и задумки без отдельного пояснения не оценить.

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

* Растровый рисунок в Chaos Zoomer не такой плавный, как мог бы быть, из-за чего бросается в глаза «круг» по центру.


* В целом коротко, такого хочется больше :)
avatar
moroz1999 , я немножко наблюдал развитие работы над эффектом, и для меня есть тайна — как это было сделано.
и это была одна из причин опубликовать дизник демы.
странно, но гигантский обьём работы, как ни странно, сейчас теряется и не заметен при просмотре.
и мы в этом, увы, уже не виноваты.
в средине 90х все бы охуели от звука.

… а драмс таки ж нужно будет искать именно яркие, заметно живые.
учтём ;)
avatar
Вова, «гигантский обьём работы, как ни странно, сейчас теряется и не заметен при просмотре,» — я в чём-то рад этому. Для меня это признак элегантности некоторой, лёгкости. Дема недобирает в другом, в свежести эффектов, в том, что эффекты оказались слишком абстрактыми, недоделанными в каком-то смысле. Я просто не знал как добавить им измерений. Возможно, решение работать только атрибутами слишком сильно связало мне руки, не знаю.

Про «развитие работы над эффектом» я не понял — ты о чём конкретно говоришь сейчас?
avatar
развитие работы над эффектом — это я о тестах диги на пентеве.
avatar
О, спасибо за детали. Сэмплы не только ты не услышал, их почти никто за пределами пати-плейса не услышал. В финалке мы их сознательно сделало помясистее, вроде чётче заметно сейчас. Про подачу мультиколорного регулятора громкости — напишу отдельно. Растр и в Chaos Zoomer, и в туннеле генерируется компьютером; вот ты сейчас задал вопрос и я даже не отвечу с полной уверенностью — почему. Нужно пробовать иначе. Могу только сказать, что в финалке этот фон поменялся по сравнению с пати-версией; мне кажется, что к лучшему.
avatar
Теперь про эффекты и органику. Понимаешь, я ловлю себя не первый раз уже на том, что мне нравится наводить тень на плетень в этом плане. Делать эффекты неброские может быть, путать акценты в чём-то. Разумеется, мне делается потом обидно, когда кодеры не считывают, что у них на глазах произошло, но, думаю, я не откажусь от этой стратегии и в будущем. Уж слишком я неуважаю идею «эффекта», когда все должны упасть ниц и впитать МАТАН.

Ну и собственно о матане. Мультиколор этот я закодил быстрее чем типа тривиальный скроллер с перспективой. Почему в таком случае я должен уделять этому мультиколору больше экранного времени? Этот эффект позволил мне сделать мягкую штору и риски без потери цвета, в сравнении с кнопкой. Моя задача была решена. Зачем заострять на этом внимание?
avatar
Во-первых дядька introspec хватит уже думать о том что подумают да как прореагируют другие люди. Ну точнее думать то можно но писать об этом — тебя не красит — не то место и ситуация. Я сам уже перестал думать о том зачем тебе это надо поскольку надумал немало вариантов ;)
Тег «явзвительно» поставлю далее по тексту чтобы было понятно
avatar
Nuts_ ты прав. не для этого всё это делается
avatar
А я не согласен с этим. Если перестать слушать окружающих можно только окуклиться. Окукленных у нас на сцене и без меня достаточно есть. Поэтому слушать и реагировать — правильнее, хотя и далеко не так приятно.
avatar
Слушать что ты выливаешь, конкретно вот это: «Мне немного неудобно это делать, потому что это, наверное, выглядит как попытка привлечения внимания, тем более что, по всей видимости, дема оказалась не такой удачной, как бы мне хотелось. Жду ехидных комментов по этому поводу.» и «ОК, наболтал так, что никому мало не покажется. Вот такой бардачный у меня внутренний процесс. Спасибо за внимание! Извините, если что! :)»
В плане демомейкинга как такового тебя послушали и оценили и похвалили, без вопросов.
А негативные психологические посылы — тема отдельного обсуждения. И я очень не хочу в это углубляться и разбирать, к тому же я не специалист по психологии.
Скажу проще — ты не лучшим образом _оформляешь_ свои мысли чтоб тебя услышали, скажем так, много людей, после этого действительно хочется окуклиться, а не слушать.
avatar
это всё реверансы были :)
avatar
Nuts_, вообще-то я получил за эту дему больше говна чем за все мои предыдущие демы вместе взятые.

Имею право, имхо.
avatar
Процитированный кусок из начала нацелен на одного конкретного радиослушателя :)

В конце — ну можно наверное подумать, что я такой весь из себя неуверенный, что лечиться нужно. Но когда я писал уверенно, народ просто на стены лез, почему я всем всё диктую. Короче, я не боюсь ни первого, ни второго. Мне не страшно обсуждать мои прососы, если это реальные прососы. И, конечно, куча решений при работе над демо — компромиссы, и в этом плане, мне не хочется создавать иллюзию, что бывает как-то иначе.
avatar
Ну в любом случае — тут немного критикую стиль изложения именно в этих моментах, ибо непонятно же, что это персональные реверансы. зачем их вообще в статью, в коментах, в отдельном деклаймере — с такой типа оберткой, что были ранее нарекания.
Это же не относиться к просчетам в демках, тут как раз и происходил смешивание личного и «профессионального» (ну то есть кодерского) чем у нас и так люди грешат (прямо скажем — переходы на личности), и что тебе в результате самому же похоже не нравиться.
avatar
Как ты предлагаешь мне отделять личное от профессионального, если я больше месяца жил этим? :)
avatar
А вот кстати отличное начало для статьи: больше месяца я только и жил тем что делал дему. И сразу тебе и настрой и народ завидует (многие щас так просто не могут). После этого уже смело можно написать и те самые «личные» фразы, они сразу приобретут другой акцент. И далее чуть по другому, скажем «Мне даже немного неудобно это делать — это может выглядеть попыткой привлечения внимания. Тем более что, по всей видимости, дема оказалась не столь удачной, как бы мне хотелось. Так что не удивлюсь и ехидным комментам по этому поводу.» Вот такой вот я литературный критик :)
avatar
:)
avatar

;)
avatar
далее по сути текста… в тексте не очень не хватает вставок ютубов этой
демки что бы глядеть сравнивать и анализировать
avatar
Да, это я не сообразил что-то. Добавлю.
avatar
Саму статью могу только похвалить — что- то совсем такого про Спек я и не видывал особо. Ну в журналах всяко были такие истории, но эта читается по другому словно она переводная какая то — стиль изложения наверное.
Все хорошо расписано что и как и _почему_ так.
«Одним — пример, другим — наука»
avatar
далее навернео скажу уже как бы по сути демо. Я тоже не услышал эти «дигитальные» ударники. От силы — биперные — когда громкость прибавил. В те самые 90e были демки с цифровыми именно ударниками (от KSA по-моему), там они были сделаны более выделенными по самому треку но и звучало все как то смачные.
Про Condommed вобще молчу :) я щас долно выслушивал нет ли там цифровых ударников.

«Пляшушие» красные зубцы я чтото не понял но скролл между ними прикольный.

Тунель мне больше нравиться сине-желтый, остальные — посмазаннеее как то. «По-тракиковки» могу «поворчать» — в наше время все на бейсике встроенном считали, без всяких процессингов :)

Не понял про анимацию с крутящимися квадратми — по моему все смотриться прикольно и глюков особо нету в отличии от патийной версии.

Да ну и насчет запарки. Почему то слишком часто самые лучшие демы делаться в спешке и доделываются на патиплейс. Ты слишком рано начал :)
avatar
Цифровые ударные в старых демах очень здорово «хрустят» — шум дискретизации. И хотя я играю мои ударные без ШИМ, видимо, высокая частота дискретизации (31.25 кГц), плюс лёгкая дельта-сигма поверх, видимо дают звук, который слишком «гладкий». В финалке ударные хрустят намного больше, из-за того, что я довольно здорово их накрутил по громкости. Если послушать test2.sna, то видно, что ударные голые в общем слышно неплохо; думаю, что против нас срабатывает решение мешать ay звук с цифровым. Но не могу сказать, что я очень жалею об этом решении. Просто в следующий раз нужно делать трек другого типа, наверное, в более электронном треке ударные подчеркнулись бы больше, мне кажется.

Второй туннель пострадал оттого, что я хотел зарелизить финалку. Скрипт в нём — негодный, но скрипт первого туннеля занял полный день и на повтор меня не хватило. Сказался негодный инструментарий.

В аниме с квадратами, я посмотрел вчера вечером, действительно баги. Один — который я сделал сознательно, чтобы не перерисовывать растр, он даёт такое мигание по центру и чуть-чуть мусора, там же, в центре. Второй — который я думал что это обман зрения, а нифига, там реально пропустились пикселы. Поправлю второй баг на неделе.
avatar
Ну а вот теперь немного поязвлю. Здесь что-то не раскрыто про показ на Sundown 2015. Я так примерно догадался что это доделанная версия, в результатах ее не было. Но народ в чате (я так понял из коменаторов) и то не понял че ткое — ее показывали прям как и все без особых дополнительных комментариев или я что-то не расслышал.

Ты вообще видел _КАК_ она выглядела в трансляции — я еще расспрошу ребят как они так умудрились подключить реал :)
Были ли (авторские) комментарии в IRC? Зал то встретил дему аплодисментами.
avatar
Про показ много смешного. Я доделал финалку по дороге из отпуска, заслал из Москвы в четверг. Просто хотел уже избавиться от неё, не мог больше. Почти сразу с самолёта рванул на Sundown и ребята сказали, что есть возможность показа на большом экране. Задним числом жалею, что не сообразил зарелизить финалку на Sundown, как это сделали ребята с Pulse. Но в любом случае, показ этой демы с большими колонками — тема.

Из железа там были гасмановские 128к и +2. У +2 не было стереомода, а 128к внезапно начал глючить с DivMMC (или как она там называется). У гасмана была ещё сетевая карта, но она грузила тоже очень ненадёжно на 128к. Фактически, гасман был малодушно настроен показать в моно на +2, но я направил его на путь истинный, и мы показали всё в стерео на 128к, загружая демы по аудио с писи, т.е., фактически, по-честному, с кассеты :)

Хотелось бы мне увидеть показ New Wave при таком раскладе с железом ;)

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

В irc я комментировать показ не мог — сидел в первом ряду далеко от своего компьютера. Музыка реально впечатлила людей, хотя, конечно, мало кто понимает, где там цифра, где там чип. Я думаю, нам удалось главное: сделать довольно неспектрумовский звук на спектруме.
avatar
А ну я не 100% же знал что ты там был. Про кометы я имею виду про сам факт показа, типа финальная версия, не конкурсная работа. Там как то не сакцентировали чтоли или я не раслышал или чтото такое…
avatar
Они объявили перед показом, что это только что доделанная финалка. Но как это выглядело на стриме я не знаю.
avatar
Я смотрел стрим и коментировал и цитировал на #z80
К сожалению записал только днем, там всякие граффикс компо, а вчерер не записал.
Поток у них был слабый вот эта часть выглядела не очень — по краям все очень смазанной кашей крутиться и статика в центре.
Ну и аплодисменты в эфир тоже попали.
avatar
Да, выключатель и ручка в новой версии выглядят гораздо лучше, но вот к ним бы не помешала нормальная дигитальная озвучка ;)
avatar
Технически, она и есть дигитальная :)

Но мне нравится ход твоей мысли!

Просто не подумал даже, если честно.
avatar
Интересно написано, почитал с удовольствием. Многабукаф пролетели незаметно =)
  • tsl
  • +8
avatar
Статья очень интересная. А вот цифровые ударные я до сих пор с трудом слышу, даже зная что они там есть — вроде и замечаю, но в какой-то момент ухо их просто теряет. При этом в техдемах 2-4 сэмплы звучат совершенно конкретно и явственно.
avatar
Дело в том, что в деме сделан даблтрек — самая громкая из огибающих шпарит сразу в оба канала по краям. Т.е. по громкости это полная катастрофа, с точки зрения воспроизведения цифры. Приходится очень сильно перегружать сэмплы, чтобы хоть что-то слышать. А перегрузка даёт цифровой шум, не так и сильно отличный от шума AY.

Я, в общем, согласен. В следующий раз будем делать 1970-е диско :)
avatar
НЕТ!
Только гангста-реп, дабстеп и прочий трибхоб спасёт оца русской интеллигенции! ;)
avatar
Интересно как YouTube себя повел с этим роликом — 720p/48
Мечты о «точнейшей эмуляции» начинают сбываться?
avatar
Я замечал и раньше, что он умеет любую частоту кадров :)

А раз звук записан с реала, 48.828125 — единственный правильный ответ.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.