VSA, neboli Voodoo Scalable Architecture je procesor, kterým byly osazovány
grafické karty Voodoo 4 a Voodoo 5. Od předchozích se lišil podporou DirectX 6, včetně renderingu ve
32bit barvách. Jeho hlavním přínosem byla technologie T-Buffer (akumulační buffer), což je jakýsi
sekundární frame buffer, do kterého jsou ukládány vyrenderované snímky připravené k aplikaci grafických efektů.
To byl především Rotated-Grid Full-Scene SuperSample AntiAliasing a soubor cinematických efektů (o těch dále).
AntiAliasing
Co je to vlastně AntiAliasing? AntiAliasing je metoda (pro jejíž realizaci existuje mnoho algoritmů), která
má za cíl odstranit Aliasing. Co je tedy Aliasing? Jsou to obrazové defekty (chyby) způsobené tím, že obraz je
vytvářen či zpracováván diskrétně (tj. nespojitě, neplynule). Např. není možné vytvořit plynulý barevný přechod
od červené k modré. Stále jde jen o sled pixelů, přičemž každý má o pár odstínů jinou barvu.
Tento způsob je využíván i s ohledem na to, že zobrazovací zařízení (monitor) je schopné používat jako
nejmenší jednotku obrazu pixel; nedokáže zobrazovat plynulé barevné přechody. Pokud je tedy vytvářen nějaký obraz
(i vektorový), je nutné ho převést na diskrétní (rastr, bitmapa). To si můžeme představit tak, že přes obrázek
položíme mřížku, jejíž každé políčko symbolizuje budoucí pixel. Do středu každého políčka umístíme bod
(tzv. sample, česky vzorek) a jaká barva je v místě, kde vzorek leží, takovou barvu bude mít celý pixel.
Tuto situaci jsem znázornil na obrázku.
Toto je příčinou těch "zubatých" hran obzvlášť patrných na šikmých liniích. Tyto zuby bývají také označovány jako "jaggies",
jagged edges apod. Jaggies ale nejsou jediným nepříjemným defektem. Dalším prvkem je tzv. flickering, neboli poblikávání.
Tento typ obrazové degradace je spíše známý v oblasti profesionálních a armádních simulátorů, protože jeho výsledkem
je zkreslený a nepřesný obraz. Konkrétně: Představte si situaci, že na scéně stojí v dálce sloup (či stožár).
Pokud je vzdálenost sloup-pozorovatel dostatečná, dojde k situaci, kdy sloup je "tenčí", než pixel, na který by měl být
zobrazen.
Obrázek: Sloup je hnědý, na bílém pozadí; červeně vzorky, podle nichž je určována výsledná barva pixelu.
Podívejte se na situaci číslo I.: Sloup se dostane do pozice, kdy vůbec nezasahuje do místa, odkud je odebrán vzorek (!),
takže ve výsledném obraze není sloup vidět!!! Když se ale pozorovatel nepatrně posune (situace II.), dostane se sloup do pozice,
ze které jsou odebrány vzorky pro barvu celého pixelu a sloup nejen že ve výsledné scéně bude vidět, ale zároveň bude
vypadat širší, protože bude zobrazen přes šířku pixelu, i když ve skutečnosti by měl být široký cca 2/3 pixelu.
(A: ideální obraz; B: odebrání vzorků; C: výsledný obraz)
Když se podíváme na výsledný obraz v pohybu, bude se sloup objevovat a mizet a nebude možné odhadnout
jeho tvar, vzdálenost, šířku, atp. (to je právě důležité pro ty simulátory).
SuperSampling (Ordered Grid) = OGSS
Je režim (algoritmus) AntiAliasingu, který 3Dfx nepoužívala. Možná se divíte, proč ho tedy zmiňuji.
Je to proto, že byl dlouhou dobu nejrozšířenější a majorita dnes používaných algoritmů vychází právě z tohoto principu.
Není příliš složitý. Jeho předpokladem je, že při vyšším rozlišení je množství chyb výrazně menší. Obraz je tedy vytvořen ve
dvojnásobném rozlišení a zmenšen. Tím je dosaženo toho, že každé čtyři pixely jsou interpolovány na jeden.
Pokud to trochu rozpitvám, pak tento proces můžeme popsat jako odebrání 4 vzorků barvy pro jeden pixel. Tyto barvy jsou
poté zinterpolovány (smíchány) a výslednou barvou je pixel vyplněn.
Pokud se pustím ještě trošku hlouběji, pak je možné odvodit, že vzorky jsou odebírány v místech, která jsou středem
pixelů, které by vznikly rozdělením každého pixelu na čtyři. Novější algoritmy mohou místa, odkud jsou vzorky odebrány
generovat náhodně, nebo naopak systematicky generovat podle typu obrazu. Ne tak tento původní SuperSampling.
Podívejte se na obrázek.
Všimněte si nedostatku tohoto algoritmu, který se naší situaci projevil. Pro pátý i šestý pixel
je vybrána tatáž barva, přestože levý pixel by měl být výrazně světlejší. Pokud by linie okraje hnědé plochy svírala
s mřížkou znázorňující pixely ještě menší úhel, byl by tento defekt ještě patrnější. Aby se tento defekt odstranil,
bylo by nutné používat takové množství samplů, které by odpovídalo počtu pixelů, které jsou od jednoho "zubu" k druhému.
Při velmi malých úhlech by pak toto číslo dosahovalo obrovských hodnot. V praxi by to znamenalo nutnost renderovat
obraz v tolikrát vyšším rozlišení, kolik je právě pixelů od jednoho "zubu" k druhému. To je samozřejmě
nedosažitelné (alespoň s dnešními domácími systémy).
Pokud shrnu výhody tohoto algoritmu, tak je to snadná možnost implementace do hardwaru a zvýšení kvality textur
(ty jsou totiž zobrazeny na vyšší rozlišení a poté zmenšeny).
Nevýhody ale převažují. Algoritmus je nepřesný, protože vychází z diskrétního obrazu. Výchozím bodem je totiž
dvojnásobné rozlišení, což znamená, že chyby typu flickering jsou stále přítomné. V menší míře, ale přítomné. Taktéž
s AntiAliasingem hran o úhlech blížících se horizontále a vertikále si tento režim neporadí.
SuperSampling (Rotated Grid) = AntiAliasing podle 3Dfx = RGAA
Přesto, že společnost 3Dfx byla první, která se rozhodla radikálně AntiAliasing prosazovat, se
nespokojila s Ordered-Grid SuperSamplingem. Začala prosazovat vlastní algoritmus, který nazývala
Rotated-Grid SuperSampling. Měl bych připomenout, že ve skutečnosti ale nejde o SuperSampling, protože principem
Rotated-Grid AntiAliasingu není zmenšování obrazu. Jde tedy spíš o jakýsi hybrid SuperSamplingu a MultiSamplingu.
Já osobně bych se ho ale nesnažil nikam škatulkovat; jde o režim tak specifický, že to ani dobře nejde.
Pojďme se podívat jak režim funguje. První procesor od 3Dfx, který byl tohoto algoritmu schopen byl VSA-100. Jeden VSA-100
dokázal hardwarově vytvořit dva vzorky, tzn. že pro používání režimu ve stupni 4x jsou zapotřebí 2 procesory
(Voodoo5 - 5500). Podívejte na obrázek.
V hořejší části obrázku je znázorněn ideální obraz a teoretické rozložení vzorků.
Každý procesor VSA-100 dokáže zpracovat dva vzorky, takže pro režim 4x oba spolupracují. Scéna je
vyrenderována ve stejném rozlišení, v jakém má být zobrazena. Je ale vyrenderována celkem 4x a to
metodou zvanou jittering (třesení). Obraz je vytvořen vždy s mírným posuvem (oproti standardnímu renderingu).
Tím je zajištěno, že objekty, u nichž se standardně projevuje subpixel flickering (to je zmíněné mizení či poblikávání
objektů rozměrově užších, než jeden pixel), jsou min. na jednom ze 4 snímků viditelné.
Posuv renderingu je dán rozložením vzorků; de-facto jde o nepatrné posunutí scény (v celkem 4 směrech)
oproti pozorovateli.
Budete-li sledovat obrázek, tak situace I. je vytvořena posunutím obrazu
nahoru, scéna II. naopak dolu. Scéna III. doleva, IV. doprava. Posun je zcela minimální, tak o 1/4 pixelu
oproti běžnému renderingu. Čtyři výsledné obrazy jsou uloženy do T-Bufferu a prolnuty
(tuto funkci může zastávat i speciální RAMDAC)
a výsledkem je obraz, který jde na monitor.
Oproti běžnému SuperSamplingu má tato metoda řadu výhod. Dokáže vynikajícím způsobem potlačit flickering. Všimněte
si rozložení vzorků. Přesto, že na každý pixel připadají celkem 4 (stejně jako u SuperSamplingu), tak dokáže
rozlišit mnohem více situací. Podívejte na obrázek.
Zatímco OGSS je schopen takovouto situaci správně zobrazit jen ve dvou případech a navíc jen tehdy,
je-li objekt (např. ten zmiňovaný sloup) široký min. půl pixelu, tak 3Dfx RGSS situaci zobrazí správně téměř vždy, protože
má k dispozici 4 případy, kdy se objekt překrývá s vzorky, a hlavně vertikální (či horizontální) vzdálenosti mezi
jednotlivými vzorky jsou výrazně kratší, než u OGSS, tudíž flickering by se mohl objevit až v případě, kdy objekt by
byl užší, než 1/4 pixelu, což je velice nepravděpodobné.
RGAA vyniká i v situacích s úhly blízkými horizontále a vertikále. Na takovýchto problémových
partiích pak dokáže oproti OGSS vytvořit bez problému až dvojnásobek přechodových odstínů.
Dalším plusem je také zvýšená přesnost obrazu. Je patrná na texturách a zvláště na drobných detailech, které jsou
při použití RGAA vykresleny přesněji (do každého pixelu je vneseno 4-násobné množství informací, než při standardním
renderingu).
Můžete se podívat na obrázek letadla (z World War II Fighters) bez
a s 3Dfx RG AntiAliasingem. Každý obrázek má ale cca 135kB.
Pokud používáte vyšší rozlišení (min. 1152*864) můžete si zkusit
prohlédnout i rozdíl mezi obrázky (cca 250kB celkem).
Pokud je to pro vaše připojení moc, připravil jsem dva výřezy.
První obrázek je z levé poloviny s RGAA, pravá půlka je bez AA. Všimněte si také linie na zadním křídle letadla.
Ta je viditelná jen na polovině s RGAA. Je to případ flickeringu, který dokázal RGAA potlačit.
Druhý obrázek) je také "půl na půl". RGAA je tentokrát na pravé polovině, levá bez AA. Zde si všimněte
především výrazně přesnějších textur pod vrcholem kopce při použití 3Dfx RGAA.
Pokud se o toto téma zajímáte hlouběji, můžete se podívat i na obrázky, jejichž autorem je Dave Barron,
spoluautor 3Dfx AntiAliasing Whitepaper(u) (ten a mnohé jiné jsou dole na stránce ke stažení). Zde je schéma OGSS
a zde 3Dfx RGAA. Tyto by měly být novějšího charakteru,
než původní schéma ve whitepaperu.
dopl. 26-01-2004
Propagační obrázek RG-FSAA od 3Dfx, včetně detailního výřezu.
Také nabízím vyjádření Johna Carmacka z ID Software ze 17.05.2000:
"The real unique feature of the voodoo5 is subpixel jittering during
rasterization, which cant reasonably be emulated by other hardware. This
does indeed improve the quality of anti-aliasing, although I think 3dfx might
be pushing it a bit by saying their 4 sample jittering is as good as 16
sample unjittered.
The saving grace of the voodoo5 is the scalability. Because it only uses SDR
ram, a dual chip Voodoo5 isnt all that much faster than some other single
chip cards, but the quad chip card has over twice the pixel fill rate of the
nearest competitor. That is a huge increment. Voodoo5 6000 should win every
benchmark that becomes fill rate limited.
I havent been able to honestly recommend a voodoo3 to people for a long
time, unless they had a favorite glide game or wanted early linux Xfree 4.0
3D support. Now (well, soon), a Voodoo5 6000 should make all of todays
games look better than any other card. You can get over twice as many pixel
samples, and have them jittered and blended together for anti-aliasing."
Text jsem ponechal v původní podobě, aby nedošlo ke zkreslení překladem.
Pokud neumíte anglicky, tak nabízím krátké shrnutí: J.Carmack se velice pochvalně vyjadřuje
k algoritmům AntiAliasingu 3Dfx, ale tvrzení 3DFx, že jejich "4 sample jittering" (tj. RGAA)
je stejně kvalitní jako "16 sample unjittered" (16x OGSS FSAA), považuje J.C. za trochu přehnané.
Dále se pochvalně vyjadřuje ke škálovatelnosti
architektury a tvrdí, že Voodoo5 - 6000 má více než dvojnásobný teor. fillrate, než jakákoli konkurence,
takže je schopna vítězit ve všech benchmarcích, budou-li náročné na fillrate. Posledním a asi
nejpodstatnějším bodem je vyjádření o Voodoo5 - 6000, na které by všechny hry (díky kombinaci vysokého
fillratu a kvalitního AntiAliasingu) měly vypadat daleko lépe, než na jakékoli konkurenční kartě.
Efekty
T-Buffer slouží i k vytváření filmových (cinema) efektů. Jsou založeny na několikanásobném
renderingu a jejich cílem je zvýšení realističnosti obrazu a požitku z něj. Přestože se tyto principy
na první pohled zdají přinejmenším podivné, je výsledek podivuhodně blízký reálné situaci. Všechny T-Buffer efekty bychom
mohli zařadit pod PostProcessing.
Motion Blur
Také označován jako Temporal AntiAliasing (časový AA). Lidské sice dokáže vnímat
obrazy následující za sebou jako pohyb, ale mnohem snáze vnímá pohyb, pokud je přítomen tzv. Motion Blur
efekt. Ten znáte např. z televize, jejíž obrazovka má delší dosvit, takže i při snímkové frekvenci
25 FPS vnímáme pohyb objektů jako přirozený. To je způsobeno jakýmisi "šmouhami", které za sebou pohybující se předmět
zanechává. Zmíněný efekt si částečně dotváří i samo oko (regenerace světločidného barviva trvá určitou dobu), ale jen
velmi omezeně. S pomocí technologie 3Dfx T-Buffer Motion Blur lze ale oku pomoci. Ta totiž do T-Bufferu ukládá
obraz posledních několika snímků a ten pak prolíná s právě vyrenderovaným obrazem, čímž zvýší realističnost
pohybu. První hra, která tento efekt podporovala je QuakeIII Arena. Přikládám
jeden (162 kB),
druhý (126 kB),
třetí (37 kB)
a čtvrtý (38 kB) obrázek.
Depth of Field
Také označován jako Focal AntiAliasing (ohniskový AA). Oko můžeme zaostřit na určitou vzdálenost.
Objekty, na které právě nemáme zaostřeno, vidíme rozmazaně (spíš neostře). 3D je ale standardně zobrazováno ve všech hloubkách
ostře, což není přirozené. 3Dfx T-Buffer Depth of Field dokáže okolí centrálního objektu zobrazit tak, že vypadá reálněji;
s odpovídající ostrostí (neostrostí) obrazu. Je toho (pravděpodobně) dosaženo několikanásobným renderingem
s mírně odlišnou vzdáleností od centrálního objektu s následným prolnutím snímků.
Soft Shadows
Ve 3D jsou okraje stínů zobrazovány ostře. To ještě v kombinaci s Aliasem působí šíleně a od
reality to má hodně daleko (vzduch ve skutečnosti nepatrně rozptyluje světlo a stíny mají neostré okraje).
Situaci ale snadno napraví 3Dfx T-Buffer Soft Shadows. Pomocí několikanásobného renderingu vytvoří obrazy, které
prolne a stíny vypadají jako ve skutečnosti.
Soft Reflections
Co platí pro stíny, platí i pro světelné odlesky. I ty dokáže T-Buffer zkorigovat pomocí
technologie 3Dfx Soft Reflection.
dopl. 05-02-2004
Komprese textur FXT
Kromě standardní komprese textur S3TC podporuje VSA-100 i specifickou kompresi vyvinutou 3Dfx
známou pod názvem FXT1. K čemu vlastně komprese textur je... Jedním z limitujících faktorů výkonu grafické karty
je komunikace mezi grafickým jádrem a grafickou pamětí. Ta dosahuje maxima zvláště při přesunu textur. To jsou
rastry ve vysokém rozlišení, takže jde o velký objem dat. Přesun takového objemu dat může velice výrazně brzdit
činnost jádra, protože musí "čekat", než je dokončen. K eliminaci tohoto subjektu slouží právě komprese textur.
Objem dat je zmenšen (např. 4x) a tím je přesun po paměťové sběrnici urychlen (tedy 4x). Tohoto efektu je možné
využít dvojím způsobem. Buďto použít kvalitnější textury (4 násobná plocha), což neovlivní rychlost renderingu, ale kvalitu
obrazu. Druhou možností je ponechat textury v původní podobě a zvýšit tak rychlost renderingu. Komprese textur
může být prováděna bezztrátově (tj. kompresní algoritmus neovlivní kvalitu textur), nebo ztrátově (kompresní algoritmus
ovlivní kvalitu textur, ale obvykle jen neznatelně; ztrátové komprese mají výrazně vyšší kompresní poměr a tím
i účinnost)
Kompresní poměr FXT1 je vyšší, než např. DXTC. Jde o ztrátovou kompresi s poměrem 8:1; analogicky lze odvodit, že
pro popsání každého pixelu jsou použity (průměrně) 4 bity. FXT1 má několik režimů:
CC_Mixed
Je podobný S3TC. Bloky texelů o velikosti 4x4 jsou reprezentovány dvěma bity pro každý texel.
Každý blok obsahuje dvě 16-bitové barvy a dvě barvy odvozené. Transparentní textury jsou vytvářeny tak, že
jedna ze čtyř barev je označena jako průhledná.
CC_HI
Používá bloky texelů o velikosti 4x8 a každý pixel je reprezentován třemi bity. V každém bloku jsou uloženy
dvě 15-bitové barvy, ale vytváří se dalších pět barev, takže jejich celkový počet je sedm. Osmá barva je
definována jako průhledná.
CC_CHROMA
Tento algoritmus používá také 4x8 bloky texelů, ale pouze se dvěma bity na texel. Použity jsou čtyři
15-bitové barvy, žádné další interpolace nejsou prováděny. nelze také použít průhlednost.
CC_ALPHA
4x8 blok je reprezentován dvěma bity na pixel pro alpha i průhledné textury. Vytvořeny jsou tři
20-bitové barvy. První dvě představují primární barvy v levém 4x4 bloku, druhá a třetí naopak v pravém bloku.
Mezi dvěma primárními barvami jsou interpolovány další čtyři barvy.
Další informace o FXT1 najdete na http://www.firingsquad.com/features/fxt1/default.asp
|