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

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

Причина

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечания

Категория:ZX Spectrum Категория:Аппаратные приёмы компьютерной графики Категория:Артефакты компьютерной графики