Третья часть: Анизотропная фильтрация и полноэкранное сглаживание.

Автор: Tim
Дата: 12.05.2003
Все фото статьи

Анизотропная фильтрация


Применение анизотропной фильтрации текстур позволяет добиться намного более высокой четкости текстур на больших расстояниях до объектов и маленьких углах наклона к их поверхностям. Таким образом сцены при применении анизотропной фильтрации текстур становятся более правдоподобными и близкими к реальности. Примечательно, что эту функцию можно включать практически в любых 3D приложениях, при этом никаких дополнительных требований к игровому движку или компонентам системы не выдвигается - вся дополнительная работа ложится на плечи графического процессора.
Одной из самых приятных особенностей графических процессоров серии NVIDIA GeForce 3 / GeForce 3 Titanium / GeForce 4 Titanium являлось отличное качество реализации анизотропной фильтрации, а одной из самых неприятных - слишком высокое падение производительности при активировании этой функции.
Неудивительно, что при разработке новой архитектуры CineFX и чипов серии GeForce FX компания NVIDIA уделила должное внимание анизотропной фильтрации, постаравшись снизить величину падения производительности при минимальных потерях в качестве изображения.
Как показали обзоры NVIDIA GeForce FX 5800 Ultra, компании удалось с блеском реализовать задуманное - чипы серии GeForce FX предлагают на выбор целых три режима анизотропной фильтрации, различающихся качеством и скоростью, при этом даже в самом быстром режиме, обеспечивающем вдвое-втрое меньшую величину падения производительности, качество фильтрации текстур оказывается более чем приемлемым.
"Виновниками" такого прогресса стали как разработчики чипа, внедрившие некоторые усовершенствования в алгоритм анизотропной фильтрации (см. NVIDIA GeForce FX 5800 Ultra), так и программисты, предусмотревшие ряд оптимизаций в теле драйвера. Общая идея программных способов оптимизации состоит в понижении максимального уровня анизотропии для текстур или отдельных полигонов, что, разумеется, приводит к увеличению производительности. Судите сами: зачем подвергать анизотропной фильтрации всю сцену без разбора, когда можно отбросить отдельные полигоны или текстуры, для которых нет смысла производить анизотропную фильтрацию, поскольку вот эта текстура так размыта, что никакая фильтрация не улучшит её четкость, а вот тот полигон находится под таким углом, что на нем ничего не видно?
Реализация анизотропной фильтрации NVIDIA GeForce FX 5900 Ultra интересна именно с "драйверной" точки зрения, поскольку её аппаратные алгоритмы перешли из NV30 в NV35 без изменений, и все возможности повышения производительности могут быть связаны лишь с усовершенствованием программных способов оптимизации.

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


А теперь - увеличенные фрагменты скриншотов, полученных при включении в программе трилинейной фильтрации и форсировании анизотропной фильтрации 8х с помощью драйвера:

Режим "Quality":

Режим "Balanced":

Режим "Performance":


Прекрасно видно, что в режимах "Balanced" и "Performance" трилинейная фильтрация деградировала почти до уровня чистой билинейной фильтрации: плавные зоны перехода между MIP-уровнями сократились до узеньких полосок шириной в 2-3 пиксела. Помимо этого, в режиме "Performance" частично снижен уровень детализации текстур: граница первого MIP-уровня придвинулась ближе.
Со времени тестирования NVIDIA GeForce FX 5800 Ultra совместно с драйвером 42.68 деградация трилинейной фильтрации значительно усилилась. Для подтверждения достаточно привести скриншоты из обзора NVIDIA GeForce FX 5800 Ultra:

Режим "Application":

Режим "Balanced":

Режим "Aggressive":

Очевидно, дальнейшая деградация трилинейной фильтрации в драйвере 43.80 - один из способов поднять производительность чипов серии GeForce FX при совместном применении трилинейной и анизотропной фильтрации.
Однако, дальнейших изменений в плане трилинейной фильтрации в драйверах, по всей видимости, уже не будет - этот ресур оптимизации полностью исчерпал себя. Уже сейчас в режимах "Balanced" и "Performance" иногда становятся отчетливо видны зоны переключения MIP-уровней, и дальше - только полное отключение трилинейной фильтрации, как сделано у ATI R300/R350 при анизотропной фильтрации в режиме "Performance". Надеюсь, от NVIDIA мы такого не дождемся.

Что ж, теперь рассмотрим, чем еще будет отличаться качество изображения в режимах "Quality", "Balanced" и "Performance". Для примера берем сцену из Serious Sam: The Second Encounter:


Ниже - увеличенные фрагменты скриншотов этой сцены при использовании OpenGL и Direct3D.

Режим "Quality", OpenGL:

Режим "Quality", Direct3D:

Никаких различий при работе в OpenGL и Direct3D на вид нет - да им и неоткуда взяться, поскольку известно, что в режиме "Quality" все оптимизации отключены.

Режим "Balanced", OpenGL:

Режим "Balanced", Direct3D:

Здесь также нет заметных различий между скриншотами, снятыми в OpenGL и Direct3D. Однако, на третьем слева кадре и в Open GL, и в Direct3D заметно небольшое ухудшение четкости "каменной" текстуры по сравнению с режимом "Quality".

Режим "Performance", OpenGL:

Режим "Performance", Direct3D:

На двух первых скриншотах, снятых в OpenGL, заметны артефакты компрессии текстур - в режиме "Performance" при использовании OpenGL драйвер включает принудительную компрессию текстур.
На остальных скриншотах заметно серьезное падение уровня детализации текстур по сравнению с режимами "Quality" и "Balanced", при этом на скриншотах, снятых в OpenGL, четкость оказывается чуть выше.

Пора оценить качество анизотропной фильтрации NVIDIA GeForce FX 5900 Ultra в сравнении с ATI RADEON 9800 Pro. Действие происходит, по-прежнему, в Serious Sam: The Second Encounter:



В игре используется OpenGL API, включена трилинейная фильтрация и настройки качества, соответствующие стандартному набору настроек "GFX: Extreme Quality", за исключением уровня анизотропной фильтрации текстур - для сохранения равных условий тестирования видеокарт он устанавливался вручную.
Видеокарта NVIDIA GeForce FX 5900 Ultra была протестирована при анизотропной фильтрации 8х в режимах "Quality", "Balanced" и "Performance", ATI RADON 9800 Pro - при анизотропной фильтрации 8х в режиме "Quality". Дополнительно были сняты скриншоты с подкрашиванием MIP-уровней.

Итак,
Угол наклона 1:






В режимах "Balanced" и "Performance" у NVIDIA GeForce FX 5900 Ultra явно заметны линии переключения MIP-уровней, которых, разумеется не видно в режиме "Quality". Впрочем, даже в режиме "Quality" GeForce FX 5900 Ultra показывает немного меньшую четкость текстур по сравнению с ATI RADEON 9800 Pro.

Обратите внимание на грязные цвета подкрашенных MIP-уровней на NVIDIA GeForce FX 5900 Ultra. Откуда они могли появиться?
Грязные цвета - результат смешения цветов двух подкрашенных по-разному MIP-уровней. Вопреки ожиданиям, "каменная" плоскость, ставшая объектом придирчивого изучения качества, имеет не один, а два текстурных слоя - основная "каменная" текстура и гораздо менее детализированная текстура, придающая каменной кладке небольшие яркостные неоднородности, что позволяет избежать монотонного вида при наблюдении с больших расстояний.
По всей видимости, для этой текстуры NVIDIA GeForce FX 5900 Ultra использует отличный от выбранного уровень анизотропной фильтрации, в результате MIP-уровни на двух текстурах располагаются по-разному, а на картинке появляются смешанные цвета.
Что ж, понизить уровень или вовсе отключить анизотропную фильтрацию для столь растянутой и невыразительной яркостной текстуры - вполне разумный шаг, ведь при этом скорость отрисовки поверхности повысится, а изображение почти не изменится.
О чем всё это говорит? О том, что со времен NVIDIA GeForce 4 и оптимизации анизотропной фильтрации на основе анализа геометрических данных - "пополигонное" определение уровня анизотропной фильтрации, появился новый способ оптимизации - "потекстурное" определение.
По всей видимости, при загрузке текстуры драйвер анализирует её четкость и в зависимости от результатов устанавливает максимальный уровень анизотропии, который будет использоваться при наложении этой текстуры. Причем, в режимах "Quality", "Balanced" и "Performance" используются разные степени упрощения.

Угол наклона 2:







Этот угол наклона является неудобным для алгоритма анизотропной фильтрации ATI RADEON 9800 Pro, и здесь новый чип от ATI уступает по качеству даже режиму "Performance" NVIDIA GeForce FX 5900 Ultra.

Угол наклона 3:






Здесь ATI RADEON 9800 Pro и NVIDIA GeForce FX 5900 Ultra в режиме "Quality" показывают примерно одинаковую картинку.

Примечательно, что алгоритмы оптимизации анизотропной фильтрации, пока, по всей видимости, работают только в OpenGL. В качестве подтверждения можно привести два скриншота одной и той же сцены из Serious Sam: The Second Encounter,снятых при включенной анизотропной фильтрации 8х и подкрашенных MIP-уровнях, с использованием OpenGL и Direct3D.

Слева - режим "Performance" в OpenGL, справа - режим "Performance" в Direct3D:




На скриншоте, снятом в OpenGL, прекрасно видно наложение разных цветов MIP-уровней ( базовые текстуры накладываются с анизотропной фильтрацией уровня 8х, а менее детализированные, судя по изображению, используют обычную билинейную фильтрацию), в то время как в Direct3D MIP-уровни всех текстур совпадают и четко соответствуют картинке, характерной для анизотропной фильтрации 8х.

В режиме "Quality" должна использоваться значительно менее агрессивная оптимизация, либо она может быть вовсе отключена. Проверяем. Слева - режим "Quality" в OpenGL, справа - режим "Quality" в Direct3D:



Да, смешение цветов MIP-уровней всё же появляется, но только на самых удаленных участках сцены.

Что ж, теперь можно представить, какие оптимизации могут появиться в Detonator FX: во-первых, это дальнейшее совершенствование алгоритмов определения максимального уровня анизотропии для текстур и полигонов в OpenGL, а во-вторых - появление этих алгоритмов в Direct3D.
А пока можно оценить, насколько новые оптимизации помогают чипам от NVIDIA с наименьшими потерями выполнять анизотропную фильтрацию.
Для измерения величины падения производительности при включении анизотропной фильтрации в OpenGL я выбрал Quake3 Arena:


В среднем двукратное снижение падения производительности в режиме "Balanced" по сравнению с режимом "Quality", и почти десятикратное снижение потерь в режиме "Performance" - превосходный результат!
Для сравнения - падение производительности на ATI RADEON 9800 Pro в режиме "Quality":


ATI RADEON 9800 Pro обеспечивает меньшее падение производительности в режиме "Quality" по сравнению с NVIDIA GeForce FX 5800 Ultra/5900 Ultra в режиме "Quality", однако сам алгоритм анизотропной фильтрации от ATI имеет недостаток, которого не имеют чипы серии NVIDIA GeForce FX - наличие "неудобных" углов, на которых качество анизотропной фильтрации текстур снижается.

Для оценки падения производительности при форсировании анизотропной фильтрации в Direct3D я использовал Unreal Tournament 2003:


В Direct3D -части драйвера пока нет такого набора оптимизаций, как в OpenGL-части, и снижение падения производительности в режимах "Balanced" и "Performance" оказывается не столь существенным.


ATI RADEON 9800 Pro в Unreal Tournament 2003 при включении анизотропной фильтрации "теряет" больше, чем в Quake3 Arena, но по-прежнему, меньше, чем NVIDIA GeForce FX 5900 Ultra в режиме "Quality" и даже в режиме "Balanced".

Итак, по результатам оценки качества и скорости анизотропной фильтрации можно сказать только одно: скорее бы вышел Detonator FX! Алгоритмы оптимизации анизотропной фильтрации, примененные в OpenGL-части драйвера, обеспечивают значительное снижение потерь производительности при весьма умеренных потерях в качестве изображения, и их появление в Direct3D-части драйвера пришлось бы как нельзя кстати.

Полноэкранное сглаживание


В части полноэкранного сглаживания NVIDIA GeForce FX 5900 Ultra не имеет никаких существенных отличий от предшественника.
Посему я позволил себе ограничиться лишь оценкой качества сглаживания границ поигонов в режимах с двумя, четырьямя и восемью сэмплами. Скриншоты сняты в OpenGL и Direct3D на примере сцены из Serious Sam: The Second Encounter:


Увеличенные фрагменты скриншотов: верхняя строка - 2х, 4х, 8х в OpenGL, нижняя - 2х, 4х, 8х в Direct3D:






Для сравнения - действие SMOOTHVISION 2.1 2х, 4х и 6х на ATI RADEON 9800 Pro:


Очевидно, по качеству сглаживания границ с режимами 4х и 6х от ATI может поспорить лишь режим 8x от NVIDIA.
Кстати, правильнее будет говорить "режимы", а не "режим" - по скриншотам отчетливо видно, что 8х в OpenGL и 8x в Direct3D - разные режимы, обеспечивающие разное качество сглаживания границ полигонов. А поскольку эти режимы представляют собой комбинацию суперсэмплинга и мультисэмплинга, разным будет не только сглаживание границ полигонов, но и обработка текстур.
В качестве подтверждения можно привести скриншоты сцены из Serious Sam: The Second Encounter:


Увеличенные фрагменты скриншотов при включении полноэкранного сглаживания 8x в OpenGL:


А теперь - фрагменты скриншотов при включении сглаживания 8х в Direct3D:


По скриншотами видно, что OpenGL-вариант сглаживания 8х обеспечивает более высокую четкость текстур.
Изображение листвы, выполненной как текстуры с использованием прозрачности, в режиме сглаживания 8х в OpenGL, эквивалентно изображению, получаемому с помощью суперсэмплинга 2х2, в то время как в Direct3D-вариации метода 8х отчетливо виден суперсэмплинг 2х1.

Обобщая наблюдения, я могу привести схему реализации методов 2х, 4х и 8х на NVIDIA GeForce FX 5900 Ultra:


Самый "продвинутый" вид антиалиасинга предлагает OpenGL-вариант 8х: суперсэмплинг по четырем блокам мультисэмплинга 2х - это сильно! И, надо заметить, красиво :).
Осталось лишь оценить, каким будет падение производительности при включении полноэкранного сглаживания. Сказано - сделано:


NVIDIA GeForce FX 5900 Ultra имеет вдвое меньшую величину падения производительности при включении самого "ходового" режима - 4х. Причины очевидны: NV35, в отличие от NV30, имеет более производительную 256-битную шину памяти и обновленные схемы кэширования и компрессии буфера кадра и Z-буфера.
В режиме 8х можно было бы ожидать еще большего преимущества GeForce FX 5900 Ultra, однако, алгоритм суперсэмплинга, входящий в режим 8х, не дает этим ожиданиям сбыться: в отличие от мультисэмплинга, суперсэмплинг в первую очередь нагружает графическое ядро, а в этом плане NV35 не имеет никакого преимущества перед NV30. Как результат - превосходство NVIDIA GeForce FX 5900 Ultra над GeForce FX 5800 Ultra совсем незначительно, а потери производительности при использовании метода 8х не внушают никаого оптимизма.


ATI RADEON 9800 Pro использует "чистый" мультисэмплинг, поэтому никаких неожиданностей даже в самом "тяжелом" режиме, 6х, у него не возникает.

Для оценки падения производительности при форсировании полноэкранного сглаживания в Direct3D используем Unreal Tournament 2003:




Интересный результат: использование метода полноэкранного сглаживания 4х на NVIDIA GeForce FX 5900 Ultra вызывает почти такое же падение производительности, что и метод 2х у GeForce FX 5800 Ultra.



ATI RADEON 9800 Pro при полноэкранном сглаживании работает примерно с такой же эффективностью, как и NVIDIA GeForce FX 5900 Ultra.

Итак, с выходом NVIDIA GeForce FX 5900 Ultra полноэкранное сглаживание по методу мультисэмплинга стало почти по-настоящему "бесплатным" - максимальная зафиксированная величина падения производительности при использовании сглаживания 4х составила всего лишь 30,7%.
Однако, относительно самого желанного, самого качественного режима сглаживания, а именно 8х, такого не скажешь - величина падения производительности при использовании 8х в OpenGL и Direct3D составляет от 60 до 80 процентов. Таким образом, в режимах 8x NVIDIA GeForce FX 5900 Ultra не имеет заметных преимуществ перед своим предшественником.



Содержание:

NVIDIA GeForce FX 5900 Ultra - "Король умер, да здравствует король!"
Вторая часть: Тестовая система, синтетические тесты
Третья часть: Анизотропная фильтрация, полноэкранное сглаживание
Четвертая часть: Тестирование в играх
Пятая часть: Тестирование в 3DMark 2001 SE, 3DMark 03
Шестая часть: Разгон, заключение