Filtrování textur - Texture filtering

V počítačové grafice je filtrování textury nebo vyhlazování textury metodou používanou k určení barvy textury pixelu mapovaného textury pomocí barev blízkých texelů (pixelů textury). Existují dvě hlavní kategorie filtrování textur, filtrování zvětšení a filtrování minifikace. V závislosti na situaci je filtrování textury buď typem rekonstrukčního filtru, kde jsou řídká data interpolována tak, aby vyplňovala mezery (zvětšení), nebo typem vyhlazování (AA), kde vzorky textury existují s vyšší frekvencí, než je požadováno pro frekvenci vzorkování potřebné pro vyplnění textury (minifikace). Zjednodušeně řečeno, filtrování popisuje, jak se textury aplikují v mnoha různých tvarech, velikostech, úhlech a měřítcích. Výsledek v závislosti na zvoleném algoritmu filtru zobrazí různé stupně rozmazání, detailů, prostorového aliasingu, dočasného aliasingu a blokování. V závislosti na okolnostech lze filtrování provádět v softwaru (například v softwarovém balíčku pro vykreslování) nebo v hardwaru pro vykreslování v reálném čase nebo v GPU nebo ve směsi obou. U nejběžnějších interaktivních grafických aplikací se moderní filtrování textur provádí pomocí vyhrazeného hardwaru, který optimalizuje přístup do paměti prostřednictvím mezipaměti paměti a předběžného načítání a implementuje výběr algoritmů dostupných uživateli a vývojáři.

Existuje mnoho metod filtrování textur, které dělají různé kompromisy mezi výpočetní složitostí, šířkou pásma paměti a kvalitou obrazu.

Potřeba filtrování

Během procesu mapování textury pro libovolný 3D povrch, a probíhá vyhledávání textur, aby se zjistilo, kde na struktuře spadne každý střed pixelu. U polygonálních povrchů mapovaných textury složených z trojúhelníků typických pro většinu povrchů ve 3D hrách a filmech bude každý pixel (nebo podřízený vzorek pixelu ) tohoto povrchu spojen s některými trojúhelníky a sadou barycentrických souřadnic , které se používají k poskytnout pozici uvnitř textury. Taková poloha nemusí ležet dokonale na „pixelové mřížce“, což vyžaduje určitou funkci, která by tyto případy zohlednila. Jinými slovy, protože texturovaný povrch může být v libovolné vzdálenosti a orientaci vzhledem k divákovi, jeden pixel obvykle neodpovídá přímo jednomu texelu. K určení nejlepší barvy pixelu je třeba použít nějakou formu filtrování. Nedostatečné nebo nesprávné filtrování se v obraze zobrazí jako artefakty (chyby v obraze), jako například „blokovitost“, jaggies nebo třpyt.

Mezi pixelem a texely / texely, které zastupuje na obrazovce, mohou existovat různé typy korespondence. Ty závisí na poloze texturovaného povrchu vzhledem k divákovi a v každém případě jsou zapotřebí různé formy filtrování. Vzhledem k tomu, že čtvercová textura je mapována na čtvercový povrch na světě, je v určité vzdálenosti sledování velikost jednoho pixelu obrazovky přesně stejná jako u jednoho texelu. Bližší než to jsou texely větší než pixely obrazovky a je třeba je vhodně zvětšit - proces známý jako zvětšení textury . Dále je každý texel menší než pixel, takže jeden pixel pokrývá více texelů. V takovém případě je třeba vybrat vhodnou barvu na základě krytých texelů pomocí minifikace textury . Grafická rozhraní API, jako je OpenGL, umožňují programátorovi nastavit různé možnosti filtrů zmenšení a zvětšení.

Všimněte si, že i v případě, že pixely a texely mají přesně stejnou velikost, jeden pixel nemusí nutně odpovídat přesně jednomu texelu. Může být špatně zarovnán nebo otočen a pokrývá části až čtyř sousedních textilů. Proto je stále nutná nějaká forma filtrování.

Mipmapping

Mipmapping je standardní technika používaná k uložení některých filtračních prací potřebných během minifikace textury. Je také velmi přínosné pro koherenci mezipaměti - bez ní bude vzor přístupu do paměti během vzorkování ze vzdálených textur vykazovat extrémně špatnou lokalitu, což nepříznivě ovlivní výkon, i když není prováděno žádné filtrování.

Během zvětšování textury je počet texelů, které je třeba vyhledat u libovolného pixelu, vždy čtyři nebo méně; během minifikace však, jak se polygonovaný polygon pohybuje dál, potenciálně může celá textura spadnout do jediného pixelu. To by vyžadovalo čtení všech jeho texelů a kombinaci jejich hodnot, aby se správně určila barva pixelu, což je neúměrně nákladná operace. Mipmapping tomu předchází tím, že předfiltruje texturu a uloží ji v menších velikostech až na jeden pixel. Když se texturovaný povrch posune dále, přepíná se aplikovaná textura na předfiltrovanou menší velikost. Různé velikosti mipmapy se označují jako „úrovně“, přičemž úroveň 0 je největší velikostí (používá se nejblíže divákovi) a rostoucí úrovně se používají při zvětšování vzdáleností.

Filtrační metody

V této části jsou uvedeny nejběžnější metody filtrování textur ve vzestupném pořadí výpočtových nákladů a kvality obrazu.

Interpolace nejbližších sousedů

Interpolace nejbližších sousedů je nejjednodušší a nejhrubší filtrační metoda - pro barvu pixelu jednoduše používá barvu texelu nejblíže středu pixelu. I když je to jednoduché, výsledkem je velké množství artefaktů - „blokovitost“ textury během zvětšení a aliasing a třpyt během minifikace. Tato metoda je během zvětšování rychlá, ale během minifikace se krok v paměti stane libovolně velký a často může být méně efektivní než mapování MIP kvůli nedostatku prostorově koherentního přístupu k texturám a opětovnému použití mezipaměti.

Nejbližší soused s mipmappingem

Tato metoda stále používá interpolaci nejbližších sousedů, ale přidává mipmapping - nejprve se zvolí nejbližší úroveň mipmap podle vzdálenosti, poté se vzorkuje nejbližší střed texelu, aby se získala barva pixelu. Tím se během minifikace významně sníží aliasing a třpyt, ale nevyloučí se úplně. Přitom zlepšuje přístup do paměti textury a opětovné použití mezipaměti pomocí vyhnutí se libovolně velkým přístupovým krokům v paměti textury během rastrování. To nepomáhá s blokací během zvětšování, protože každý zvětšený texel se stále jeví jako velký obdélník.

Lineární filtrování mipmap

Méně běžně používané, OpenGL a další API podporují vzorkování nejbližších sousedů z jednotlivých mipmap, zatímco lineárně interpolují dvě nejbližší mipmapy relevantní pro vzorek.

Bilineární filtrování

V bilineárním filtrování jsou vzorkovány čtyři nejbližší texely ke středu pixelu (na nejbližší úrovni mipmapy) a jejich barvy jsou kombinovány váženým průměrem podle vzdálenosti. Tím se odstraní „blokace“ pozorovaná během zvětšení, protože nyní dochází k plynulému přechodu barevných změn z jednoho texelu na druhý, místo náhlého skoku, když střed pixelu překročí hranici texelu. Bilineární filtrování pro filtrování zvětšení je běžné. Když se používá pro minifikaci, často se používá s mipmappingem; ačkoli to může být použito bez, to by trpělo stejnými problémy s aliasingem a třpytkami jako filtrování nejbližšího souseda, když by bylo příliš minifikováno. Pro skromné ​​poměry minifikace jej však lze použít jako levný nadvzorek vážené textury s hardwarovou akcelerací.

Trilineární filtrování

Trilineární filtrování je lékem na běžný artefakt, který lze vidět na bilineárně filtrovaných obrazech s mipmapou: náhlá a velmi znatelná změna kvality na hranicích, kde se vykreslovací modul přepíná z jedné úrovně mipmapy na další. Trilineární filtrování to řeší tak, že provede vyhledávání textur a bilineární filtrování na dvou nejbližších úrovních mipmap (jedna vyšší a druhá nižší kvalita) a poté výsledky lineárně interpoluje . Výsledkem je plynulé zhoršení kvality textury, jak se zvyšuje vzdálenost od diváka, spíše než řada náhlých poklesů. Samozřejmě, blíže než úroveň 0 je k dispozici pouze jedna úroveň mipmap a algoritmus se vrátí k bilineárnímu filtrování.

Anizotropní filtrace

Anizotropní filtrování je nejkvalitnější filtrování dostupné v současných spotřebitelských 3D grafických kartách . Jednodušší „izotropní“ techniky používají pouze čtvercové mipmapy, které jsou poté interpolovány pomocí bi– nebo trilineárního filtrování. ( Izotropní znamená ve všech směrech stejný, a proto se používá k popisu systému, ve kterém jsou všechny mapy spíše čtverce než obdélníky nebo jiné čtyřúhelníky.)

Když je povrch ve velkém úhlu vzhledem k fotoaparátu, nebude výplňová plocha pro texturu přibližně čtvercová. Zvažte běžný případ podlahy ve hře: oblast výplně je mnohem širší než vysoká. V tomto případě se žádná ze čtvercových map nehodí. Výsledkem je rozmazání a / nebo třpyt, v závislosti na tom, jak je zvoleno přizpůsobení. Anisotropní filtrování to napraví vzorkováním textury jako ne-čtvercového tvaru. Cílem je ochutnat texturu tak, aby odpovídala pixelové stopě promítnuté do prostoru textury, a taková stopa není vždy osově zarovnaná s texturou. Dále, když se zabývá teorií vzorků, pixel není malý čtverec, proto by jeho stopa nebyla promítnutým čtverečkem. Sestava stopy v texturním prostoru vzorkuje určitou aproximaci vypočítané funkce promítaného pixelu v texturním prostoru, ale podrobnosti jsou často přibližné, vysoce proprietární a pronikavé do názorů na teorii vzorků. Koncepčně je cílem odebrat správnější anizotropní vzorek vhodné orientace, aby nedocházelo ke konfliktu mezi aliasingem na jedné ose a rozmazáním na druhé, když se projektovaná velikost liší.

V anizotropních implementacích může filtrování zahrnovat stejné filtrační algoritmy, které se používají k filtrování čtvercových map tradičního mipmappingu během konstrukce přechodného nebo konečného výsledku.

Procento Bližší filtrování

Mapování stínů založené na hloubce může používat zajímavý filtr procentuálního přiblížení (PCF) s hloubkově mapovanými texturami, který rozšiřuje vnímání druhů filtrů textur, které by mohly být použity. V PCF je vykreslena hloubková mapa scény ze zdroje světla. Během následného vykreslování scény se tato hloubková mapa poté promítá zpět do scény z polohy světla a provede se srovnání mezi projektivní hloubkovou souřadnicí a získanou hloubkou vzorku textury. Projektivní souřadnicí bude hloubka obrazových bodů scény od světla, ale získaná hloubka z hloubkové mapy bude představovat hloubku scény podél tohoto promítaného směru. Tímto způsobem může být pro vykreslený pixel provedeno stanovení viditelnosti pro světlo, a tedy osvětlení světlem. Tato operace texturování je tedy booleovský test, zda je pixel osvětlený, ale pro daný pixel lze otestovat více vzorků a booleovské výsledky sečtou a zprůměrují. Tímto způsobem v kombinaci s proměnlivými parametry, jako je umístění vzorkovaného texelu a dokonce i umístění promítnuté hloubkové mapy, lze vypočítat průměr po porovnání hloubky nebo procento vzorků blíže, a tedy osvětlit, pro pixel. Kriticky je třeba provést součet booleovských výsledků a vygenerování procentuální hodnoty po hloubkovém srovnání projektivní hloubky a načtení vzorku, takže toto porovnání hloubky se stane nedílnou součástí filtru textury. Toto procento lze poté použít k vážení výpočtu osvětlení a poskytnout nejen booleovské osvětlení nebo hodnotu stínu, ale výsledek měkkého stínu penumbry. Verze tohoto je podporována v moderním hardwaru, kde je provedeno porovnání a je použit bilineární filtr po booleovském srovnání podle vzdálenosti

Viz také

Reference

  1. ^ a b „Kapitola 9 - Průvodce programováním OpenGL“ . Glprogramming.com. 2009-02-13. Filtrování . Citováno 2018-01-14 . CS1 maint: discouraged parameter ( link )
  2. ^ Williams, Lance (1983). „Pyramidální parametry“ (PDF) . ACM SIGGRAPH Počítačová grafika . 17 (3): 1–11. doi : 10,1145 / 964967,801126 . ISSN   0097-8930 .
  3. ^ „Návrh herního enginu: Mapování textur“ (PDF) . uncc.edu. Zvětšení textury.
  4. ^ „Návrh herního enginu: Mapování textur“ (PDF) . uncc.edu. Minifikace textur.
  5. ^ Hendrik Lensch (2007-11-29). „Počítačová grafika: Teorie filtrování a vzorkování textur“ (PDF) . Společnost Maxe Plancka . MipMaps . Citováno 2018-01-14 . CS1 maint: discouraged parameter ( link )
  6. ^ Markus Hadwiger (03.03.2015). „Přednáška o programování GPU a GPGPU 12: Texturování GPU 2“ (PDF) . KAUST . Rekonstrukce textury: Zvětšení.
  7. ^ Markus Hadwiger (03.03.2015). „Přednáška o programování GPU a GPGPU 12: Texturování GPU 2“ (PDF) . KAUST . Anti-Aliasing textury: Mapování MIP.
  8. ^ Hendrik Lensch (2007-11-29). „Počítačová grafika: Teorie filtrování a vzorkování textur“ (PDF) . Společnost Maxe Plancka . MipMapping II . Citováno 2018-01-14 . CS1 maint: discouraged parameter ( link )
  9. ^ Alvy Ray Smith (1995-07-17). „Pixel není malý čtverec! (A Voxel není malá kostka) - technická poznámka 6“ (PDF) . cs.princeton.edu . Citováno 2018-01-14 . CS1 maint: discouraged parameter ( link )
  10. ^ Hendrik Lensch (2007-11-29). „Počítačová grafika: Teorie filtrování a vzorkování textur“ (PDF) . Společnost Maxe Plancka . Anizotropní filtrování . Citováno 2018-01-14 . CS1 maint: discouraged parameter ( link )
  11. ^ Reeves, William T .; Salesin, David H .; Cook, Robert L. (01.08.1987). "Vykreslování vyhlazených stínů pomocí hloubkových map" (PDF) . ACM SIGGRAPH Počítačová grafika . Sdružení pro výpočetní techniku ​​(ACM). 21 (4): 283–291. doi : 10,1145 / 37402,37435 . ISSN   0097-8930 . Archivovány z původního (PDF) 15. ledna 2018.
  12. ^ Randima Fernando (02.07.2008). „Procenta blíž bližší měkké stíny“ (PDF) . NVIDIA Corporation . Citováno 2018-01-14 . CS1 maint: discouraged parameter ( link )
  13. ^ "Specifikace WebGL WEBGL_depth_texture Khronos Ratified Extension" . Khronos.org. 2014-07-15 . Citováno 2018-01-14 . CS1 maint: discouraged parameter ( link )