3DGiТоги июль 2002 года: Исследование анизотропной фильтрации


Как уже широко известно, видеочипсеты NVIDIA GeForce256, GeForce2, GeForce3, GeForce4, ATI RADEON, RADEON 7500, RADEON 8500, STM KYRO, KYRO II обладают такой ныне популярной функцией, как анизотропная фильтрация.

Уже на протяжении года мы уделяем этой функции самое пристальное внимание. И это неудивительно, поскольку она позволяет значительно улучшить качество восприятия трехмерных сцен. Кратко я напомню, что для устранения артефактов (т.н. песка) по мере удаления текстурированных объектов от наблюдателя применяется технология MIP-mapping-а, создающая для каждой текстуры набор ее копий разной детализации (т.н. MIP-уровней), выбираемых при построении изображения в зависимости от расстояния от масштаба с которым текстура в результате закраски проецируется на экран. Чем дальше от нас удаляется треугольник, тем менее детализованный и, следовательно, более размытый MIP-уровень текстуры будет использован. Это соответствует нашему зрению (дальние объекты мы видим уже не такими четкими, как близкие). Резкими границами между MIP-уровнями "занимается" трилинейная фильтрация, сглаживая эти переходы с помощью линейной интерполяции между двумя соседними уровнями. Таким образом, билинейная фильтрация занимается удалением резких границ между пикселами текстуры (дабы мы видели стены и пол покрытыми не квадратиками, а сглажеными и более похожими на естественную плавно меняющуюся окраску материалами), а трилинейная дополнительно размывает картину, еще раз интерполируя результаты двух билинейно фильтрованных MIP-уровней. В результате четко видны только самые близко расположенные объекты. При этом расположенные под достаточно острым углом к направлению взгляда стены черезмерно смазываются. Справляться с такими "неудобными" для обычной билинейной и трилинейной фильтрации объектами и призвана анизотропная фильтрация, сохраняющая четкую картинку для расположенных под углом плоскостей и одновременно не допускающая "песок" на текстурах при черезмерном удалении от объекта.

Давайте рассмотрим работу этой функции на нескольких примерах: 3DMark2001SE (Direct3D), Serious Sam: The Second Encounter и Return to Castle Wolfenstein (OpenGL). Все выше перечисленные карты поддерживают использование анизотропии не только в играх, которые знают эту функцию, но и могут форсировать включение анизотропной фильтрации вне зависимости от того - понимает игра эту функцию или нет. Практически все карты умеют это делать в OpenGL даже без применения утилит-твикеров, то есть возможности включения форсирования анизотропии имеются в настройках драйверов. А вот для форсирования анизотропки в Direct3D у карт на чипах от NVIDIA я рекомендую использовать утилиту RivaTuner.

Разная реализации анизотропии у ATI и NVIDIA

Мы знаем, что реализация этой функции у разных фирм-производителей видеопроцессоров - различная. Да и скоростные характеристики анизотропий, скажем, от ATI и от NVIDIA, сильно отличаются. Схоже только результирующее качество.

Так ли это? Постоянные читатели наших материалов знают, что анизотропия от NVIDIA (речь идет о GeForce3) отличается высоким качеством, но и чрезмерным аппетитом. Падение производительности может достигать до 50%! Анизотропия от ATI (речь идет о RADEON 8500) гораздо более дешевая и, как считалось до недавнего времени, имеет не меньшее качество.

Как обычно, качество анизотропии оценивается на примерах стен, полов, площадей и т.п. Читатели видят четкие линии и радуются качеству этой функции. Но вот бдительные читатели заметили, что не все гладко в "канадском государстве". На некоторых поверхностях, находящихся под разными углами, отличными от 90 градусов, RADEON 8500 просто не воспроизводит анизотропию. Посмотрите на скриншоты, полученные в игре Serious Sam при повороте наблюдателя относительно стены:

ATI RADEON 8500

           
           


NVIDIA GeForce4

           
           

Для удобства восприятия я сделал анимированные GIF-файлы:

ATI RADEON 8500 NVIDIA GeForce4

Прекрасно видно, что на ряде углов зрения четкости у RADEON 8500 как ни бывало. Не это ли и является причиной вычислительной дешевизны анизотропии от ATI? А вот у NVIDIA GeForce3 и GeForce4 все "честно", если можно, конечно, считать способы реализации этой функции честными и нечестными. Плохо, что производители не предоставляют пользователям сознательного выбора: использовать честную анизотропию с большими потерями или "аппроксимацию", но более дешевую. Пока такой выбор может быть осуществлен только косвенно - выбором карты.

И все же нельзя напрямую оперировать понятием "честности" в отношении анизотропии. Если трилинейку мы можем достаточно строго оценивать, поскольку ее алгоритм однозначен и хорошо описан, то технология осуществления анизотропной фильтрации не разглашается производителем, а базовых подходов для выполнения такой фильтрации известно как минимум пол десятка. И это не считая нюансов реализации! Давайте подробно остановимся на реализациях этой функции у двух компаний.

Если билинейная и трилинейная фильтрация достаточно четко опеределены математически (что, впрочем, не помешало NVIDIA в свое время называть в некоторых документах трилинейной фильтрацией некий метод аппроксимации - дизеринг значений из разных MIP уровней), то термин "анизотропная фильтрация" не подразумевает каких-то конкретных алгоритмов ее реализации. Подходы NVIDIA и ATI в этом вопросе существенно разнятся. Давайте (схематически) познакомимся с ними:

           

NVIDIA поступает довольно прямолинейно. На схеме показано, как происходит в пространстве текстуры выборка билинейных семплов в процессе анизотропной фильтрации. В зависимости от установок качества фильтрации и угла наклона поверхности относительно плоскости экрана, выполняется от одного до четырех раз стандартная би- (или три-) линейная фильтрация для точек, лежащих на прямой, проведенной по делящей проектируемый из экрана в поверхность текстуры пиксель вдоль его длинной стороны (на схеме изображена стрелкой). Полученные таким образом значения (синие кружки) усредняются - это и будет результатом фильтрации. Каждое значение основывается на четырех ближайших дискретных значениях текстуры (прямоугольники) и может иметь собственные независимые координаты. Такой подход годится для произвольно ориентированных текстур, но требует изрядной производительности - для заметной части непараллельных экрану треугольников в несколько раз возрастает число выбираемых текстурных семплов, и, соответственно, время закраски.

Подход ATI более ограничен, но и более производителен:

           

Как мы видим, значения выбираются цепочкой, причем она может быть ориентирована в плоскости текстуры строго горизонтально или вертикально. Т.е. для близких к ортам значений проекционного вектора (стрелка на схеме) качество фильтрации будет высоким, но по мере его поворота эффект будет сходить на нет, вплоть до полной потери смысла в использовании такого метода. В реальных приложениях это выразится следующим образом - на стенах или потолках фильтрация будет работать на все сто, в то время как на наклоненных под непрямыми углами поверхностях ее результат будет все менее и менее заметен по мере приближения к критическому углу в 45 градусов (что мы и наблюдали выше). Но, с другой стороны, подобный подход гораздо более выгоден с вычислительной точки зрения. Во-первых, мы выбираем организованные цепочки размером от 2хN точек текстуры (на схеме квадратики), которые можно эффективно выбрать за N/2 тактов с помощью стандартных, рассчитанных на билинейную фильтрацию текстурных блоков. Затем, мы фильтруем значения (на схеме кружки), используя каждый раз одни и те же смещения относительно дискретных точек исходной текстуры. Подобная операция может быть выполнена за один такт специальной схемой из десяти умножителей, встроенной в текстурный блок, благо само значение параметров интерполяции вычисляется один раз и остается неизменным для всех 1..5 вычисляемых точек. Кроме того, мы можем существенно ускорить этот и так достаточно производительный алгоритм, заранее вычислив специально сжатые по осям варианты текстуры (т.н. RIP mapping).

Суммируя вышесказанное, отметим, что подход NVIDIA требует большее время на вычисление результата, но и является более "честным", одинаково хорошо справляясь с объектами, расположенными под любыми углами наклона, а не только строго горизонтально или вертикально по отношению к наблюдателю. В методе ATI заложено свое рациональное зерно - большинство современных игр изобилуют в основном горизонтальными и вертикальными поверхностями.

Ниже мы рассмотрели работу ряда видеокарт при активной анизотропии, куда вошли не только детища от NVIDIA и ATI, но и STM/PowerVR KYRO II, а также Matrox Parhelia. Итак, представляем:

  • ATI RADEON 9000 семейство представлено пока только в разделе качества (галерея скриншотов)
  • ATI RADEON 8500 128MB DDR 3.6ns (275/550 MHz)
  • ATI RADEON 8500LE 128MB DDR 3.6ns (250/500 MHz)
  • ATI RADEON 8500 64MB DDR 3.6ns (275/550 MHz)
  • ATI RADEON 8500LE 64MB DDR 3.6ns (250/500 MHz)
  • ATI RADEON 7500 64MB DDR 4ns (290/460 MHz)
  • ATI RADEON 7500LE 64MB DDR 4ns (265/380 MHz)
  • NVIDIA GeForce4 Ti4600 128MB DDR 2.8ns (300/650 MHz)
  • NVIDIA GeForce4 Ti4400 128MB DDR 3.6ns (275/550 MHz)
  • NVIDIA GeForce4 Ti4200 128MB DDR 4ns (250/444 MHz)
  • NVIDIA GeForce3 Ti500 64MB DDR 3.8ns (240/500 MHz)
  • NVIDIA GeForce3 Ti200 64MB DDR 5ns (175/400 MHz)
  • NVIDIA GeForce4 MX 460 64MB DDR 3.6ns (300/550 MHz)
  • NVIDIA GeForce4 MX 440 64MB DDR 5ns (270/400 MHz)
  • NVIDIA GeForce4 MX 420 64MB DDR 6ns (250/166 MHz)
  • NVIDIA GeForce2 MX400 32MB SDR 5.5ns (200/183 MHz)
  • PowerVR/STM KYRO II 64MB SDR 5ns (175/175 MHz)
  • Matrox Parhelia представлена пока только в разделе качества (галерея скриншотов)

Анизотропия в Direct3D

3DMark2001 SE, производительность

Полагаю, что картина видна и без комментариев. Отмечу коротко основные моменты: лидер по падению производительности - KYRO II; затем идут GeForce4 Ti и GeForce3 Ti 500. И только потом уже RADEON 8500 и RADEON 7500. Что вполне объяснимо в свете вышеизложенных принципов работы этой функции у исследуемых карт.

3DMark2001 SE, качество:

1. Раздельное сравнение

2. Сводное сравнение при помощи анимированных GIF-файлов

3. Анализ

Сразу хочу обратить внимание на то, что в Direct3D у RADEON 8500 смещено значение LOD BIAS в сторону увеличения четкости текстур, поэтому при включенной анизотропии кажется, что четкость у этой карты выше, чем у GeForce3. Это впечатление обманчиво, так как красота видна только на скриншотах, а на деле такой сдвиг LOD BIAS приводит к возникновению "шума текстур", что заметно в виде мелькающих точек, так называемого "песочка". Поэтому для полноценного сравнения мы сместили LOD BIAS также и у GeForce4 Ti и.. увидели практически то же качество. Вообще, судя по исследованию этих тестов, различия в качестве при включенных средних и максимальных степенях анизотропии в целом отсутствуют, либо имеются только на очень отдаленных участках.

У RADEON 7500, к сожалению, на драйверах версии 6.071 (WHQL, официальный выпуск от ATI) в DIrect3D анизотропия, похоже, не работает.

Я рекомендую почитать наши обзоры, посвященные исследованию анизотропной фильтрации для получения более подробных сведений о качестве, какое можно получить у различных карт при активизации этой функции.

А теперь перейдем к OpenGL.

Анизотропия в OpenGL

Надо сказать, что в последних версиях драйверов от NVIDIA (начиная с 28.90) появилась возможность управлять так называемой быстрой анизотропией в OpenGL. К сожалению, есть ряд ограничений:

  1. Этот режим (включенный по умолчанию) работает только в играх, НЕ ЗНАЮЩИХ анизотропию (например, Serious Sam уже выпадает);
  2. Выключить его в настройках драйверов не получится, только через реестр или при помощи последней версии RivaTuner.

Этот вид анизотропной фильтрации использует хитрый алгоритм пропускания обработки текстур на очень дальних объектах (во всяком случае, обнаружить это очень сложно), но получаем при этом хороший прирост по скорости.



Мы видим, что падение производительности существенно меньше на новых драйверах. При это качество анизотропии ПРАКТИЧЕСКИ СОВСЕМ НЕ ИЗМЕНИЛОСЬ (слева скриншот, полученный на версии 28.32, справа - на 29.42):

       

Serious Sam: The Second Encounter, производительность

Интересно отметить, что в данной игре ситуация у GeForce4 Ti много лучше, а вот падение производительности у RADEON 8500 весьма выросло, несмотря на огрехи в качестве, о чем ниже.

Serious Sam: The Second Encounter, качество

1. Раздельное сравнение

2. Сводное сравнение при помощи анимированных GIF-файлов

3. Анализ

Хочу обратить внимание на то, что вблизи может быть не видно ущербности анизотропии у RADEON 8500, более наглядно покажет это следующий пример:

       

При удалении от наблюдателя реализация анизотропии у RADEON 8500 приобретает характер лоскутообразности, особенно это неприглядно выглядит при приближении к горам или холмам.

Return to Castle Wolfenstein, производительность

Последние драйверы улучшили положение GeForce4 Ti в плане производительности анизотропии, поэтому эти карты уже смотрятся весьма достойно, учитывая блестящее качество этой фильтрации.

Return to Castle Wolfenstein, качество

1. Качество: раздельное сравнение

2. Качество: сводное сравнение при помощи анимированных GIF-файлов

3. Анализ

Мы видим, что смещение LOD BIAS дает весомый результат (при этом падения скорости почти нет), поэтому можно рекомендовать владельцам карт на базе GeForce4 Ti использовать анизотропию степени 4 со смещенным LOD BIAS. При этом никакого "шума текстур" не наблюдается (разумеется, при разумном смещении).




Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.