Vyhladit více vzorků - Multisample anti-aliasing

Vícevzorové vyhlazování ( MSAA ) je druh prostorového vyhlazování , technika používaná v počítačové grafice k odstraňování zubatých zubů .

Definice

Termín obecně označuje zvláštní případ převzorkování . Počáteční implementace vyhlazení celé scény ( FSAA ) fungovaly koncepčně jednoduše vykreslením scény ve vyšším rozlišení a následným převzorkováním na výstup s nižším rozlišením. Většina moderních grafických procesorů tuto formu vyhlazování umožňuje, ale značně to zdaní zdroje, jako je struktura, šířka pásma a rychlost vyplňování . (Pokud je program vysoce vázán na TCL nebo na CPU , lze použít superodběr bez velkého zásahu do výkonu.)

Podle specifikace OpenGL GL_ARB_multisample se výraz „multisampling“ týká konkrétní optimalizace převzorkování. Specifikace stanoví, že vykreslovací modul vyhodnotí fragmentový program jednou na pixel a pouze „skutečně“ převezme vzorek hodnot hloubky a vzorníku . (To není totéž jako převzorkování, ale podle specifikace OpenGL 1.5 byla definice aktualizována, aby zahrnovala i implementace plně převzorkování.)

V grafické literatuře obecně se „vzorkováním“ rozumí jakýkoli zvláštní případ převzorkování, kdy některé součásti výsledného obrazu nejsou plně převzorkovány. Seznamy níže odkazují konkrétně na definici ARB_multisample.

Popis

V supersample vyhlazování je v každém pixelu vzorkováno více umístění a každý z těchto vzorků je plně vykreslen a kombinován s ostatními, aby se vytvořil pixel, který se nakonec zobrazí. To je výpočetně nákladné, protože je nutné opakovat celý proces vykreslování pro každé umístění vzorku. Je to také neefektivní, protože aliasing je typicky zaznamenán pouze v některých částech obrazu, například na okrajích, zatímco převzorkování se provádí pro každý jednotlivý pixel.

Ve vyhlazování více vzorků, pokud je kterékoli z více ukázkových míst v pixelu pokryto vykreslovaným trojúhelníkem, musí být pro tento trojúhelník proveden výpočet stínování. Tento výpočet je však nutné provést pouze jednou pro celý pixel bez ohledu na to, kolik pozic vzorků je pokryto; výsledek výpočtu stínování se jednoduše použije na všechna relevantní umístění více vzorků.

V případě, že pouze jeden trojúhelník pokrývá každé umístění více vzorků v pixelu, provede se pouze jeden výpočet stínování a tyto pixely jsou o něco dražší (a výsledek se nijak neliší) než v obrázku bez vyhlazení. To platí pro střed trojúhelníků, kde aliasing není problém. ( Detekce hran to může dále omezit explicitním omezením výpočtu MSAA na pixely, jejichž vzorky zahrnují více trojúhelníků nebo trojúhelníky ve více hloubkách.) V extrémním případě, kdy je každé z míst více vzorků pokryto jiným trojúhelníkem, jiný výpočet stínování bude provedeno pro každé místo a výsledky budou následně sloučeny, čímž získáme finální pixel, a výsledek a výpočetní náklady jsou stejné jako u ekvivalentního převzorkovaného obrázku.

Výpočet stínování není jedinou operací, kterou je nutné provést na daném pixelu; implementace více vzorkování mohou různě vzorkovat další operace, jako je viditelnost na různých úrovních vzorkování.

Výhody

  • Pixel shader obvykle jen potřebuje být hodnoceny jednou za pixel.
  • Okraje polygonů (nejviditelnější zdroj aliasingu ve 3D grafice) jsou vyhlazené.
  • Vzhledem k tomu, že je vzorkováno více subpixelů na pixel, mohou být zachyceny polygonální detaily menší než jeden pixel, které by mohly být bez MSAA vynechány a vytvořeny součástí konečného vykresleného obrazu, pokud bude odebráno dostatečné množství vzorků.

Nevýhody

Alfa testování

Alfa testování je technika běžná ve starších videohrách, která se používá k vykreslení průsvitných objektů tím, že odmítá zápis pixelů do framebufferu. Pokud hodnota alfa průsvitného fragmentu není ve stanoveném rozsahu, bude po testování alfa zahozena. Protože se to provádí na základě pixelů po pixelech, obraz pro tyto pixely nezískává výhody vícenásobného vzorkování (všechny vícevzorky v pixelu jsou vyřazeny na základě alfa testu). Výsledný obrázek může obsahovat aliasing podél okrajů průhledných objektů nebo hran v texturách, ačkoli kvalita obrazu nebude o nic horší, než by byla bez jakéhokoli anti-aliasingu. Průsvitné objekty, které jsou modelovány pomocí alfa-testovacích textur, budou také aliasovány kvůli alfa testování. Tento efekt lze minimalizovat vícenásobným vykreslením objektů s průhlednými texturami, i když by to mělo za následek snížení vysokého výkonu u scén obsahujících mnoho průhledných objektů.

Aliasing

Protože vícenásobné vzorkování počítá fragmenty vnitřních polygonů pouze jednou na pixel, aliasing a další artefakty budou stále viditelné uvnitř vykreslených polygonů, kde výstup shaderu fragmentů obsahuje vysokofrekvenční komponenty.

Výkon

Zatímco méně náročné na výkon než SSAA (supersampling), je možné, že v určitých scénářích (scény těžké ve složitých fragmentech) může být MSAA pro daný snímek několikrát intenzivnější než post-processingové techniky vyhlazení, jako jsou FXAA , SMAA a MLAA . Rané techniky v této kategorii mají tendenci k nižšímu dopadu na výkon, ale trpí problémy s přesností. Novější techniky vyhlazování založené na následném zpracování, jako je dočasné vyhlazování (TAA), které omezuje vyhlazování spojením dat z dříve vykreslených rámců, zaznamenaly obrácení tohoto trendu, protože AA po zpracování se stává univerzálnější a více drahé než MSAA, které nemohou vyhladit celý rámec samostatně.

Metody odběru vzorků

Bodové vzorkování

V masce vzorkované z bodu je bit pokrytí pro každý multisample nastaven pouze v případě, že je multisample umístěn uvnitř vykresleného primitivu. Vzorky se nikdy neberou zvenčí vykresleného primitiva, takže obrázky vytvořené pomocí vzorkování bodů budou geometricky správné, ale kvalita filtrování může být nízká, protože podíl bitů nastavených v masce pokrytí pixelu nemusí být roven poměru pixelu, který je ve skutečnosti předmětem daného fragmentu.

Vzorkování oblasti

Kvalitu filtrování lze zlepšit použitím masek vzorkovaných z oblasti. V této metodě by měl být počet bitů nastavených v masce pokrytí pro pixel úměrný skutečnému pokrytí oblasti fragmentu. To bude mít za následek nastavení některých bitů pokrytí pro více vzorků, které nejsou ve skutečnosti umístěny v vykresleném primitivu, a může způsobit aliasing a další artefakty.

Ukázkové vzory

Pravidelná mřížka

Běžný vzorový vzorek mřížky, kde umístění více vzorků tvoří rovnoměrně rozmístěnou mřížku v celém pixelu, je snadno implementovatelný a zjednodušuje hodnocení atributů (tj. Nastavení masek subpixelů, barvy vzorkování a hloubky). Tato metoda je výpočetně nákladná kvůli velkému počtu vzorků. Optimalizace hran je špatná pro okraje zarovnané s obrazovkou, ale kvalita obrazu je dobrá, když je počet vícenásobných vzorků velký.

Řídká pravidelná mřížka

Řídký vzorek vzorku pravidelné mřížky je podmnožinou vzorků, které jsou vybrány ze vzorku vzorku pravidelné mřížky. Stejně jako u běžné mřížky je hodnocení atributů zjednodušeno kvůli pravidelným mezerám. Metoda je výpočetně méně nákladná kvůli menšímu počtu vzorků. Optimalizace hran je dobrá pro okraje zarovnané na obrazovku a kvalita obrazu je dobrá pro střední počet vícenásobných vzorků.

Stochastické vzory vzorků

Stochastický vzorový vzorek je náhodné rozdělení více vzorků po celém pixelu. Nepravidelné rozestupy vzorků komplikují vyhodnocování atributů. Metoda je nákladově efektivní kvůli nízkému počtu vzorků (ve srovnání s běžnými vzory mřížky). Optimalizace hran pomocí této metody, i když je neoptimální pro okraje zarovnané na obrazovce. Kvalita obrazu je vynikající pro střední počet vzorků.

Kvalitní

Ve srovnání s převzorkováním může vyhlazování více vzorků poskytnout podobnou kvalitu při vyšším výkonu nebo lepší kvalitu pro stejný výkon. Dalších vylepšených výsledků lze dosáhnout použitím rotačních mřížkových subpixelových masek. Dodatečná šířka pásma vyžadovaná vícenásobným vzorkováním je přiměřeně nízká, pokud je k dispozici komprese Z a barev.

Většina moderních GPU podporuje vzorky 2 ×, 4 × a 8 × MSAA. Vyšší hodnoty mají za následek lepší kvalitu, ale jsou pomalejší.

Viz také

Reference