Custom Filter Antialiasing
Custom Filter AA alebo v skratke CFAA je non box filter riešenie od AMD/ATi. Pozerá aj von z pixelov, ktoré sú spracovávané pre výpočet finálnej farby a uskutočnenie antialiasingu na obraze. Sample resolve je vykonávaný shader core-om. Čiže dáta sa dostávajú do programovateľného hardwaru, ktorý vykonáva výpočty s filter funkciou definovanou ovládačom. Z toho vyplýva, že AMD/ATi by mohla implementovať do ovládača plug-in systém, pomocou ktorého by si užívateľ sám definoval AA. Takisto ale môže AMD/ATi hocikedy vykonať update a pridať, alebo odobrať filtre z ovládača, pokiaľ to uznajú za nutné.
Najväčšia výhoda je schopnosť vyhotoviť lepší filter ako so štandardným hardware resolve. Je tu ale aj rad nevýhod. Napríklad implementácia zlých filtrov a z toho vyplývajúca strata výkonu, nakoľko ovládač prikáže a hardware vykoná thready pre výpočet resolve, čo pohltí určité takty shader core. Naskytuje sa preto otázka, či je tu stále možnosť štandardného sample resolve, pokiaľ chceme maximálny výkon a bežnú kvalitu pri samplingu jedného pixelu. Nie, táto možnosť tu nie je vždy.
Aj pre základný box filter, kde sa váha jednotlivým samplom udáva podľa príbuznosti k stredu pixelu, vykonáva R600 sample resolve výpočty v shader core, ale iba ak je kompresia pre tile maximálna. Nakoľko je jasné, že resolve by vrátil v každom prípade rovnakú farbu, čiže nie je nutné nič matematicky komplikované filtrovať. Momentálne je ale výmena k hardware resolve pravdepodobne tiež chybná, prinajmenšom v určitých podmienkach – keď nie je kompresia maximálna, alebo je nutné vykonať úpravy priamo v kóde, nakoľko sa implementujú pri programovaní aj iné filtre. V grafickom ovládači máte teda len 1 cestu pre resolve. Prikláňame sa ale skôr k prvej možnosti, nakoľko je prepad výkonu R600 pri shader core resolve príliš veľký a takisto pri použití box filtrov. Určité zlepšenie by sa mohlo dosiahnuť ešte novými ovládačmi. Hardware tu už tak či tak do určitej miery pomáha, nakoľko je schopný dekomprimovať sample pozície pre pixely do shader core pri vysokej rýchlosti.
Momentálne sú dostupné wide a narrow tent filtre, kde sample mimo spracovávaného pixelu dostávajú váhu lineárne závislú od vzdialenosti k stredu tohoto pixelu. Na základe spôsobu vyhladzovania tent filtrov je teda jasné, že sa celý obraz mierne rozostrí, nakoľko dostane časť samplov susediacich pixelov príliš vysokú váhu. Blur efekt je ale oveľa menší ako pri riešení „Quincunx“ od nVidie z pred pár rokov. Rozdiel medzi tent filtrami je, že wide tent zahrnie viac subpixelov susediacich pixelov ako narrow tent. Teda wide tent filter spôsobí trochu silnejší blur.
Okrem toho je od Catalystu 7.7 dostupný štandardne aj edge detect mód. (Poznámka: my sme museli pre testovanie kvality EDCFAA použiť ešte beta ovládače a špeciálnu utilitku, ktorá nám túto možnosť sprístupnila) Edge detect na rozdiel od wide/narrow tent filtrov aplikuje blur (rozostrenie) len cielene, kde je to potrebné. Najprv vyhľadá na celom obraze hrany polygonov. Toto je uskutočnené vďaka tomu, že využije charakteristiky multisamplingu. Po jednom pixely sa celý obraz cez ROPs nahrá do shaderov. Tie potom porovnajú farebné informácie subpixelov. Je subpixel farba samplov na pixel rovnaká, tak sa nejedná o hranu polygonov a CFAA sa tu nevykoná. Pokiaľ sa ale farebné hodnoty rozlišujú, použije sa CFAA. Prepad výkonu s edge detect módom ale nie je zanedbateľný, nakoľko spotrebuje shader core/ROPs výkon a potrebuje určité množstvo priepustnosti.
CFAA nie je možné použiť na starších Radeon grafických kartách, nakoľko nemajú ich ROPs schopnosť posielať sample do shader core. Okrem toho funguje CFAA jedine pod Direct3D, avšak so všetkými AA modmi a render technikami ako HDR-R, stencil tiene atď.
Spojením 3 filtrov a rôzneho množstva samplov možno dosiahnuť veľké množstvo CFAA modov. AMD/ATi využíva nasledovnú nomenklatúru pre označenie modov:
Custom filter antialiasing: | |
4x | 2xMSAA + Narrow Tent |
6x | 2xMSAA + Wide Tent alebo 4xMSAA Narrow Tent |
8x | 4xMSAA + Wide Tent |
12x | 8xMSAA + Narrow Tent alebo 4xMSAA + Edge Detect |
16x | 8xMSAA + Wide Tent |
24x | 8xMSAA + Edge Detect |
Ako vidieť v tabuľke, dva CFAA mody sa dajú dosiahnuť dvoma rôznymi kombináciami použitých samplov a filtrov využitých pre resolve. Číslo označújúce mod predstavuje celkový počet samplov s ktorými pracoval filter. Avšak tieto dva mody nemajú zhodnú kvalitu obrazu (nakoľko sa dajú použiť 2 filtre pre dosiahnutie potrebného početu samplov). Z toho vyplýva, že nemožno použiť čisto len číslo označujúce CFAA mod, pre zistenie, či poskytuje lepšiu alebo horšiu kvalitu vyhladzovania ako iný CFAA mod s vyšším alebo nižším číslom. Takisto nemožno len podľa veľkosti čísla určit stratu výkonu pri zapnutí daného CFAA modu.
Aktuálne nie je isté, či sa vôbec integruje do ovládačov pug-in systém, vďaka ktorému by si užívateľ definoval vlastné filtre. Nie je ani isté, či AMD/ATi počas života R600 pridá alebo odoberie filtre (pravdupovediac, nie sú si tým istý ani pracovníci AMD/ATi, nakoľko sú tieto funkcie ovládača veľmi „mladé“). Nasledujú benchmark výsledky.
subz3ro
gabriel
epto
Pavol Bobik
MichiGen
koro
Ryko
glide
thimy
A2C
noben
cpy
teho
Dwarden
crux2005
mirke
Dwarden
crux2005