В области трехмерной компьютерной графики анизотропная фильтрация — это технология, улучшающая качество изображения текстур. Она в основном используется для улучшения четкости изображения под наклонными углами обзора. Эта технология работает не одинаково во всех направлениях, а скорее в том направлении, в котором наблюдается текстура, посредством целевой фильтрации для уменьшения размытия и сохранения деталей, особенно при экстремальных углах обзора.
Анизотропная фильтрация сохраняет «резкость» текстур и позволяет избежать потери деталей изображения при использовании обычных методов MIP-карт.
Традиционная изотропная фильтрация снижает разрешение как по осям X, так и по осям Y на каждом уровне, поэтому при рендеринге в плоскости, наклоненной относительно камеры, частота вертикальной оси будет уменьшаться. Уменьшение приводит к недостаточному разрешению по горизонтали. Это позволит избежать сглаживания в других направлениях, но текстуры в других направлениях могут стать размытыми.
Напротив, анизотропная фильтрация позволяет фильтровать текстуры с разными соотношениями сторон. Например, когда разрешение текстуры составляет 256 пикселей × 256 пикселей, эта технология фильтрации может уменьшить его до 128 пикселей × 128 пикселей, а затем уменьшить до неквадратных разрешений, таких как 256 пикселей × 128 пикселей и 32 пикселей × 128 пикселей. Это не только улучшает детализацию текстуры под углами скоса, но и сохраняет четкость в других направлениях, когда необходимо избегать сглаживания.
В практических приложениях различные степени анизотропной фильтрации можно регулировать с помощью разработанных настроек. Этот коэффициент представляет собой максимальный коэффициент анизотропии, поддерживаемый процессом фильтрации. Например, анизотропный фильтр 4:1 будет производить более четкий эффект на текстурах фасок, чем фильтр 2:1. Это означает, что в случае сильно перекошенных текстур фильтрация 4:1 покажет более высокую детализацию, чем фильтрация 2:1. Однако большинство сцен не требуют такой высокой точности и будут показывать только конкретные различия в большом количестве частиц, на которые влияет расстояние.
Современное графическое оборудование устанавливает верхний предел этого уровня фильтрации, чтобы избежать слишком сложной аппаратной конструкции и снижения визуальной отдачи.
Истинная анизотропная фильтрация обычно выполняется на лету для каждого пикселя. При аппаратном рендеринге, когда текстура сэмплируется анизотропно, вокруг нее делается несколько сэмплов на основе проецируемой формы этого пикселя. В некоторых исходных подходах к программному обеспечению использовались таблицы суммированных площадей, и каждый проход выборки сам по себе мог быть отфильтрованным экземпляром MIP-карты, что усложняло процесс выборки. Например, если требуется 16 тройных линейных выборок, возможно, потребуется взять 128 выборок из сохраненной текстуры, поскольку для тройной линейной фильтрации MIP-карт требуется четыре выборки в качестве основы для каждой MIP-карты. В некоторых случаях это может быть необязательно.
Количество выборок для анизотропной фильтрации может привести к чрезвычайно высоким требованиям к полосе пропускания. Каждый образец текстуры может превышать четыре байта, поэтому для каждого анизотропного пикселя может потребоваться до 512 байт данных для выборки из памяти текстур. Из-за этого устройствам отображения видео обычно требуется полоса пропускания 300–600 МБ/с, а операции фильтрации текстур в некоторых сценах требуют сотен ГБ/с. К счастью, кое-что помогает уменьшить это снижение производительности: точки выборки могут совместно использовать кэшированные выборки либо между соседними точками, либо в пределах одного пикселя. Даже при наличии 16 образцов возможно, что не все 16 потребуются, поскольку особенно критичными будут только более удаленные и сильно наклоненные пиксели.
Объединив эти методы, анизотропная фильтрация становится все более распространенной в современном графическом оборудовании и видеодрайверах. Пользователи могут регулировать коэффициент фильтрации с помощью настроек драйвера, а разработчики также могут реализовывать свои собственные потребности в фильтрации текстур с помощью API, позволяя отображать более подробные детали изображения. Однако задумывались ли вы когда-нибудь о том, как эти технологии могут развиваться в будущем?