Interested Article - Конфликт атрибутов

Конфликт атрибутов на MSX 1

Конфликт атрибутов или клэшинг ( англ. attribute clash ) — артефакт графики, проявляющийся на старых домашних компьютерах и связанный с аппаратными ограничениями. Наиболее известен пользователям ZX Spectrum .

Деловые компьютеры, в противовес домашним, сужали цветовую палитру, но не допускали подобных ограничений; в любой пиксель можно было писать любой цвет из N . CGA имел всего 4 цвета, а Apple Macintosh был вообще монохромным.

Причина

Статичная картинка, выполненная с учётом структуры видеопамяти Spectrum’а

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

В частности, ZX Spectrum каждому знакоместу размером 8×8 пикселей присваивал 1-байтовый атрибут — трёхбитовый цвет переднего плана INK , трёхбитовый цвет фона PAPER , 1 бит яркости BRIGHT и 1 бит мигания FLASH . Это давало 15 цветов (только на отдельных комбинациях «видеоконтроллер+телевизор» чёрный как-то отличим от ярко-чёрного) . Таким образом, при разрешении 256×192 видеопамять занимала всего 6912 битов . К слову сказать, эффект мигания использовался крайне редко в том числе и из-за того, что мигающая область явно состоит из квадратных блоков.

В MSX 1 атрибут присваивается горизонтальным блокам 8×1 пикселей. Кроме того, были аппаратные спрайты , не конфликтовавшие друг с другом и с фоном. Впрочем, при портировании с ZX Spectrum байт атрибута зачастую размножали, а спрайтами не пользовались, что приводило к практически неотличимой игре. В NES конфликтная зона 8×8 пикселей — но с аппаратными спрайтами, аппаратной же прокруткой и широкой палитрой (всего 52 цвета, одновременно 8 палитр по 3 цвета + базовый ) это малозаметно.

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

Способы борьбы

1. Использовать атрибут фона

Saboteur! : жёлтый и голубой цвета обставлены как освещение
Terramex : менее удачный пример. И вообще здесь никто и не пытался скрыть квадратики знакомест.

Это самый простой в программировании метод — программист только управляет пикселями, не трогая плоскость атрибутов. В таком случае нет и цветного «кирпича», но спрайт теряется на фоне ( Double Dragon ).

Чтобы этот метод давал качественные результаты, выработали особый стиль ( Saboteur! , Bomb Jack , Cyclone , ). Оформление игры основывается на чёрном цвете , чёрный цвет практически везде: в узорах стен, в декорациях, в одежде врагов… Нечёрный же цвет играет роль освещения: например, чёрный ниндзя , бегущий вдоль жёлтой стены, становится чёрно-жёлтым, на фоне синего неба тот же ниндзя чёрно-синий. Конфликт будет, если в каком-то знакоместе отказались от чёрного цвета (спинки стульев в Saboteur II: Avenging Angel ).

+ : интересный визуальный стиль; цветное изображение сочетается с незначительными артефактами; никакого управления атрибутами.

: требует, чтобы персонажи были чёрными, с минимумом светлых линий, а фон чёрно-цветным. Если это не так, знакоместа будут явно видны.

2. Использовать атрибут спрайта

Three Weeks in Paradise : жёлтый Уолли сделал жёлтой траву поблизости.

Спрайт распространяет свой атрибут на фон, что приводит к цветному «кирпичу», который следует за героем. Этот механизм применяется нечасто, обычно только для главного героя, но не для врагов — например, или серия игр про Уолли ( Everyone's a Wally и др.)

+ : спрайт отделяется цветом от заднего плана; никаких ограничений стиля или движения.

: артефакты чётко видны.

3. Сплошной фон, цветные спрайты

Zynaps : игра в чёрном космосе

Один из самых популярных способов. Фон окрашивается в один цвет (чаще всего чёрный), с минимумом оформления, а геймплей строится так, чтобы вероятность столкновения двух объектов разных цветов была минимальной. Большинство элементов уровня непроходимы и конфликта не вызывают; немногие проходимые или являются передним планом и перекрывают спрайты ( Exolon , ), или распространяют свой атрибут на спрайт ( Dizzy ).

Этим способом отображается большинство игр типа «лабиринт»: Manic Miner , серия Monty , , , . Также характерен для космических скролл-шутеров ( Zynaps , R-Type ), так как чёрный фон с небольшим количеством точек хорошо подходит для изображения космоса.

+ : крайняя простота.

: скудное графическое оформление фона.

4. Двухцветное изображение

Athena : монохромное чёрно-голубое игровое поле

В пределах игрового поля всё изображение становится двухцветным ( Elite , , Head Over Heels , Robocop , , ). Впрочем, цвет, в который окрашено игровое поле, также может нести какую-либо информацию. В игре Robocop это разные уровни, в это разные локации, в это зоны в пределах уровня. Часто ( Draconus , ) основная часть изображения двухцветная, и только некоторые важные объекты отрисованы другими цветами.

Таким способом отрисовывается большинство псевдо-3D (гонки) и изометрических игр.

+ : полное отсутствие артефактов; никаких ограничений на движение; никакого управления атрибутами.

: теряется возможность рисовать в цвете.

5. Выравнивание спрайтов по знакоместам

Laser Squad : каждая клетка — 2×2 знакоместа

Шаг движения спрайтов ограничивается 8-пиксельной сеткой. Этот способ хорошо подходит для игр, не требующих динамичной отрисовки сцен (стратегии, логические игры), но применяется и для динамичных игр — так добились быстрой игры Centipede . Движение спрайтов и прокрутка фона с шагом в 8 пикселей хорошо заметны в играх , , , .

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

В некоторых случаях применяется так называемое вытеснение спрайтов, когда в одном знакоместе 8×8 отрисовывается только один спрайт (и, возможно, фон). В играх Savage и Astro Marine Corps передний спрайт полностью вытесняет задний. Вытеснение спрайтов очень заметно в игре Golden Axe , что портит общее впечатление от графики игры.

+ : простота; один только этот шаг серьёзно снижает артефакты.

: не всегда пригодно, в динамичных играх приводит к движению рывками.

6. Динамическое изменение атрибутов

Картинка в нетрадиционном режиме Spectrum’а

Некоторые демо-ролики динамически меняют атрибуты, синхронизируясь со строчной развёрткой монитора. Конфликты не исчезают, но конфликтная зона уменьшается до 8×1 пикселей.

+ : попытка обойти ограничения видеопамяти.

: способ отнимает много процессорного времени.

Примечания

  1. . Дата обращения: 23 июня 2022. 23 июня 2022 года.
  2. . L Break Into Program, 0:1 . Дата обращения: 23 июня 2022. 3 июля 2022 года.
  3. . Overtaken by events . Дата обращения: 23 июня 2022. 31 марта 2022 года.
  4. . NESdev Wiki . Дата обращения: 23 июня 2022. 29 мая 2022 года.
  5. . Дата обращения: 23 июня 2022. 18 мая 2022 года.
  6. . Дата обращения: 27 июня 2022. 27 июня 2022 года.
Источник —

Same as Конфликт атрибутов