Filtrowanie anizotropowe „zachowuje ostrość tekstury normalnie traconej przez próby tekstury mapy MIP w celu uniknięcia aliasingu”. Artykuł w Wikipedii zawiera wskazówki na temat tego, jak można go zaimplementować („zbadać teksturę (...) dla dowolnej orientacji anizotropii”), ale nie jest to dla mnie zbyt jasne.
Wydaje się, że istnieją różne implementacje, jak sugerują testy zilustrowane w notatkach z prezentacji Przybliżone modele dla fizycznego renderowania :
Jakie są konkretne obliczenia wykonywane przez (nowoczesne) układy GPU, aby wybrać prawidłowy poziom MIP podczas korzystania z filtrowania anizotropowego?
texture
gpu
algorithm
implementation
wycierać
źródło
źródło
GL_EXT_texture_filter_anisotropic
jest bardzo szczegółowa. Może to pomoże ci lepiej zrozumieć proces.Odpowiedzi:
Sprzęt do filtrowania tekstur pobiera kilka próbek o różnych poziomach mipmapy (maksymalna ilość próbek jest wskazywana przez anizotropowy poziom filtrowania, chociaż dokładna ilość próbek pobranych w danej operacji filtrowania będzie zależeć od proporcji między pochodnymi na fragmencie. ) Jeśli rzutujesz stożek patrząc na powierzchnię pod kątem ukośnym na przestrzeń tekstury, spowoduje to w przybliżeniu owalny rzut, który jest bardziej wydłużony dla bardziej ukośnych kątów. Dodatkowe próbki są pobierane wzdłuż osi tego owalu (z prawidłowych poziomów mip, aby skorzystać z oferowanego przez nie wstępnego filtrowania) i łączone w celu uzyskania ostrzejszej próbki tekstury.
Inna technika znana jako mapowanie rip (wspomniana w artykule Wikipedii o Mipmapping), która nie jestpowszechnie spotykane we współczesnych układach GPU, wykorzystuje wstępne filtrowanie tekstur. W przeciwieństwie do mipsów, tekstura nie jest zmniejszana równomiernie, ale przy użyciu różnych proporcji wysokości do szerokości (do proporcji zależnej od wybranego poziomu filtrowania anizotropowego). Następnie wybiera się wariant - a może dwa warianty, jeśli stosuje się filtrowanie trójliniowe - na podstawie kąta powierzchni, aby zminimalizować zniekształcenie. Wartości pikseli są pobierane przy użyciu domyślnych technik filtrowania (dwuliniowe lub trójliniowe). Rip-mapy nie są używane w żadnym znanym mi sprzęcie ze względu na ich zaporowy rozmiar: podczas gdy mipmapy zajmują dodatkowe 33% pamięci, ripmapy używają 300%. Można to zweryfikować, zauważając, że wymagania dotyczące używania tekstur nie rosną podczas korzystania z AF, a jedynie szerokość pasma.
W celu dalszego czytania warto zapoznać się ze specyfikacją rozszerzenia OpenT EXT_texture_filter_anisotropic . Wyszczególnia formuły stosowane do obliczania próbek i sposób ich łączenia podczas korzystania z filtrowania anizotropowego.
źródło
Wymagania API można znaleźć w dowolnej specyfikacji lub rozszerzeniach. Oto jeden: https://www.opengl.org/registry/specs/EXT/texture_filter_anisotropic.txt
Wszyscy dostawcy GPU prawdopodobnie odbiegają od specyfikacji, ponieważ jakość AF była częścią wielu testów porównawczych. Obecne wdrożenia będą nadal ewoluować, ponieważ nowe obciążenia podkreślają istniejące przybliżenia. Niestety, aby dokładnie wiedzieć, co się dzieje, musisz być częścią jednej z firm. Ale możesz zmierzyć spektrum możliwości z następujących dokumentów, wymienionych w kolejności rosnącej jakości i kosztów wdrożenia:
Cytowanie ze specyfikacji:
źródło