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

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Конфликт атрибутов на 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. Использовать атрибут спрайта[править | править вики-текст]

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

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

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

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


2. Использовать атрибут фона[править | править вики-текст]

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

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

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

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

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

3. Сплошной фон, цветные спрайты[править | править вики-текст]

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

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

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

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

4. Двухцветное изображение[править | править вики-текст]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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