• avatar Shiru
  • 1
И нам нужно редактирование сообщений. Последняя строка лишняя, осталась от перетасовки абзацев. Прямо как артефакт дорисовки.
  • avatar Shiru
  • 3
Была всего одна игра с дополнительными 2K VRAM для карт тайлов, Gauntlet. Остальные выкручивались как могли. Проблема с диагональным скроллом при двух картах тайлов только в том, как скрыть область дорисовки новых тайлов.

Самый простой вариант диагонального скролла в SMB3 и Felix The Cat — вертикальная раскладка карт тайлов. По вертикали вообще ничего не дорисовывается, уровень всего два экрана в высоту (минус высота панельки снизу). По горизонтали дорисовывается прямо на экране (т.к. карта тайлов в ширину с экран). SMB3 просто не заморачивается по этому поводу, дорисовка видна визуально на краях экрана. Felix скрывает два вертикальных столбца на краях экрана, чтобы сделать дорисовку незаметной — слева аппаратной фичей выключения рендеринга в левом столбце, а справа столбцом чёрных спрайтов (т.к. аппаратной фичи для правого столбца не предусмотрено).

В других играх, где уровень выше двух экранов, стоит вопрос, скрывать вертикальную или горизонтальную дорисовку. Если выбрать горизонтальную раскладку экрана, легко скрыть горизонтальную дорисовку за экраном, но видна вертикальная. Её можно отсечь с помощью панельки или включения/гашения рендера позже начала/раньше конца кадра (обрезав высоту на 16 пикселей). Если не ошибаюсь, с гашением сделано в Jurassic Park. Можно сделать раскладку вертикальной, тогда вертикальная дорисовку получается скрыта, но видна горизонтальная. Её можно скрыть как в Felix, или оставить видимой как в SMB3 (нередко так и делали).

Часто не скрывали дорисовку просто потому что на старых ЭЛТ телевизорах края растра уходили за края видимой области экрана. Потому на всех ТВ-приставках времён ЭЛТ в гайдлайнах есть требования к safe area — к соблюдению области, в которой изображение будет гарантировано видимым. Т.е. за пределами safe area нельзя размещать критичную информацию типа очков или статуса. На NES это отступы примерно по 16 пикселей по вертикали и 8-16 по горизонтали.

Можно сделать горизонтальную раскладку, тогда область горизонтальной дорисовки скрыта, а вертикальной видна.
Диагональный скролл в Super C был засчет тех самых дополнительных 2K VRAM, или там еще какая-то фича?
  • avatar tsl
  • 1
В продвинутых чипах кроме спрайтов могут быть другие команды, например примитивы, заливки.
Количество же обращений к памяти как раз меньше, чем при блиттинге, и я описал почему (блиттер: чтение, чтение, запись, сканлайн: чтение).
  • avatar aa-dav
  • 1
Эм. Если я правильно понял такой подход используется как раз во всяких 8-битных и 16-битных консолях при этом «дисплей листом» в них можно считать таблицу описания спрайтов и параметры фонов. То есть прямо перед формированием очередного сканлайна видеоизображения видеочип просматривает таблицу спрайтов, выделяет те из них которые попадают в данный сканлайн и формируют эту строку — отсюда ограничения на максимальное количество спрайтов в одной строке и тому подобное. Главный плюс этого для 8/16-бит заключается в крайне скромным требованиям к количеству видеопамяти — таблица спрайтов очень экономно их описывает. Недостаток — списки спрайтов сканируются каждый сканлайн заново — и как следствие число обращений к видеопамяти резко увеличивается по сравнению с блиттинговым подходом — видеочип как правило не оставляет центральному процессору шансов обратиться к видеопамяти в периоды HDraw, а иногда и на весь VDraw.
  • avatar tsl
  • 1
Рисует он в свою видеопамять как в единый большой фреймбуфер (в котором можно выделить окно рендера).
Ну собственно, это и есть ответ.
Некоторые видеопроцы используют другой способ вывода видео. Каждую строку изображения дисплей лист выполняется полностью, но отрисовывается не фреймбуфер (битмап 1024х512, например), а буфер строки (1024х1), который обычно находится во внутренней памяти чипа. Такой способ требует намного меньше обращений к общему видеоОЗУ, поскольку оно используется только для чтения битмапов, текстур.
2Д:
— чтение текстуры,
— чтение фреймбуфера (+ накладывание по маске),
— запись фреймбуфера.
1Д:
— чтение текстуры (+ накладывание по маске на буфер строки, + запись в буфер строки).
Видеовыхлоп формируется из буфера строки (буфер, ессно двойной). Отрисовывается только часть сцены, видимая в данной строке.
Недостаток метода — меньший размер дисплей-листа, ибо за строку можно выполнить меньше команд. Профит — примерно в 3 раза меньший бандвиз ОЗУ.
  • avatar aa-dav
  • 1
«Я правильно понимаю, что дисплей-лист выполняется блиттером (т.е. рисует 2-D битмапы в ОЗУ)?»

Не понял вопроса. Видеочип PS1 может выполнять разные команды поступающие в порт ввода — от выставления render-state-ов и блиттинга 2Д-изображений до растеризации треугольников с текстурированием и освещением. Рисует он в свою видеопамять как в единый большой фреймбуфер (в котором можно выделить окно рендера).

Про Nintendo DS не планировал, но у меня будут еще обстоятельные уроки по программированию его непосредственного предтечи — Game Boy Advance, там даже обратная совместимость. Собственно они взяли GBA, навесили на него дополнительную память, расширили функционал видеочипа до 3D, вставили вдвое более быстрый процессор, два дисплея и получился DS.
  • avatar tsl
  • 1
Осенью 1995 года графика PS1 порвала мне мозг — то, что я видел на экране телевизора в супермаркете, было невозможно. До сих пор у меня валяется одна приставка, правда с убитым лазером. Временами даже хочется написать его эмулятор.

Процессор был еще без конвеера, но в качестве предтечи оного в нём всегда одна следующая инструкция извлекалась из памяти и дешифровалась в процессе выполнения текущей инструкции.
У финских VS1001 так же. После каждого JMP обязательно стоит NOP.
Вся VRAM в 1Мб с точки зрения GPU представлена как один большой битмап фреймбуфера 1024x512 16–битных пикселей. Забавно, что все данные поступающие для сохранения в VRAM никогда не указываются своими линейными адресами — всегда адресация идёт как бы к двум координатам (x,y) в этом фреймбуфере.
В тсконф у меня так лежат битмапы для спрайтового процессора.

Я правильно понимаю, что дисплей-лист выполняется блиттером (т.е. рисует 2-D битмапы в ОЗУ)? Для сравнения FT812 выполняет ДЛ каждую строку и строит 1-D пиксельный буфер «на лету». Но у FT812 частота повыше и транзисторов побольше на тот же функционал.

Хотелось бы узнать как устроен 3-D у Nintendo DS. Очень милая архитектура. Про него будет статья?
  • avatar aa-dav
  • 0
Почти сломал голову пытаясь понять почему фазовая модуляция в каких то случаях эквивалентна частотной, как говорит википедия. Но кажется наглядно понял — пока нарастает вычитание фазы это действительно как бы уменьшает частоту и наоборот когда слагаемое к фазе начинает нарастать.
  • avatar aa-dav
  • 1
Хаха! :) Действительно. Пересмотрел свои статьи, имеено да, эта ссылка упоминалась gamedev.ru/flame/forum/?id=226622&page=3#m32 в первой версии статье о мапперах денди. «Вот здесь: hypr.ru/blog/graphics/283.html есть отличная статья на тему того какими ухищрениями занимались создатели видеоигр для денди для этого дела. Частично там затронута и тема мапперов». В процессе реструктуризации она потерялась оттуда, ибо более уместна в статье про видеочип же.
> Есть где-то отменная статья про то как боролись в играх на денди за красивую экранную заставку
Вот: hypr.ru/blog/graphics/283.html

А её автор — и есть сам Shiru. Так что вы, по сути, автору про его же статью рассказываете :)
  • avatar frog
  • 0
Про Gravis Ultrasound, мне кажется, стоило упомянуть. Хотя это тоже цифра как и SB, но всё же отличия были существенны и тогда это воспринималось как большой шаг вперёд, как я помню.
Довольно непоследовательно сказано о трекерной музыке, без упоминания Amiga и Paula. А до Sound Blaster был ведь еще популярный модуль Roland MT-32 с LA-синтезом.

«Эпоха специализированных чипов синтеза, пожалуй, давно уже канула в лету». Так вышло, думаю, потому, что современные музыканты не ставят перед собой амбициозных задач из области звукового дизайна. Но у некоторых специалистов аппаратные решения все еще пользуются спросом. Например: kyma.symbolicsound.com/kyma-sound-design-environment/
  • avatar Shiru
  • 7
Поправки:

Звуковые чипы SN76489, TIA, AY-3-8910, POKEY появились довольно-таки задолго до IBM PC, в 1977-79 годах. Потому что игровым системам определённо был нужен звук, а PC в качестве игровой системы долго не рассматривался. Спикер PC предназначался для системных целей, и вероятно был сделан на канале таймера не из необходимости разгрузки процессора, а просто потому что таймер уже был и оставался лишний канал (другие каналы используются для действительно важных вещей — прерываний по таймеру и регенерации ОЗУ).

Огибающая в AY не для обогащения тембров. Она именно огибащая, как и ADSR — для задания изменения громкости во времени. Но в этих целях она оказалась слишком примитивной (в 1978 не особо понимали, что именно нужно). А богатые тембры из неё начали получать уже гораздо позже, лет через 12 после появления чипа — оказалось возможным запускать её на очень высокой частоте, таким образом, что периоды повторения сливались в тон (пилу или треугольник), а также смешивать с обычным каналом тона, что даёт вырожденный случай амплитудной модуляции (тон огибающей маскируется прямоугольным каналом).

В SID главная фишка — аналоговый фильтр, очень сильно окрашивающий звук. По сути приближение к архитектуре классических аналоговых синтезаторов. Аналогичную архитектуру, DCO и общий для всех каналов фильтр, имел, например, синтезатор Korg Poly 800 (1983).

В NES нет короткого буфера PCM. Там есть DPCM — однобитное кодирование 7-битного звука, в целях сжатия ценой сильных искажений, с аппаратным проигрывателем (читает память, декодирует, выводит в ЦАП, всем этим немного затормаживает процессор). Напрямую DPCM доступно 16 КБ адресного пространства ПЗУ, в которое можно включать банки посредством маппера (если есть). Зацикливать DPCM формально можно, но по самой природе кодирования нормального чистого цикла в сложных сэмплах не получится (будет сильно щёлкать переход), только если не специально сконструировать сэмпл буквально побитно (тогда можно вымучить, например, чистую пилу).

FM-синтез в чипах на самом деле PM, фазовая модуляция, близкая по сути вещь, но гораздо проще реализуемая. Т.к. это PM, именно вибрато, возможное в FM, толком не получить. Смысл этих видов синтеза в получении гармоник. Гармонический состав сигнала определяет его тембр, чем больше гармоник, тем сложнее и интереснее (реалистичнее в том числе) тембр. Две синусоиды при аддитивном синтезе были бы всего двумя гармониками, а при модуляции их получается намного больше.
  • avatar aa-dav
  • 2
Логика моих изысканий была в том, что бралось из консолей что постарше и что было в широком ходу. 3DO как исключение просто потому что хотелось понять где и как впервые вылезла 3D-графика в играх. Но про амиги есть ровно одна статья, которую сейчас выложу.
Гипотетическое демо под сабж, нерелизенное и неизвестно, доделанное ли хоть до какого-то состояния.
  • avatar Vinnny
  • 1
если уж брать приставки, то мне как амижнику интересно почитать про amiga cd32 и/или cdtv.
  • avatar frog
  • 0
Ну это же очевидно — иначе бы давным давно всё поменялось
  • avatar Shiru
  • 2
Что забавно, PS2 уже считается ретро-платформой. Из поколения до 2000-х ещё интересен Dreamcast, любительская разработка для него относительно доступна, там выходит немало крутых homebrew-проектов (или даже можно назвать их инди).

К слову, на PS2 тоже применялась куча весьма интересных трюков. Например, в MGS (игра на последней картинке) есть блестящие, отражаюшие в себе всю обстановку полы. Как они сделаны: коридор скопирован и перевёрнут по линии пола, с пониженной детализацией, также перевёрнуты и отрисованы ниже линии пола модели персонажей, а сам пол сделан полупрозрачной текстурой, она затеняет нижнюю копию, и создаётся эффект отражения. И там много подобных маленьких трюков, в результате игра выглядит весьма круто для тех лет (версия на PS2 лучшая, во всех портах и римейках много чего урезано или испорчено) и при этом идёт на 60 FPS.
  • avatar VBI
  • 0
Обобщу сказанное в двух темах:
большинство активных участников ZX Spectrum Demo compo — ПРОТИВ изменения сути компо.