Střet atributů - Attribute clash

Účinek střetu atributů v systémech MSX 1 při použití režimu Highres 256 × 192 v MSX 1 (v tomto příkladu bloky 8 × 1 pixelů sdílejí stejnou barvu popředí, takže efekt je podobný spektru ZX)

Atributový střet (také známý jako barevný střet nebo krvácení ) je artefakt zobrazení způsobený omezeními v grafických obvodech některých barevných 8bitových domácích počítačů , zejména Sinclair ZX Spectrum , kde to znamenalo, že v libovolném lze použít pouze dvě barvy 8 × 8 dlaždic pixelů. Účinek byl patrný také na softwaru MSX a v některých titulech Commodore 64 . Řešení, která mají zabránit tomu, aby se tento limit stal zjevným, byla od té doby považována za prvek kultury programátorů Spectrum.

K tomuto problému dochází také u "semigrafických režimů" (textové režimy s grafickými funkcemi) barevného počítače a draka , ale tyto počítače mají také nepřidělenou grafiku a lepší rozlišení. Několik herních konzolí té doby mělo takové režimy videa, které způsobovaly taková omezení, ale obvykle umožňovaly více než dvě barvy na dlaždici: NES (Famicom) měl pouze jeden režim, který byl také „semigrafický“ a umožňoval čtyři barvy na 16 × 16 "blok" (skupina čtyř dlaždic 8 × 8), ale 16 na obrazovku. Super NES umožňoval 16 barev na dlaždici, ale 256 na obrazovku (mimo jiné vylepšení), a proto byl artefakt mnohem těžší si všimnout, pokud vůbec (kromě těch, kteří museli programovat zařízení).

Příčiny

Srážka atributů na ZX Spectrum byla způsobena jejím výstředním uspořádáním paměti displeje, které bylo navrženo tak, aby minimalizovalo využití paměti vyrovnávací paměti snímků a optimalizovalo zobrazení textu místo grafiky. Spíše než omezit paletu barev z důvodu úspory paměti, ukládal Sinclairův design bitmapu pixelů a informace o barvách do samostatných oblastí paměti. Zatímco bitmapa určovala stav jednotlivých pixelů (zapnuto nebo vypnuto), barevné informace (nebo „atributy“) odpovídaly matici textových znaků - 24 řádků po 32 sloupcích - s jedním bajtem na buňku znaků 8x8 pixelů. Tento bajt kódoval dvě 3-bitové hodnoty, známé jako INK (barva popředí) a PAPER (barva pozadí) po základních instrukcích použitých k definování hodnot barev. V atributu byly zahrnuty dvě další binární hodnoty; JAS bit označující jednu ze dvou úrovní jasu na dvou barev a FLASH bit, který, když set, způsobil dvě barvy, které mají být zaměněno v pravidelných intervalech. Toto schéma poskytlo 15 různých barev: osm kombinací červené, zelené a modré na dvou úrovních jasu (kromě černé, která vypadala stejně u obou jasů). Každý blok 8x8 pixelů tedy mohl obsahovat pouze 2 barvy z 15 dostupných, které musí být obě z BRIGHT nebo non-BRIGHT polovin palety. Pokus o přidání třetí barvy v oblasti 8x8 pixelů by přepsal jednu z předchozích barev.

ZX Spectrum použilo pro bitovou mapu 6144 bajtů, přičemž jeden bajt představoval osm pixelů, a pro barevné atributy použil 768 bajtů. To dává celkem 6912 bajtů pro celý grafický displej, což je relativně malý součet pro počítač doby Spectrum s „barevnými“ schopnostmi. Tato grafická architektura byla zachována až do pozdějších redesignů Spectra od Sinclaira a Amstradu , až do Amstradova finálního modelu ZX Spectrum +3, a to navzdory tomu, že následující modely obsahovaly 128  KiB RAM, čímž se snížila potřeba šetřit paměť tímto způsobem. . Architektura byla zachována, aby se zabránilo ztrátě zpětné kompatibility .

Atributy používala celá řada dalších počítačů a konzolí, včetně Commodore 64 , MSX a NES , ačkoli velikost bloků atributů a počet barev na blok se lišily. S použitím hardwarových skřítků se však dalo zabránit střetu atributů.

Tyto Thomson MO5 a až 7 mikropočítače, tím Oric 1 se MSX 1 architektura a další systémy založené na Texas Instruments TMS9918 řadiče Zobrazovací displej velmi podobná s omezujícími podmínkami: pro každou skupinu osmi pixelů horizontálně, pouze dvě barvy z 16 jsou k dispozici . dává podobný, ale méně závažný účinek než u spektra. MSX 1 neměl k dispozici pouze jeden jediný bajt atributu barvy pro celou oblast 8x8 pixelů, jako tomu bylo v případě Sinclair Spectrum, ale osm, s jedním bajtem atributů pro každou skupinu pixelů 8 × 1. Zatímco tedy bylo spektrum omezeno na jeden barevný pár pro čtvercovou plochu 8x8 pixelů, MSX 1 byl omezen pouze na jeden barevný pár pro „linii“ osmi sousedních pixelů. Kromě toho MSX1 mohl používat skřítky, kteří nebyli vázáni na žádné problémy se střetem atributů (i když skřítci MSX 1 měli svá vlastní omezení, například být černobílý).

V praxi tato technická výhoda často nepomohla systémům MSX 1 vytvářet lepší obrázky. Problém MSX 1 spočíval v tom, že mnoho evropských softwarových společností, které převáděly hry Spectrum na MSX 1, ignorovalo všechna vylepšení, která MSX 1 měla oproti Spectrum, a výsledné verze MSX 1 tak měly stejné množství střetů atributů jako původní hry Spectrum ( Jack the Nipper II: In Coconut Capers je jedním z příkladů). Pro usnadnění převodu softwaroví vývojáři jednoduše zkopírovali hodnotu Spectra s jedním atributovým bajtem na všech osm odpovídajících bajtů atributů MSX ​​1. Ze stejného důvodu softwarové společnosti také ignorovaly spriteské schopnosti MSX 1, a protože video možnosti zobrazení byly jinak docela podobné (rozlišení 256 × 192, 16 barev), oba systémy vyráběly pro stejnou hru prakticky identické displeje. Naproti tomu japonské hry MSX 1 využívaly všechny možnosti MSX 1, což často vedlo k lépe vypadajícím hrám.

Účinky

Aby se zabránilo střetu atributů, musely být statické grafické displeje konstruovány opatrně. Jemně detailní barevná grafika byla nemožná, protože barvu bylo možné použít pouze v blocích 8 × 8 pixelů. Pečlivý design by mohl dosáhnout působivých výsledků, stejně jako synchronizace barevných změn s obnovovací frekvencí displeje - obvykle televizoru.

Animované displeje však byly obtížnější - výrazná nevýhoda ve stroji, jehož primárním využitím bylo hraní videoher . Pokud by byl zbarven pouze jeden pixel v bloku 8 × 8, protože se ho dotkla pohyblivá část displeje, celý blok by změnil barvu. Takto podrobná pohyblivá grafika způsobila, že kolem nich následovaly velké ošklivé proužky rychle se měnících barev.

Řešení

Časný software jednoduše ignoroval problém. Později bylo standardním řešením použití barvy pro statické zobrazovací prvky - například dekorativní ohraničení kolem okrajů obrazovky, které by mohlo zahrnovat zobrazení skóre atd., Nebo nějakou formu instrumentace - s menší centrální monochromatickou oblastí obsahující všechny animovaná grafika. Díky tomu byla také grafika rychlejší, protože bylo nutné aktualizovat méně obrazovky - jak menší oblast, tak pouze změna informací o pixelech a ponechání nedotčené barevné oblasti.

Některý software Spectrum, jako je Light Force FTL , používal extrémně pečlivý grafický design k dosažení plně barevné pohyblivé grafiky, v podstatě omezením jak designu prvků na obrazovce, tak jejich pohybových cest na hranice rozlišení 8 × 8. Pohyblivé prvky byly tedy relativně velké a spíše hranaté nebo hranaté a jejich pohyb byl omezen, ale nebylo to vizuálně zřejmé a pohled na pohybující se plnobarevnou grafiku byl pro majitele Spectra nesmírně působivý.

Žádní vývojáři hlavního proudu nebyli schopni najít vhodnou všestrannou opravu problému střetu atributů, místo toho raději použili metodu černobílé grafiky, když byla potřeba rychlá, jasná grafika, a plnobarevnou grafiku, když to situace dovolila.

Bylo možné věnovat pečlivou pozornost načasování upravit oblast atributů RAM v určitých konkrétních dobách, kdy byl displej vykreslen - nechte hardware displeje nakreslit jeden řádek displeje, poté změňte atribut RAM před nakreslením dalšího řádku, čímž získáte účinek různých atributů pro každý jednotlivý řádek. Tyto změny musely být provedeny v softwaru a jejich programování bylo časově náročné, což znamená, že tato technika byla obvykle omezena na speciální efekty. Tato technika byla také velmi populární v demoscénu .

Problém a řešení

Většina her před rokem 1987 ignorovala střet atributů. Některé pozdější hry, jako Knight Tyme a Three Weeks in Paradise, umožnily hráčům vybrat si mezi dvěma režimy střetů atributů: ten, který ignoroval atributy hlavních postav, míchání postavy do pozadí a naopak, upřednostnění barevného schématu postav před obrázky pozadí .

Dalším řešením bylo jednoduše vykreslit grafiku ve dvou barvách, jinak známých jako monochromatická, jak to bylo u verze Spectrum Knight Lore v roce 1984.

Mnoho her používalo plnobarevné pozadí a „rolování postav“ (kde se v prostředí rolovalo osm pixelů najednou), ale černobílé skřítky, které byly skutečně průhledné, jako v Double Dragon , byly nakresleny takovým způsobem, aby vynikly a vyhýbaly se závislost na barvě. Mnoho her používalo tuto metodu s plynulým posouváním po jednotlivých pixelech, ale střet atributů, protože prvky jednoho bloku znaků byly „předány“ do dalšího, byly jasně viditelné.

Prominentním (a méně úspěšným) příkladem použití plnobarevné grafiky byla konverze Spectrum z Altered Beast . Tato hra trpí značným střetem atributů.

Programátor Don Priestley vyvinul pro několik svých her osobitý styl pomocí velkých kreslených skřítků, které byly pečlivě navrženy tak, aby pokrývaly celé bloky postav, aniž by vypadaly nepřiměřeně čtvercově. Nevýhodou této techniky bylo, že hra musela být navržena kolem grafiky, a tak to nebylo užitečné pro porty z jiných platforem. Hry, které používaly tuto techniku, zahrnovaly Popeye , The Trap Door , Through the Trapdoor a Flunky . Mezi další vývojáře, kteří používali podobnou techniku, patřili Mike Singleton s Dark Scepter a Gang of Five s Danem Dareem: Pilot of the Future .

V roce 1994 vyvinul programátor Igor Maznitsa koncepční platformu s více CPU „ZX-Poly“ založenou na ZX-Spectrum-128; platforma umožňuje vyhnout se střetu atributů a může dokonce zabarvit mnoho starých her bez změn ve spustitelném kódu.

Reference

  • "FAQ: Reference" . WorldOfSpectrum.org .
  • Surman, David. „Arcade Color, Illustration and Attribute Clash 1979 - 89“ . Academia.edu .
  • Smith, Tony (2012-04-23). „Všechno nejlepší k 30. narozeninám, Sinclair ZX Spectrum“ . Registr .
  • Zdroje emulátoru ZX-Poly a popis platformy