3DGiТоги сентябрь 2001 года: Исследование анизотропной фильтрации на примере Serious Sam


В качестве анонса хочу отметить, что в следующем выпуске 3DGiТогов в этом разделе будет введена часть, посвященная исследованию анизотропии в Direct3D.

Как уже широко известно, видеочипсеты NVIDIA GeForce256, GeForce2, GeForce3, ATI RADEON, STM KYRO, KYRO II обладают такой ныне популярной функцией, как анизотропная фильтрация. Как и билинейная, она служит для улучшения восприятия наблюдателем трехмерной сцены. Если трилинейная фильтрация служит для размытия границ между MIP-уровнями, обеспечивая плавность размытия текстур по мере удаления от наблюдателя, то анизотропная фильтрация — это как бы более высокая степень билинейной, она работает не на границах MIP-уровней, а по всей сцене. Ее задача — увеличить четкость изображения, не портя при этом результаты работы MIP-mapping-а, то есть разбиения сцены на уровни с разной детализацией текстур. Анизотропия может применяться совместно с трилинейной фильтрацией или без оной. Как и любая функция в трехмерной графике, анизотропная фильтрация не бесплатна, за качество приходится платить производительностью:




Как мы видим, в весьма выгодном положении NVIDIA GeForce2-карты, а также ATI RADEON. Почему же так сильно падает производительность у NVIDIA GeForce3? Частично мы отвечали на этой вопрос в обзоре по этому GPU. Обратите внимание на катастрофическое падение производительности у STM KYRO (у KYRO II ситуация с анизотропией аналогичная, только надо отметить, что форсирование этой фильтрации в OpenGL не работает, поэтому увидеть ее можно только в играх, поддерживающих анизотропию самостоятельно). Такое падение делает наличие у KYRO анизотропии фикцией, и только. А теперь давайте посмотрим на качество анизотропии, чтобы убедиться в том, что малая потеря в производительности еще не гарантирует отличное качество этой фильтрации.

STM KYRO

Трилинейная фильтрация:

    


Анизотропная:

    


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

STM KYRO II

Трилинейная фильтрация:

    


Анизотропная:

    


Хотя у KYRO II скорость и повыше, что позволяет при активной анизотропии уже получить приличную играбельность, качество этой фильтрации все равно ниже среднего.

ATI RADEON

Трилинейная фильтрация:

    


Анизотропная (средний уровень):

    


Анизотропная (максимальный уровень):

    


Мы можем видеть что-то очень странное на среднем уровне анизотропной фильтрации. MIP-уровни как бы частично проглочены, и сразу же посредине сцены начинается уровень с очень размытыми текстурами. Это говорит прежде всего о том, что RADEON не умеет выполнять одновременно анизотропию и трилинейную фильтрацию. Однако ошибка в формировании MIP-уровней налицо, когда 8-й или 9-й уровень приближается и становится на место 3-го или 4-го. Поэтому эта псевдо-анизотропия бракуется. А вот максимальный уровень, предположительно 16-точечный, весьма хорош, однако расплата за эту красоту в 32-битном цвете велика. Должен отметить, что если при помощи RadeonTweaker выставить иной режим анизотропии (якобы 64-х или 128-ми точечный), то такая досадная вещь, как приближение размытого MIP-уровня, вообще пропадает.

NVIDIA GeForce2 Ultra

Трилинейная фильтрация:

    


Анизотропная фильтрация (8 tap):

    


Как мы видим, качество анизотропии максимальной степени у RADEON выше, чем у GeForce2-карт, однако и падение производительности у RADEON гораздо более значительное.

NVIDIA GeForce3

Трилинейная фильтрация:

    


Анизотропная фильтрация (8 tap):

    


Анизотропная фильтрация (16 tap):

    


Анизотропная фильтрация (32 tap):

    


Интересно отметить, что Level 2 (8-точечная) анизотропия у GeForce3 по качеству чуть выше, чем аналогичная у GeForce2, но при этом и падение производительности больше. Остальные типы анизотропной фильтрации можно посмотреть только ради интереса, вследствие того, что ради них приходится жертвовать очень большой долей производительности. Должен сказать, что жесткое соответствие типа анизотропии числу текстурных сэмплов — это всего лишь предположение, так как нигде это не регламентируется. Есть мнение, что формула установки типа этой фильтрации через переменную DefaultLogAniso, когда мы предположили, что ее значение 1 соответствует 8-точечной, 2 — 16-точечной и 3 — 32-точечной, может быть не совсем верной. Вполне возможно, что число текстурных сэмплов соответствует 16, 32 или 64, но при этом задается максимальное количество, то есть предел числа выборки сэмплов, на практике же процессор может использовать гораздо меньшие значения в зависимости от сцены. То есть присутствует так называемая адаптивная анизотропия, иначе говоря "приспосабливаемая". Повторяю, что это всего лишь предположения, мы будем ориентироваться на те параметры, которые мы использовали с самого начала: 8, 16 и 32-сэмпловая анизотропная фильтрация.

Таким образом, у видеокарт на базе NVIDIA-процессоров вполне хорошим выбором будет 8-точечная анизотропная фильтрация, а у RADEON просто нет иного выбора, кроме максимальной степени анизотропии, потому как средняя — это "ошибка природы" :-)

Надо еще отметить, что в драйверах от NVIDIA, начиная с 10.*, появилась возможность форсирования анизотропии в Direct3D. Я всем рекомендую установить Riva Tuner (автор Алексей Николайчук AKA Unwinder unwinder@medicom-mtd.com). Последняя версия этой утилиты уже адаптирована под Детонаторы последних выпусков — 12.*. C помощью этой утилиты очень удобно настраивать анизотропию в обоих API. Начиная с версии драйверов 12.90, в Direct3D реализована активация уже не только Level 2, но и Level 8 — анизотропии. Поэтому в следующем выпуске мы рассмотрим, что нам дает эта функция в Direct3D.

А вот у ATI RADEON в Direct3D форсирования анизотропии, к сожалению, нет, и приложений, поддерживающих эту функцию в этом API, практически нет. Поэтому мы не можем оценить уровень анизотропной фильтрации у RADEON в Direct3D.




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