Конфликт атрибутов
Конфликт атрибутов или клэшинг (англ. attribute clash) — артефакт графики, проявляющийся на старых домашних компьютерах и связанный с аппаратными ограничениями. Наиболее известен пользователям ZX-Spectrum.
Деловые компьютеры, в противовес домашним, сужали цветовую палитру, но не допускали подобных ограничений; в любой пиксель можно было писать любой цвет из N. CGA имел всего 4 цвета, а Apple Macintosh был вообще монохромным.
ПричинаПравить
Для экономии памяти и ускорения работы первые цветные компьютеры не позволяли присваивать любому пикселю любой цвет. Вместо этого экран делился на блоки, и каждому блоку давались два цвета — передний план и фон. В каждом из блоков пиксель имел один из этих двух цветов (и кодировался одним битом). При попытке вывести три цвета в один блок один из этих трёх цветов теряется, приводя к специфическим артефактам[1].
В частности, ZX-Spectrum каждому знакоместу размером 8×8 пикселей присваивал 1-байтовый атрибут — трёхбитовый цвет переднего плана INK
, трёхбитовый цвет фона PAPER
, 1 бит яркости BRIGHT
и 1 бит мигания FLASH
[2][3]. Это давало 15 цветов (только на отдельных комбинациях «видеоконтроллер+телевизор» чёрный как-то отличим от ярко-чёрного)[3]. Таким образом, при разрешении 256×192 видеопамять занимала всего 6912 байтов[2][3]. К слову сказать, эффект мигания использовался крайне редко в том числе и из-за того, что мигающая область явно состоит из квадратных блоков.
В MSX 1 атрибут присваивается горизонтальным блокам 8×1 пикселей. Кроме того, были аппаратные спрайты, не конфликтовавшие друг с другом и с фоном. Впрочем, при портировании с ZX-Spectrum байт атрибута зачастую размножали, а спрайтами не пользовались, что приводило к практически неотличимой игре. В NES конфликтная зона 8×8 пикселей — но с аппаратными спрайтами, аппаратной же прокруткой и широкой палитрой (всего 52 цвета, одновременно 8 палитр по 3 цвета + базовый[4]) это малозаметно.
Статичные картинки, естественно, строятся с учётом ограничений видеопамяти. В играх изображение строится динамически, и с проблемой требуется как-то бороться.
Способы борьбыПравить
1. Использовать атрибут фонаПравить
Это самый простой в программировании метод — программист только управляет пикселями, не трогая плоскость атрибутов. В таком случае нет и цветного «кирпича», но спрайт теряется на фоне (Double Dragon[1][5]).
Чтобы этот метод давал качественные результаты, выработали особый стиль (Saboteur!, Bomb Jack, Cyclone, Strike Force Cobra). Оформление игры основывается на чёрном цвете, чёрный цвет практически везде: в узорах стен, в декорациях, в одежде врагов… Нечёрный же цвет играет роль освещения: например, чёрный ниндзя, бегущий вдоль жёлтой стены, становится чёрно-жёлтым, на фоне синего неба тот же ниндзя чёрно-синий. Конфликт будет, если в каком-то знакоместе отказались от чёрного цвета (спинки стульев в Saboteur II: Avenging Angel).
+: интересный визуальный стиль; цветное изображение сочетается с незначительными артефактами; никакого управления атрибутами.
−: требует, чтобы персонажи были чёрными, с минимумом светлых линий, а фон чёрно-цветным. Если это не так, знакоместа будут явно видны.
2. Использовать атрибут спрайтаПравить
Спрайт распространяет свой атрибут на фон, что приводит к цветному «кирпичу», который следует за героем. Этот механизм применяется нечасто, обычно только для главного героя, но не для врагов — например, Pac-Mania[6] или серия игр про Уолли (Everyone's a Wally и др.)
+: спрайт отделяется цветом от заднего плана; никаких ограничений стиля или движения.
−: артефакты чётко видны.
3. Сплошной фон, цветные спрайтыПравить
Один из самых популярных способов. Фон окрашивается в один цвет (чаще всего чёрный), с минимумом оформления, а геймплей строится так, чтобы вероятность столкновения двух объектов разных цветов была минимальной. Большинство элементов уровня непроходимы и конфликта не вызывают; немногие проходимые или являются передним планом и перекрывают спрайты (Exolon, Rex), или распространяют свой атрибут на спрайт (Dizzy).
Этим способом отображается большинство игр типа «лабиринт»: Manic Miner[5], серия 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[5]. Движение спрайтов и прокрутка фона с шагом в 8 пикселей хорошо заметны в играх Savage, Astro Marine Corps, Dan Dare III, Extreme.
Этот механизм не всегда помогает, и часто дополняется другими методами. Например, в играх Trapdoor и Flunky применяются крупные спрайты со сплошной заливкой цветом, при этом крупное изображение, находящееся на заднем плане, передаёт свой цвет в цвет фона переднего спрайта.
В некоторых случаях применяется так называемое вытеснение спрайтов, когда в одном знакоместе 8×8 отрисовывается только один спрайт (и, возможно, фон). В играх Savage и Astro Marine Corps передний спрайт полностью вытесняет задний. Вытеснение спрайтов очень заметно в игре Golden Axe, что портит общее впечатление от графики игры.
+: простота; один только этот шаг серьёзно снижает артефакты.
−: не всегда пригодно, в динамичных играх приводит к движению рывками.
6. Динамическое изменение атрибутовПравить
Некоторые демо-ролики динамически меняют атрибуты, синхронизируясь со строчной развёрткой монитора. Конфликты не исчезают, но конфликтная зона уменьшается до 8×1 пикселей.
+: попытка обойти ограничения видеопамяти.
−: способ отнимает много процессорного времени.
ПримечанияПравить
- ↑ 1 2 Arcade Colour, Illustration and Attribute Clash 1979 - 89 | David Surman - Academia.edu (неопр.). Дата обращения: 23 июня 2022. Архивировано 23 июня 2022 года.
- ↑ 1 2 L Break Into Program - ZX Spectrum Screen Memory Layout (неопр.). Дата обращения: 23 июня 2022. Архивировано 3 июля 2022 года.
- ↑ 1 2 3 The ZX-Spectrum screen layout: Part I – Overtaken by events (неопр.). Дата обращения: 23 июня 2022. Архивировано 31 марта 2022 года.
- ↑ PPU palettes - NESdev Wiki (неопр.). Дата обращения: 23 июня 2022. Архивировано 29 мая 2022 года.
- ↑ 1 2 3 Colour Clash: The Engineering Miracle of the Sinclair ZX Spectrum — Paleotronic Magazine (неопр.). Дата обращения: 23 июня 2022. Архивировано 18 мая 2022 года.
- ↑ Три самых навороченных Пакмана на ZX Spectrum? - YouTube (неопр.). Дата обращения: 27 июня 2022. Архивировано 27 июня 2022 года.
В статье не хватает ссылок на источники (см. также рекомендации по поиску). |