В 3D компьютерной графике анизотропная фильтрация (сокращенно AF ) [1] [2] — это метод повышения качества изображения текстур . Он применяется только к поверхностям под косыми углами обзора камеры и там, где проекция текстуры (а не полигона или другого примитива , на котором она визуализируется) кажется неортогональной . Согласно ее этимологии, анизотропная фильтрация не фильтрует одинаково во всех направлениях.
Подобно билинейной и трилинейной фильтрации , анизотропная фильтрация устраняет эффекты наложения спектров [3] [4], но улучшает эти другие методы, уменьшая размытость и сохраняя детализацию при экстремальных углах обзора.
В первую очередь из-за ограничений пропускной способности памяти [ требуется ссылка ] , анизотропная фильтрация является относительно интенсивным процессом и стала стандартной функцией потребительских видеокарт только в конце 1990-х годов. [5] Анизотропная фильтрация в настоящее время распространена в современном графическом оборудовании (и программном обеспечении видеодрайвера) и включается либо пользователями через настройки драйвера, либо графическими приложениями и видеоиграми через программные интерфейсы.
Анизотропная фильтрация сохраняет "резкость" текстуры, которая обычно теряется при попытках текстуры mipmap избежать алиасинга. Поэтому можно сказать, что анизотропная фильтрация сохраняет четкие детали текстуры при всех ориентациях просмотра, обеспечивая при этом быструю фильтрацию сглаживающей текстуры .
В традиционном изотропном MIP-текстурировании уменьшение размера на каждом уровне одновременно уменьшает разрешение по каждой оси вдвое. В результате при рендеринге горизонтальной плоскости под косым углом к камере минификация обеспечит недостаточное горизонтальное разрешение из-за снижения частоты изображения по вертикальной оси. То есть при сэмплировании для избежания наложения спектров на высокочастотной оси другие оси текстуры будут аналогичным образом уменьшены и, следовательно, потенциально размыты.
При анизотропной фильтрации mipmap текстура с разрешением 256px × 256px будет не только уменьшена до 128px × 128px, но и до других неквадратных разрешений, таких как 256px × 128px и 32px × 128px. Эти анизотропно уменьшенные изображения могут быть исследованы, когда частота текстурно-наложенного изображения различна для каждой оси текстуры. Тогда одна ось не размывается из-за экранной частоты другой оси, и алиасинг по-прежнему избегается.
Mip-отображение и связанные с ним ограничения выравнивания осей означают, что оно не является оптимальным для истинной анизотропной фильтрации и используется здесь только в иллюстративных целях. Более общие методы анизотропной фильтрации поддерживают анизотропные зонды, которые не обязательно выровнены по осям в пространстве текстуры , что позволяет использовать диагональную анизотропию.
Во время рендеринга могут применяться различные степени или соотношения анизотропной фильтрации. Эта степень относится к максимальному соотношению анизотропии, поддерживаемому процессом фильтрации. Например, анизотропная фильтрация 4:1 (произносится как «4 к 1») продолжит усиливать более наклонные текстуры за пределами диапазона, усиленного 2:1. [6]
На практике это означает, что в ситуациях с сильно наклонной текстурой фильтр 4:1 будет вдвое резче фильтра 2:1 (он будет отображать частоты вдвое больше, чем фильтр 2:1). Однако большая часть сцены не потребует фильтра 4:1; только более наклонные и обычно более удаленные пиксели потребуют более резкой фильтрации. Это означает, что по мере того, как степень анизотропной фильтрации продолжает удваиваться, наблюдается уменьшение отдачи с точки зрения видимого качества с меньшим количеством затронутых отрисованных пикселей, и результаты становятся менее очевидными для зрителя; только относительно небольшое количество сильно наклонных пикселей, в основном на более удаленной геометрии, будут отображать заметно более резкие текстуры в сцене с более высокой степенью анизотропной фильтрации. Потеря производительности также уменьшается, поскольку меньшему количеству пикселей требуются выборки данных с большей анизотропией.
Текущие реализации аппаратного рендеринга устанавливают верхнюю границу этого соотношения из-за дополнительной сложности оборудования и вышеупомянутого убывающего возврата. [7] Приложения и пользователи могут регулировать соотношение с помощью настроек драйвера и программного обеспечения вплоть до порогового значения.
Истинная анизотропная фильтрация исследует текстуру анизотропно «на лету» на попиксельной основе для любой ориентации анизотропии.
В графическом оборудовании, как правило, когда текстура сэмплируется анизотропно, несколько проб ( выборок текселей ) текстуры вокруг центральной точки берутся на шаблоне образца, отображенном в соответствии с проецируемой формой текстуры в этом пикселе. [8] Более ранние программные методы использовали таблицы суммированной площади . [9]
Каждый зонд анизотропной фильтрации часто сам по себе является отфильтрованным образцом mipmap, что добавляет больше выборки к процессу. Шестнадцать трилинейных анизотропных образцов могут потребовать 128 выборок из сохраненной текстуры, поскольку трилинейная фильтрация mipmap должна взять четыре выборки для каждой из двух mipmap, а затем анизотропная выборка (при 16-отводе) должна взять шестнадцать из этих трилинейных отфильтрованных образцов.
Однако этот уровень сложности фильтрации не требуется постоянно. Существуют общедоступные методы сокращения объема работы, которую должно выполнять оборудование для рендеринга видео. [ необходима цитата ]
Метод анизотропной фильтрации, наиболее часто реализуемый на графическом оборудовании, представляет собой композицию отфильтрованных значений пикселей только из одной строки образцов mipmap. В общем, метод построения результата текстурного фильтра из нескольких зондов, заполняющих спроецированную выборку пикселей в пространство текстуры, называется «сборкой отпечатка», даже если детали реализации различаются. [10] [11] [12]
Требуемое количество выборок может сделать анизотропную фильтрацию чрезвычайно интенсивной по полосе пропускания . Множественные текстуры являются обычным явлением; каждая выборка текстуры может быть длиной в четыре байта или более, поэтому каждый анизотропный пиксель может потребовать 512 байт из текстурной памяти, хотя для уменьшения этого обычно используется сжатие текстур .
Видеодисплей может легко содержать более двух миллионов пикселей, а желаемая частота кадров приложения часто превышает 60 кадров в секунду. В результате требуемая полоса пропускания текстурной памяти может вырасти до больших значений. Диапазоны в сотни гигабайт в секунду пропускной способности конвейера для операций рендеринга текстур не являются чем-то необычным, когда задействованы операции анизотропной фильтрации. [13]
К счастью, несколько факторов смягчают ситуацию в пользу лучшей производительности: