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

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Конфликт атрибутов на MSX 1

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

Причина[править | править исходный текст]

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

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

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

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

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

Способы борьбы[править | править исходный текст]

1. Приоритет у одного из слоев[править | править исходный текст]

Terramex: здесь никто и не пытался скрыть квадратики знакомест. К тому же персонаж стоит перед кустиком, но зелёный квадрат всё равно виден.

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

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

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


2. Монохромный фон, цветные спрайты[править | править исходный текст]

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

Один из самых популярных способов. Фон окрашивается в один цвет (чаще всего черный), с минимумом оформления, а геймплей строится таким образом, чтобы вероятность столкновения двух объектов разных цветовбыла минимальной. Большинство элементов уровня либо являются непреодолимым препятствием для спрайтов, либо при наложении позиций отрисовываются поверх спрайтов, полностью загораживая их (Exolon, Rex). Этим способом отображается большинство игр типа "maze"/"лабиринт" (Серия Monty, Abu Simbel Profanation, Jet Set Willy, Cybernoid, Into The Eagles Nest). Также характерен для космических скролл-шутеров (Zynaps, R-Type), так как черный фон с небольшим количеством точек хорошо подходит для изображения космоса.

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

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


3. Двухцветное изображение[править | править исходный текст]

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

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

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

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

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

4. Выравнивание спрайтов по знакоместам[править | править исходный текст]

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

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

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

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

5. Монохромные спрайты, цветной фон.[править | править исходный текст]

Saboteur!: жёлтый и голубой цвета обставлены как освещение

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

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

: не всегда пригодно.

6. Динамическое изменение атрибутов[править | править исходный текст]

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

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

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

: способ отнимает много процессорного времени и поэтому непригоден для игр.