Navigátorposledních 10 z diskuze |
GRAFIKA A GRAFICKÉ EFEKTY (MÓDY) NA ZX SPECTRUPozn.: Blikající obrázky na této stránce (interlace) na skutečném
Spectru blikají o poznání rychleji (1/25s), toto je jen omezení animovaného
GIFu. 10 CLS Nejdřív se začne plnit horní třetina, pěkně každý 8mý mikrořádek. Pak prostřední a nakonec spodní. Druhá část VRAM se nazývá attributová část a ta má za úkol vybarvovat normální pixelovou VRAM (ona jí spíš podbarvuje, obsah pixelové VRAM nijak nemění). Ta začíná tam, kde končí pixel VRAM a to na adrese 22528 a je dlouhá 768 bajtů. Její rozlišení je 32x24 barevných kostiček. Proč kostiček? Protože každý její 'bod' je ve skutečnosti na pixelové VRAM vidět jako 8x8 pixelů, tedy zabere přesně místo např. na jeden znak. Klasický Spectrum obrázek tedy zabírá 6912 batů (6144+768). Uspořádání této části VRAM v paměti už není tak chotické, jako u pixel VRAM, ale je pěkně lineární a vše jde popořadě. Pro názornost si uvedeme jednoduchý program v BASICu. Nejdřív vyplníme obrazovku nějakou grafikou:
Teď máme obrazovku plnou písmen A (je jedno čeho, prostě potřebujeme, aby tam něco bylo), černobíle. Resp. Momentální attributová VRAM vypadá tak, že její attributy jsou nastaveny na černý inkoust a bílé pozadí ve všech 768mi 'čtverečcích'. A teď abychom obrázek trochu vybarvili, můžeme použít takovýto program: 50 FOR f=22528 TO 22528+768 ...obarví se nám každý čtvereček (bajt ATTR VRAM) náhodnou barvou. Spectrum dokáže zobrazit jen 8 základních barev. Černou, tmavě modrou, červenou, fialovou, zelenou, světle modrou, žlutou a bílou, tak proč 256 hodnot? Jednoduše. Speccy umí také kromě základních 8mi barev ještě tyto barvy zesvětlit (BRIGHT), čímž dosáhneme 7mi dalších barev (černá zesvětlit nejde, resp. jde, ale není to vidět) a také nechat blikat (FLASH). Kombinací všech těchto jevů dojdeme k číslu 256. Např. attribut s nastavením INK 5 (světle modré popředí) a PAPER 2 (červené pozadí) může navíc ještě zároveň i blikat a být jasnější. Nejde ovšem udělat to, aby byl např. v jednom attributu jenom INK s jasem a zároveň PAPER bez jasu. Ve hrách je tato nevýhoda samozřejmě dost znatelná a na první pohled (někdy i na druhý) odradí některé C64 člověky. Většinou se to řešilo všelijakými kompromisy, jako třeba tím, že pozadí bylo pěkně vybarvené attributy, ale postavičky (sprity, btw. pouze softwarové, Spectrum nemá hw sprity) se samy přebarvovaly podle toho, před jakým pozadím chodily. V některých hrách šlo i přepínat, jestli bude postavička přebarvována pozadím nebo naopak pozadí bude přebarvováno bílou postavičkou. Hráč si sám vybral, co je pro něj menší zlo. Problém s attributy zbaběle obešli ti, kteří hru vůbec neobarvili (ROBOCOP, RENEGADE 3, SLAP FIGHT, TERRA CRESTA a desítky dalších). Skvěle vybarvená hra je také např. TOWDIE, BOOVIE, ADDAMS FAMILY, GRELL AND FELLA, atd. Bohužel, attributovým kolizím se vyhnout téměř nelze. Buď je hra monochromatická, nebo barevná, ale s nebezpečím kolizí (kromě příkladů, které teď uvedu...) Pro vyhlášení války attributům se rozodli programátoři fy Probe, Dave Perry a Nick Bruty (SAVAGE, EXTREME, DAN DARE 3, atd...), jejichž hry mají pěknou pestrobarevnou grafiku a attributy nikde nekolidují s pozadím apod. Sprity se v nich totiž posouvají o celých 8 bodů (tedy ne moc plynule) a tím je dosaženo kýženého efektu. Podobná technika je použita ve hrách R-TYPE, LIGHTFORCE a v několika dalších. Taková grafika, jaká je třeba v Mayhem in Monsterland na Spectru není technicky možná, zejména detailní vybarvení spritů atd. Spectrum má také okraj, čili BORDER. Okraj může mít jen jednu z 8mi zálkadních barev, nedokáže blikat ani být světlejší. Do této oblasti nejde normálně zapisovat, ale různými fígly v assembleru (i v BASICu) však ano. Zkuste si tento prográmek: 10 BORDER 0: BORDER 1: BORDER 2: BORDER 3: BORDER 4: BORDER 5: BORDER 6: BORDER 7: PAUSE 1: GO TO 10 Jak vidno, program je vlastně nekonečná smyčka, měnící rychle za sebou barvu okraje, která je sesynchronizovaná příkazem PAUSE 1, který zde slouží jako vyrovnání paprsku (rasteru s 1/50s). Takovýto efekt se je tedy náročný na vyčasování a vyžaduje dost velkou synchronizaci, což není vůbec snadné např. v demech při kombinaci ještě jiných efektů. A tím jsme nakousli jeden z nejvíce využívaných barevných efektů, normálně na Spectru nemožných a tím je MULTICOLOR. Jak jsmě viděli z BASICovské ukázky, oblast BORDER není omezena políčky 8x8 pixelů, ale každý mikrořádek tam může mít jinou barvu. Stejně tak je to i s ostatní částí obrazovky, pixelové VRAM (mezi Spectristy je pro toto zažitý výraz PAPER, pro okraj BORDER.. podle odpovídajících BASICovských příkazů). Multicolor jde udělat i v PAPERu a to tím samým způsobem jako v borderu s tou předností, že pole 8x1 pixelů může mít jakoukoliv barvu (vodorovná čárka dlouhá 8 bodů a široká 1 bod). Teoreticky to znamená, že na každém mikrořádku (v ose Y) celého PAPERu můžeme mít jinou barvu. V ose X zůstává 8 pixelů na barvu. Nejnázornější příklad je asi na demo SHOCK, kde je v pixel
VRAM (PAPER) nakreslené logo, které potom podbarvuje správně vyčasovaný Multicolor. I BORDER však můžeme měnit i v ose X. Tak, jako v PAPERu máme
na každý barevný čtvereček 8 pixelů široký, v BORDERU toto jde taky, ale šířka
jednoho možného 'pixelu' v BORDERu je poněkud větší. Viz např. demo NMI3 od
Dynamite Dynastie. Takovýto efekt je však ale opravdu programátorským oříškem. (NMI3. viz. Horní část obrazovky, můžeme napočítat 13 a kousek
borderových 'pixelů' v ose X) (PSG WINS. Vykreslením attributů v kombinaci s vhodným vyčasováním BORDERu lze udělat třeba fullscreen nápis) Do Borderu jde i takto psát, pěkně to je vidět třeba ve hře SENTINEL nebo demu LSD. Asi první takovýto Borderový efekt jsem viděl ve hře STARION (1984). Psal jsem, že Multicolor v PAPERu je omezen na matici 8x1?
Vlastně ne tak docela. Speciálním vyčasováním lze dosáhnout třeba toho, že můžou
být v jednom 8x8 attributu (čtverečku) 4 barvy, např. demo NMI2, EYE ACHE nebo
POWER UP jsou toho důkazem. (NMI2. v BORDERu je vidět klasický rasterový multicolor, v
PAPERu pak mezi ním loga NMI, podbarvená 8x1 (nahoře) a 4x1 (dole) multicolorem.
Nápis 'THIS' je scroller a jeho nezvyklé barvy jsou způsobené podkreslením attributů
mřížkou %10101010 a %01010101) (zde - vlevo dole - je použitý i mírný dithering pro zmenšení
přechodů mezi barvami) (NMI3. Tady je možno zvolit si stiskem klávesy, jaké Spectrum
máme a jaká se má přepnout časovací rutinka). (POWER UP. Multicolor - 4 barvy v jednom atributu) Normální Spectrum 48K má jen jednu VRAM, tu, kterou jsem popisoval. Ale kdo to myslí se ZXkem vážně, používá výhradně Spectrum se 128kB RAM. To se liší tím, že má víc paměti (překvapivě), rozdělenou do tzv. stránek, mezi kterými programátor přepíná. Větší je i ROM, kde je navíc nový, nepříliš povedený interpret BASICu (ten starý je ale také zachován, kvůli kompatibilitě), umožňující zadávání příkazů písmeno po písmenu. Navíc má i zvukový generátor AY (ten lze ale připojit i k 48K ZX pomocí externího modulu (interface)). Původní 48K Spectra měly jen 1bitový speaker, podobný jako mají PC, který když hraje, tak CPU nemůže dělat nic jiného. Přes jeho primitivitu pro něj bylo vytvořeno několik geniálních až 5ti pseudo-kanálových hudeb zejména ve hrách. Mezi ty nejznámější patří CHRONOS, FUTURE GAMES, COMBAT SCHOOL a AGENT-X 1 a 2 od Tima Follina. Pro pípák existuje i desetikanálová rutinka, najdete ji v hudebním programu ZX-10. Ale zpátky k paměti. Jedna z paměťových stránek, konkrétně
č.7, plní funkci druhé VRAM. Její struktura je identická s normální VRAM, jen
začíná na adrese 49152 (a je viditelná na obrazovce po přepnutí na portu 32765).
Programátor ji může použít třeba jako doublebuffer pro plynulejší animaci apod.
nebo se používá např. pro interlace, tj střídání sudých a lichých mikrořádků
(nebo mikrosloupců), čímž se dá dosáhnout rolišení 512x192 nebo 256x384 bodů. (YES. Typický interlace - rychlé přepínání mezi dvěma VRAM) Myslím, že princip není třeba moc popisovat, protože podobné věci mají i Commodoristé. Daleko zajímavější je však (aspoň pro mě) tzv. mód INTERCHROME. Jde v principu o to samé, co interlace, ale s barvami. Vhodným
střídáním barev tak lze dosáhnout až 256 různých odstínů na obrazovce. Interchrom
jde také kombinovat např. s Interlace. Následuje asi to nejlepší co se týče
synchronizace okraje plus interlace - intro PSG WINS / Prestige. (PSG WINS - interlace ani animovaný sprite do GIFu nacpat bohužel nešel) Šachovnice je (nepochopitelně) i v BORDERu a dokonce se plynule pohybuje po sínusovce a je skvěle sesynchronizovaná s oblastí PAPERu, navíc se zde vypisuje interlace text, napravo od něj je tečkový sin-efekt (také lacovaný), nahoře a dole jsou borderové rasterbary a ještě k tomu tam poletuje malý sprite. Toto je opravdu na hranicích možností Spectra. Nutno dodat, že toto intro funguje správně pouze na ruském klonu Pentagon 128. Různých druhů Specter bylo totiž moc a téměř každé bylo uděláno z jiných součástek, mělo různě velkou paměť, různě adresované porty atd. Většina dem je časovaných buď pro originální ZX 48, ZX 128, ta ruská ve většině případů pro Pentagon. Je v tom dost zmatek, asi jako u diskových systémů Spectra, kde platí pořekadlo Každý pes jiná ves a bylo by to na samostatný článek. GIGASCREEN Gigascreen je pravý grafický mód, protože jej zajišťuje speciální
hardware. Používá se na některých ruských ZX klonech. Princip je v tom, že při
zobrazení obrázku, používajícího obě VRAM, tj. Rychle se přepíná 1. a 2. VRAM,
vzniká nepříjemné blikání. Velmi zjednodušeně řečeno, gigascreen toto blikání
ostraňuje a obrázek pak vypadá, jak by měl skutěčně více barev, než je zdrávo.
Jako příklad uvedu demo STELLAR CONTOUR. MULTITECH I pro Multitech je nutný speciální hardware, a to procesor
Z80 DMA. Tento mód vymysleli zlínští 8BitCompany a uvidíte ho jen na Spectrech
s diskovým řadičem MB02+ nebo přídavným Z80 DMA interfacem (vše taktéž od 8BC).
Princip spočívá v tom, že Speccy s DMA dokáže zobrazit fullscreen multicolor.
Pokud máte černobílý monitor nebo TV, jeví se barvy jako odstíny šedi a právě
tohoto zneužívá Multitech tím, že obrázek zobrazí v DMA Multicoloru tak, že
na čb monitoru vypadá téměř jako černobílá fotografie.
V barvách je to ale pochopitelně barevný chaos. DITHVIDE Tuto zobrazovací techniku vymyslel Zilog (ten scener, ne ta firma) a poprvé prezentoval na Foreveru 2003. Není k ní nutný žádný speciální hardware, funguje na všech Spectrech a jejich klonech se 128K pamětí. Dokáže zobrazovat a Spectru zbyde ještě poměrně dost CPU času. Funguje také na principu dvou VRAM, ve kterých je uložený požadovaný obrázek i s attributy, předpočítaný speciálním softwarem (Linux) tak, že aby obrázek vypadal po převedení co nejvěrněji. Pixely obrázku se zditherují a do attributových oblastí obou VRAM se vypočítají barvy, které po spojení obou obrázků (rychlé střídání obou VRAM) dá multicolor, pasující přesně na požadovaný obrázek. V podstatě je to něco jako softwarově vyřešený Gigascreen, který bliká, ale propočítaný programem napsaným jen pro tento účel. Dithvide bylo primárně navrženo pro zobrazování konvertovaných obrázků. Bohužel, tato technika nebyla skoro vůbec použitá, i když vlastně není nijak hw náročná. Btw. dithvide dokáže generovat obrázky i pro C64 hires, takže je tu možnost přijít s něčím novým. Pro klasický Multicolor existuje editor COLOR DRAW, kterým se dají dělat téměř celoobrazovkové obrázky v rozlišení attributu 8x1. Druhou VRAM zase využívá BURIAL GFX EDITOR. Jinak pro ostatní jmenované techniky neexistuje editor přímo pro Spectrum, vše se musí zaonačit za pomocí nějakého vícebitu nebo prostě naprogramovat. Takový komfort C64 grafických editorů (zejména těch pro speciální módy) na ZX není a nikdy nebude. Víceméně existuje jen pár základních, jako např. ART STUDIO, ARTIST 2, SCREEN MACHINE, COLOR DRAW, BURIAL, a ještě možná pár dalších, ne tak dobrých, a toť vše. Na závěr bych chtěl dodat, že narodzíl od C64 nemá ZX Spectrum žádný speciální grafický čip (ULA grafický čip není). Vše má na starosti CPU Z80 (3,5MHz), takže nejde jednoduše např. nechat pracovat grafický čip s tím, že to uvolní veškerý čas CPU. Jediné, co ve Spectru dokáže pracovat (hrát) samostatně je AY (ještě aby ne). Pro www.c64.cz objektivně sepsal Factor6 (call me lamer :) |
Poslední recenzereakce na článkyTOP 10 HRY
|