Trilineární filtrování - Trilinear filtering

Trilineární filtrování je rozšířením bilineární metody filtrování textur , která také provádí lineární interpolaci mezi mipmaps .

Bilineární filtrování má několik slabin, díky nimž je v mnoha případech neatraktivní volbou: jeho použití na úplnou texturu při změně měřítka na velmi malou velikost způsobí problémy s přesností zmeškaných textů a kompenzace pomocí více mipmap v celém polygonu vede k náhlé změny v rozmazání, což je nejvýraznější u polygonů, které jsou vzhledem k fotoaparátu strmě nakloněny.

Chcete-li vyřešit tento problém, trilineární filtrování interpoluje mezi výsledky bilineárního filtrování na dvou mipmapách nejblíže k detailu požadovanému pro polygon v pixelu. Pokud by pixel zabíral 1/100 textury v jednom směru, trilineární filtrování by interpolovalo mezi výsledkem filtrování 128 * 128 mipmap jako y 1 s x 1 jako 128 a výsledkem filtrování na 64 * 64 mipmapě jako y 2 s x 2 jako 64 a poté interpolovat na x = 100.

Prvním krokem v tomto procesu je samozřejmě určení, jak velký z hlediska textury je dotyčný pixel. Existuje několik způsobů, jak toho dosáhnout, a ty, které jsou zde uvedeny, nemusí být nutně reprezentativní pro všechny z nich.

  • Jako velikost pixelu použijte vzdálenost podél textury mezi aktuálním pixelem a pixelem napravo (nebo nalevo, nahoře nebo dole).
  • Použijte nejmenší (nebo největší nebo průměr) z různých velikostí určených pomocí výše uvedené metody.
  • Určete UV hodnoty rohů pixelu, pomocí nich vypočítejte plochu pixelu a zjistěte, kolik pixelů přesně stejné velikosti by zabralo celou texturu.

Jakmile to uděláte, zbytek se stane snadným: proveďte bilineární filtrování na dvou mipmapách s velikostmi pixelů, které jsou okamžitě větší a menší než vypočítaná velikost pixelu, a poté mezi nimi interpolovat jako obvykle.

Protože používá větší i menší mipmapy, nelze použít trilineární filtrování v místech, kde je pixel na původní textuře menší než texel, protože mipmapy větší než původní textura nejsou definovány. Bilineární filtrování stále funguje a lze ho v těchto situacích použít, aniž byste se příliš starali o náhlost, protože bilineární a trilineární filtrování poskytuje stejný výsledek, když je velikost pixelu přesně stejná jako velikost texelu na příslušné mipmapě.

Trilineární filtrování má stále slabiny, protože se stále předpokládá, že pixel zabírá čtvercovou plochu textury. Zejména když je textura ve strmém úhlu ve srovnání s fotoaparátem, může dojít ke ztrátě detailů, protože pixel ve skutečnosti zabírá úzký, ale dlouhý lichoběžník: v úzkém směru pixel získává informace z více textů, než ve skutečnosti pokrývá ( takže podrobnosti jsou rozmazané) a v dlouhém směru pixel získává informace z méně textů, než ve skutečnosti pokrývá (takže detaily spadají mezi pixely). Aby se to zmírnilo, lze použít anizotropní filtrování (závislé na směru).

Viz také