3D technologie: Anti-aliasing
12.11.2003, Zdeněk Kabát, článek
Každý z Vás jistě slyšel o technologii k vyhlazování hran, která je obecně známá pod názvem Anti-aliasing. V tomto článku si popíšeme detailně, jak tato technika funguje a rozebereme různé její aplikace jako je Quincunx či SmoothVision.
Kapitoly článku:
Supersampling
První metodou anti-aliasingu, která není příliš efektivní, je supersampling. Tento způsob byl použit např. u Radeonu 7000, 7200 a 7500, GeForce 256 a série GeForce 2 a u dalších GPU (Voodoo 4/5, Kyro II).
Princip je jednoduchý – interně je obraz zpracováván ve větším rozlišení než které má na výstupu. Znamená to, že každý jednotlivý pixel je rozdělen na několik subpixelů, které se všechny zapisují zvlášť do paměti. Tyto subpixely jsou pak podobným způsobem skládány dohromady – podle určitého vzorce (na obrázku jako Filter Kernel) se vezme daný počet subpixelů a výsledná barva obrazového bodu je průměrem barev všech jeho elementů. Lépe to vysvětlí obrázek:
Obr. 4 – Znázornění techniky Supersampling
Výhodou této metody je, že opravdu dochází k určitému vyhlazování. Nevýhodou této metody je, že výkon jde velice prudce dolů, a to nejen z důvodu mnohem vyššího rozlišení, ale také proto, že scéna musí být přepočítána zpět na rozlišení pro výstup. Je samozřejmé, že zpracování scény ve čtyřnásobném rozlišení je velmi neefektivní, protože se výsledný obraz opět smrskne na menší počet pixelů. Ještě poznamenám, že např. u čipu Kyro II byl prováděn supersampling jen na vybraných „dlaždicích“ (tiles). Ale to je kapitola sama pro sebe.
Příklad: 4x supersampling pro rozlišení 640x480 vypadá tak, že každý pixel je rozdělen na 2x2 subpixely a ve frame bufferu je tedy obraz zpracováván v rozlišení 1280x960. Ve výsledné barvě pixelu má pak každý subpixel čtvrtinový podíl. Pokud používáme např. 2x supersampling pro rozlišení 800x600, jsou obrazové body rozděleny na 2x1 subpixel a interní rozlišení je tedy 1600x600. Výsledná barva je pak spočítána „fifty-fifty“. Přepočítání scény na původní rozlišení ale dále ubírá výkon.
Pozn.: U obou metod nacházíme v názvu slovo „sampling“, nebo-li vzorkování. Abyste název pochopili – „sample“ nazývají vývojáři to, co jsme pojmenovali subpixel. Proto 4x supersampling znamená, že jeden obrazový bod rozložíme na čtyři vzorky, tedy subpixely.
Multisampling
Druhou metodou, dnes nejrozšířenější, je Multisampling, který používají všechny čipy nVidia od GeForce3 dále. Principielně vychází ze supersamplingu, ale je aplikován mnohem efektivněji. Obecně existují dvě techniky multisamplingu:
1. První způsob funguje na principu, že stejná scéna je vykreslena dvakrát a oba obrazy jsou pak prolnuty s minimálním posunem (např. 0,5 pixelu) náhodně vybraným směrem. Oproti supersamplingu se tedy nic neušetří a výkon zůstává stejný, protože např. u 2x AA se ukládá taktéž dvojnásobný počet informací. Tato technika se ale příliš nepoužívá.
2. Druhá metoda funguje na principu odlišném. Vývojáři si totiž uvědomili, že není třeba vyhlazovat celou scénu, tedy i v místech uvnitř polygonů, ale je nutné upravit jen zubaté okraje. A celý tento proces dokázali aplikovat do 3D pipeline.
Stejně jako u supersamplingu jsou pixely rozděleny na více subpixelů, ovšem jen ty, které leží na okrajích polygonů, jsou počítány zvlášť (rozuměj jejich barva). Rozlišení je tedy u 4x anti-aliasingu čtyřikrát vyšší, ovšem některé čtveřice subpixelů jsou zpracovávány dohromady. Zde je tedy způsob, jakým 3D pipeline v tomto bodě pracuje. Pokaždé, když GPU s daným pixelem a jeho subpixely pracuje, ověřuje jeho umístění:
Výhody této metody jsou jasné – uvnitř polygonů, kde se nemohou nacházet žádné zoubky, probíhají výpočty pro celý obrazový bod zároveň, protože kdyby byly vykonávány zvlášť pro jednotlivé subpixely, byl by výsledek stejný, ale výkon nižší. Účinek je tedy stejný jako u supersamplingu, scéna je zpracovávána ve vyšším rozlišením, ale s mnohem menším počtem kalkulací. Proto nVidia označuje tento druh vyhlazování jako HRAA (High Resolution Anti-Aliasing).
Pozn.: Údaje o subpixelech, které nejsou de facto součástí výsledné scény, se ukládají do místa v paměti zvaného „multisampling buffer“. Je to nástavba frame bufferu, ve které jsou uloženy barva, hloubka a stencil hodnota každého subpixelu.
První metodou anti-aliasingu, která není příliš efektivní, je supersampling. Tento způsob byl použit např. u Radeonu 7000, 7200 a 7500, GeForce 256 a série GeForce 2 a u dalších GPU (Voodoo 4/5, Kyro II).
Princip je jednoduchý – interně je obraz zpracováván ve větším rozlišení než které má na výstupu. Znamená to, že každý jednotlivý pixel je rozdělen na několik subpixelů, které se všechny zapisují zvlášť do paměti. Tyto subpixely jsou pak podobným způsobem skládány dohromady – podle určitého vzorce (na obrázku jako Filter Kernel) se vezme daný počet subpixelů a výsledná barva obrazového bodu je průměrem barev všech jeho elementů. Lépe to vysvětlí obrázek:
Obr. 4 – Znázornění techniky Supersampling
Výhodou této metody je, že opravdu dochází k určitému vyhlazování. Nevýhodou této metody je, že výkon jde velice prudce dolů, a to nejen z důvodu mnohem vyššího rozlišení, ale také proto, že scéna musí být přepočítána zpět na rozlišení pro výstup. Je samozřejmé, že zpracování scény ve čtyřnásobném rozlišení je velmi neefektivní, protože se výsledný obraz opět smrskne na menší počet pixelů. Ještě poznamenám, že např. u čipu Kyro II byl prováděn supersampling jen na vybraných „dlaždicích“ (tiles). Ale to je kapitola sama pro sebe.
Příklad: 4x supersampling pro rozlišení 640x480 vypadá tak, že každý pixel je rozdělen na 2x2 subpixely a ve frame bufferu je tedy obraz zpracováván v rozlišení 1280x960. Ve výsledné barvě pixelu má pak každý subpixel čtvrtinový podíl. Pokud používáme např. 2x supersampling pro rozlišení 800x600, jsou obrazové body rozděleny na 2x1 subpixel a interní rozlišení je tedy 1600x600. Výsledná barva je pak spočítána „fifty-fifty“. Přepočítání scény na původní rozlišení ale dále ubírá výkon.
Pozn.: U obou metod nacházíme v názvu slovo „sampling“, nebo-li vzorkování. Abyste název pochopili – „sample“ nazývají vývojáři to, co jsme pojmenovali subpixel. Proto 4x supersampling znamená, že jeden obrazový bod rozložíme na čtyři vzorky, tedy subpixely.
Multisampling
Druhou metodou, dnes nejrozšířenější, je Multisampling, který používají všechny čipy nVidia od GeForce3 dále. Principielně vychází ze supersamplingu, ale je aplikován mnohem efektivněji. Obecně existují dvě techniky multisamplingu:
1. První způsob funguje na principu, že stejná scéna je vykreslena dvakrát a oba obrazy jsou pak prolnuty s minimálním posunem (např. 0,5 pixelu) náhodně vybraným směrem. Oproti supersamplingu se tedy nic neušetří a výkon zůstává stejný, protože např. u 2x AA se ukládá taktéž dvojnásobný počet informací. Tato technika se ale příliš nepoužívá.
2. Druhá metoda funguje na principu odlišném. Vývojáři si totiž uvědomili, že není třeba vyhlazovat celou scénu, tedy i v místech uvnitř polygonů, ale je nutné upravit jen zubaté okraje. A celý tento proces dokázali aplikovat do 3D pipeline.
Stejně jako u supersamplingu jsou pixely rozděleny na více subpixelů, ovšem jen ty, které leží na okrajích polygonů, jsou počítány zvlášť (rozuměj jejich barva). Rozlišení je tedy u 4x anti-aliasingu čtyřikrát vyšší, ovšem některé čtveřice subpixelů jsou zpracovávány dohromady. Zde je tedy způsob, jakým 3D pipeline v tomto bodě pracuje. Pokaždé, když GPU s daným pixelem a jeho subpixely pracuje, ověřuje jeho umístění:
- Když subpixel leží uvnitř polygonu, musí i celý pixel ležet uvnitř a nemusí být tedy vyhlazen. Jeho barva je proto počítána pro všechny elementy zároveň.
- Pokud některý ze subpixelů zpracovávaného polygonu leží mimo trojúhelník, je logické, že pixel je okrajový a potřebuje vyhladit. Zde jsou tedy jeho subpixely, které leží v polygonu, počítány nezávisle. Barva zbylých elementů (mimo polygon) je pak počítána až se sousedním polygonem. Vylučuje se tak situace, kdy bude barva subpixelu počítána dvakrát.
Výhody této metody jsou jasné – uvnitř polygonů, kde se nemohou nacházet žádné zoubky, probíhají výpočty pro celý obrazový bod zároveň, protože kdyby byly vykonávány zvlášť pro jednotlivé subpixely, byl by výsledek stejný, ale výkon nižší. Účinek je tedy stejný jako u supersamplingu, scéna je zpracovávána ve vyšším rozlišením, ale s mnohem menším počtem kalkulací. Proto nVidia označuje tento druh vyhlazování jako HRAA (High Resolution Anti-Aliasing).
Pozn.: Údaje o subpixelech, které nejsou de facto součástí výsledné scény, se ukládají do místa v paměti zvaného „multisampling buffer“. Je to nástavba frame bufferu, ve které jsou uloženy barva, hloubka a stencil hodnota každého subpixelu.