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


- 2021-02-01
- 1

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

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


Это самый простой в программировании метод — программист только управляет пикселями, не трогая плоскость атрибутов. В таком случае нет и цветного «кирпича», но спрайт теряется на фоне ( Double Dragon ).
Чтобы этот метод давал качественные результаты, выработали особый стиль ( Saboteur! , Bomb Jack , Cyclone , ). Оформление игры основывается на чёрном цвете , чёрный цвет практически везде: в узорах стен, в декорациях, в одежде врагов… Нечёрный же цвет играет роль освещения: например, чёрный ниндзя , бегущий вдоль жёлтой стены, становится чёрно-жёлтым, на фоне синего неба тот же ниндзя чёрно-синий. Конфликт будет, если в каком-то знакоместе отказались от чёрного цвета (спинки стульев в Saboteur II: Avenging Angel ).
+ : интересный визуальный стиль; цветное изображение сочетается с незначительными артефактами; никакого управления атрибутами.
− : требует, чтобы персонажи были чёрными, с минимумом светлых линий, а фон чёрно-цветным. Если это не так, знакоместа будут явно видны.
2. Использовать атрибут спрайта

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

Один из самых популярных способов. Фон окрашивается в один цвет (чаще всего чёрный), с минимумом оформления, а геймплей строится так, чтобы вероятность столкновения двух объектов разных цветов была минимальной. Большинство элементов уровня непроходимы и конфликта не вызывают; немногие проходимые или являются передним планом и перекрывают спрайты ( Exolon , ), или распространяют свой атрибут на спрайт ( Dizzy ).
Этим способом отображается большинство игр типа «лабиринт»: Manic Miner , серия Monty , , , . Также характерен для космических скролл-шутеров ( Zynaps , R-Type ), так как чёрный фон с небольшим количеством точек хорошо подходит для изображения космоса.
+ : крайняя простота.
− : скудное графическое оформление фона.
4. Двухцветное изображение

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

Шаг движения спрайтов ограничивается 8-пиксельной сеткой. Этот способ хорошо подходит для игр, не требующих динамичной отрисовки сцен (стратегии, логические игры), но применяется и для динамичных игр — так добились быстрой игры Centipede . Движение спрайтов и прокрутка фона с шагом в 8 пикселей хорошо заметны в играх , , , .
Этот механизм не всегда помогает, и часто дополняется другими методами. Например, в играх и применяются крупные спрайты со сплошной заливкой цветом, при этом крупное изображение, находящееся на заднем плане, передаёт свой цвет в цвет фона переднего спрайта.
В некоторых случаях применяется так называемое вытеснение спрайтов, когда в одном знакоместе 8×8 отрисовывается только один спрайт (и, возможно, фон). В играх Savage и Astro Marine Corps передний спрайт полностью вытесняет задний. Вытеснение спрайтов очень заметно в игре Golden Axe , что портит общее впечатление от графики игры.
+ : простота; один только этот шаг серьёзно снижает артефакты.
− : не всегда пригодно, в динамичных играх приводит к движению рывками.
6. Динамическое изменение атрибутов

Некоторые демо-ролики динамически меняют атрибуты, синхронизируясь со строчной развёрткой монитора. Конфликты не исчезают, но конфликтная зона уменьшается до 8×1 пикселей.
+ : попытка обойти ограничения видеопамяти.
− : способ отнимает много процессорного времени.
Примечания
- ↑ . Дата обращения: 23 июня 2022. 23 июня 2022 года.
- ↑ . L Break Into Program, 0:1 . Дата обращения: 23 июня 2022. 3 июля 2022 года.
- ↑ . Overtaken by events . Дата обращения: 23 июня 2022. 31 марта 2022 года.
- . NESdev Wiki . Дата обращения: 23 июня 2022. 29 мая 2022 года.
- ↑ . Дата обращения: 23 июня 2022. 18 мая 2022 года.
- . Дата обращения: 27 июня 2022. 27 июня 2022 года.

- 2021-02-01
- 1