Введение
Если судить по информации на форумах и из статей в Интернете, то ATi хитрит с трилинейной фильтрацией текстур на новом графическом процессоре X800. Впрочем, находятся и яростно защищающие ATi. Вообще, подобные дискуссии напоминают нам скандал годовалой давности, связанный с nVidia.
Поводом для столь горячего обсуждения стала статья на немецком сайте Computerbase. В ней было показано, как ATi использует оптимизированную трилинейную фильтрацию текстур, часто называемую “брилинейной” (brilinear) из-за смеси билинейной и трилинейной фильтраций, в графических процессорах Radeon 9600 и X800. Новость действительно стала ошеломляющей, ведь ATi всегда твердила о использовании настоящей трилинейной фильтрации.
Но как ситуация выглядит на самом деле? Это – оптимизация, хитрость или просто разумное решение? Чтобы судить, нам необходимо углубиться в технологии различных способов фильтрации. И первая часть статьи будет посвящена именно этому, причём, некоторые технологии мы изложим весьма упрощённо, чтобы уложиться в несколько страниц. Итак, давайте взглянем на базовые и принципиальные функции фильтрации.
Это сравнение чётко демонстрирует, как правильная фильтрация улучшает качество картинки.
Множественное отображение текстуры (mipmapping)
Текстурная фильтрация, о которой мы говорим в этой статье, использует несколько уровней множественного отображения текстур (mipmap). Под термином “множественное отображение” мы подразумеваем использование одной и той же текстуры, но разных размеров. Представьте, что вы находитесь в длинном коридоре, пол которого покрыт паркетом до горизонта. Для реалистичного отображения паркета те квадратики, которые находятся близко к наблюдателю, должны быть сильно детализованы. Однако чем ближе к горизонту, тем квадратики (и текстура) становятся меньше и меньше – то есть они отображаются меньшим числом пикселей. При этом теряются детали типа швов между квадратиками, ведь драйвер видеокарты не знает, какие детали в текстуре являются важными.
Множественное отображение улучшает качество графики, используя текстуры, которые уменьшаются в два раза по мере удаления от наблюдателя. Переход с одного mip-уровня на другой задаётся так называемым уровнем детализации текстур Texture LOD (Level Of Detail).
Текстура с множественным отображением.
Обе части экрана показывают изображение с билинейной фильтрацией. Слева мы показали разные mip-уровни множественного отображения текстуры. Вы можете заметить характерные артефакты на правой части экрана при переходе с одного mip-уровня на другой.
Впрочем, для получения приличного результата графической карте приходится выполнять не только множественное отображение, поскольку перспектива текстуры при приближении к горизонту искажается, и чем дальше текстура находится от наблюдателя, тем она должна быть меньше. Без фильтрации текстуры (это называется режимом point sampling) вы получите очень пикселизованное изображение. Представьте вновь длинный коридор. Чем дальше квадратик паркета находится от наблюдателя, тем меньше пикселей по горизонтали доступно для его отображения, так как коридор сходится из нижней части экрана к центру.
Здесь показан кадр из игры, близкий к нашему примеру с коридором. Вы можете наглядно видеть, что перспектива требует разного масштаба.
Следующий раздел статьи показывает, как множественное отображение противодействует пикселизации, вызванной масштабированием. Для демонстрации мы использовали тест текстурной фильтрации 3DMark 2003 (версия Pro):
Левая часть картинки выведена без множественного отображения. Вам может показаться, что она выглядит более чётко. Действительно так, но без текстур разных размеров вы получите мерцание с большим количеством “шума” – во время движения это выглядит просто ужасно. Вы можете сами попробовать отключить множественное отображение в играх, базирующихся на движке Q3. Выставьте режим r_textureMode в “GL_LINEAR” для отключения множественного отображения с активной линейной фильтрацией, “GL_NEAREST” для point sampling без технологии множественного отображения и “GL_NEAREST_MIPMAP_NEAREST” – для множественного отображения с технологией point sampling.
Также следует отметить, что mip-уровни текстур необязательно должны поставляться вместе с игрой. Современные видеокарты могут сами создавать mip-текстуры из базовой текстуры.
Линейная фильтрация
Для получения лучшего результата текстуру необходимо подвергать дополнительной фильтрации. Если вы когда-нибудь работали с программами по редактированию изображений, то знакомы с эффектом пикселизации. Если вы возьмёте картинку и уменьшите её в нечётное число раз, то потеряете множество деталей. Для предотвращения подобной ситуации хорошие программы по редактированию изображений предлагают различные методы фильтрации, позволяющие свести потери к минимуму.
На иллюстрации мы уменьшили размер картинки с web-сайта. Без использования фильтрации текст не читается. На отфильтрованном изображении текст размыт, однако его можно разобрать.
Текстура представляет собой картинку, состоящую из вертикальных и горизонтальных рядов пикселей. При уменьшении картинки вам придётся укладываться в меньшее число пикселей, поэтому и детализация тоже уменьшается. Но вернёмся к нашей текстуре. Она расположена пространственно, и поэтому масштабируется асимметрично. Если взять текстуру пола, то она будет сильнее уменьшаться по горизонтали, чем по вертикали.
Современные видеокарты, как и программы по редактированию изображения, используют специальную фильтрацию текстур, называемую линейной фильтрацией или линейным сэмплированием. В результате, при уменьшении изображения цветовые значения нового пикселя высчитываются из нескольких текселей. Если быть более конкретным, то финальное значение пикселя берётся из четырёх соседних текселей (текселем называют пиксель текстуры; в финальном пространственном представлении, то есть в игре, они уже называются пикселями).
Билинейная и трилинейная фильтрация
Масштабирование текстур прекрасно работает в паре с линейной фильтрацией, однако её возможности ограничены. Для получения достойного результата в играх без множественного отображения не обойтись. Этот факт заметен на следующей иллюстрации:
Здесь мы показали распространённые режимы фильтрации. Пожалуйста, имейте в виду, что скриншоты не показывают игру в действии! Вы можете подумать, что между билинейной и трилинейной фильтрацией отличий немного, но вы полностью измените своё мнение, если поиграете.
Мы хотим сказать, что в играх необходима и линейная фильтрация, и множественное отображение. Самый простой (и быстрый) способ линейной фильтрации, используемый в графических картах, называется билинейной фильтрацией. Этот тип фильтрации использовался ещё во времена Riva TNT и Voodoo1. Билинейная фильтрация обрабатывает каждую mip-текстуру раздельно. При переходе с одного mip-уровня на другой становятся заметны границы. Скажем, если вы будете двигаться по коридору, то заметите перед собой бегущие горизонтальные линии. Очень нехороший и нереалистичный эффект, который также называют “bow wave”.
Слева вы можете заметить границу между двумя mip-уровнями. Эта граница постоянно движется перед вами, если вы перемещаетесь в игре.
Трилинейная фильтрация компенсирует этот недостаток, принимая во внимание пиксели соседней текстуры в области mip-переходов. То есть в этой области текстуры смешиваются друг с другом. Как вы можете догадаться, такой подход требует дополнительной вычислительной мощности. Билинейная фильтрация текстур на современных картах выполняется практически “бесплатно”, то есть чипы могут выполнять её без ущерба для производительности. Трилинейная фильтрация, с другой стороны, потребляет вычислительную мощность, поскольку необходимо обрабатывать больше одной текстуры. При использовании трилинейной фильтрации финальный пиксель формируется, в среднем, из восьми текселей (в форме прямоугольника).
Вполне очевидно, что оптимизации ATi и nVidia направлены на снижение вычислительной нагрузки. Но мы обсудим их чуть позднее. Пока давайте рассмотрим ещё один популярный метод фильтрации.
Анизотропная фильтрация
Различия между минимальной и максимальной (на текущий момент) анизотропной фильтрацией 16x.
Сегодня лучшие результаты по качеству даёт анизотропная фильтрация. Как предполагает название, тексели при этом отбираются не из симметричной области, а берутся из области, подкорректированной с учётом перспективы (анизотропная форма). Причём форма этой области не оговаривается, но обычно используются прямоугольные или трапециевидные области, или в форме параллелограмма – всё зависит от угла расположения поверхности.
На иллюстрации показан метод анизотропной фильтрации EWA (Ellipse Weighted Average) для текстурного отображения.
Уровень фильтрации определяется числом текселей, которые обрабатываются при вычислении конечного пикселя. При уровне 1x анизотропная фильтрация использует восемь текселей. На современных графических картах уровень фильтрации можно выставлять в драйвере. Максимальный уровень составляет 16x, однако производители не используют все промежуточные ступени. Самые распространённые уровни, это 2x (16 текселей), 4x (32 текселя), 8x (64 текселя) и 16x (128 текселей). При повышении уровня фильтрации вычислительная нагрузка тоже увеличивается.
На этом скриншоте разными цветами показаны mip-уровни. Слева используется трилинейная фильтрация. Справа – 16x анизотропная плюс трилинейная. Вы можете заметить, что уровень детализации LOD отодвигается далеко назад.
Анизотропная фильтрация всегда работает в паре с билинейной или трилинейной. Билинейный вариант вполне логично будет быстрее, однако он имеет один недостаток: заметные переходы между границами mip-уровней. Лучший результат получается при использовании более ресурсоёмкой трилинейной анизотропной фильтрации, когда переходы между mip-уровнями корректно просчитываются.
Гонка оптимизаций
Из нашего простого объяснения механизмов фильтрации текстур вы должны чётко понимать, что хорошая реализация фильтрации потребляет вычислительные ресурсы. Чем выше качество фильтрации, тем меньше становится частота кадров.
За прошедшие годы разработчики графических чипов, главным образом, ATi и nVidia, старались выжать дополнительную производительность из своих продуктов всеми возможными способами. Именно эту цель производители и ставят перед собой при разработке различных оптимизаций, однако сделать меньше не значит сделать лучше. В начале эпохи развития графических процессоров оптимизация вряд ли была необходима, поскольку вычислительной мощности просто не хватало для обеспечения фильтрации с приемлемой частотой кадров. Здесь вы можете вспомнить чип S3 Virge, который превращался из “ускорителя” в “замедлитель” при включении билинейной фильтрации.
Долгое время трилинейная фильтрация была роскошью, которая, впрочем, становилась всё более полезной при росте производительности 3D-чипов. После этого появилась анизотропная фильтрация, которая поначалу была доступна в очень небольших уровнях. Ситуация изменилась с выходом ATi Radeon 8500. ATi реализовала билинейную анизотропную фильтрацию, однако она была значительно оптимизирована. Впрочем, критики были не столь активны, ведь эта фильтрация позволяла получить существенно лучшее качество, чем чистая трилинейная фильтрация, а “настоящая” трилинейная фильтрация была попросту невозможна по причине низкой производительности.
К тому же, следует признать, что любой производитель волен выполнять оптимизации, или не выполнять их, если они не слишком сильно влияют на качество изображения.
Брилинейная фильтрация – просто фильтруем меньше
Брилинейная фильтрация представляет собой следующий шаг в сторону оптимизации. Это смешанный режим между трилинейной и билинейной фильтрациями. Или, другими словами, режим с меньшим количеством фильтрации. Область, в которой сходятся соседние mip-уровни и которая подвергается трилинейной фильтрации, попросту была уменьшена.
На иллюстрации видны различия между билинейной, брилинейной и трилинейной фильтрациями. Брилинейная фильтрация показывает оптимизации, внесённые nVidia с картой GeForce 6800 Ultra. Количество оптимизаций может различаться от одной карты к другой.
Подобный подход позволяет экономить вычислительную мощность. Что касается качества, то различия, на самом деле, крайне невелики – их можно обнаружить, только если сравнивать изображения, полученные с помощью полной трилинейной фильтрации.
Данный тип текстурной фильтрации был впервые осуществлён nVidia, чьи карты GeForce FX 5xxx выполняли именно его. Даже новые карты nVidia GeForce 6xxx выполняют такую же фильтрацию по умолчанию, однако nVidia отреагировала на критику и добавила в драйверы возможность отключения оптимизации.
Раньше ATi имела репутацию компании с более высоким качеством изображения на своих картах, что было обусловлено правильной трилинейной фильтрацией. Так оно и было до тех пор, пока не вышел Radeon 9600 (RV360). Этот чип стал тоже осуществлять брилинейную фильтрацию, хотя ATi намекала на адаптивный алгоритм. Драйвер определяет степень оптимизации, используя изменчивость mip-текстур. Новый чип ATi R420, также известный как Radeon X800, тоже использует эту оптимизацию.
Больше всего нас беспокоит то, что ATi не соизволила объяснить процедуру фильтрации. Обозреватели не заметили новую технологию фильтрации ATi, поскольку стандартные тесты качества фильтрации используют цветные mip-текстуры, на которых оптимизация не заметна. Дело в том, что драйвер переключается на полную трилинейную фильтрацию при использовании цветных mip-текстур.
Именно такую картинку даёт X800 в стандартных тестах качества изображения – с полной трилинейной фильтрацией. На самом деле, то есть в играх, картинка выглядит совершенно по-другому.
Эта особенность карт ATi была всё-таки обнаружена во время тестирования сайтом Computerbase. Обозреватели сайта обнаружили, что в игре Call Of Duty X800 даёт меньшую частоту кадров при использовании цветных mip-текстур, чем обычно. После этого было проведено сравнение качества изображения, и обозреватели обнаружили, что карта использует брилинейную фильтрацию. По крайней мере, с обычными текстурами.
Ниже мы приведём иллюстрации, которые использовал сайт Computerbase для доказательства оптимизации фильтрации ATi. Первый скриншот был сделан при билинейной фильтрации, а второй – при трилинейной. На них должны быть заметны существенные отличия при переходе между mip-уровнями. На 9800XT так оно и есть. Но на X800 мы наблюдаем лишь небольшую разницу – то есть используется брилинейная фильтрация.
Небольшие отличия от билинейной фильтрации – ATi X800 не использует полную трилинейную фильтрацию.
Значительные отличия от билинейной фильтрации – старая карта 9800XT обеспечивает полную трилинейную фильтрацию.
Ещё до получения официальной реакции ATi мы поговорили с ID Software, на чьём движке построена игра Call Of Duty.
Перед нами определённо “хитрость”, на которую сегодня идут все основные производители. Вместо полного смешения двух прилегающих mip-уровней здесь используется сэмплирование только одного mip-уровня, что позволяет уменьшить число сэмплов, примерно, с 8 до 6.
При этом мы получаем заметное увеличение производительности с минимальными визуальными отличиями. Но тогда драйверу приходится анализировать mip-уровни, чтобы скрывать этот трюк, – неудачное последствие. Если подобные возможности улучшения производительности не используются, то использование цветных mip-текстур в Q3 должно оказывать, практически, нулевое влияние на производительность. Джон Кармак |
Как мы видим, производительность движка Q3 при использовании цветных и обычных mip-текстур должна быть идентична, и тесты на карте nVidia 6800 это подтверждают. Но у Radeon X800 мы наблюдаем ухудшение производительности. А в UT2003/2004 ситуация вообще иная. Все карты показывают потерю производительности – просто здесь всё зависит от реализации движка. Приведём высказывание Epic:
xxx @ nVidia только что указала, что заполнение текстур постоянным значением цвета и альфы может привести к повышению количества пикселей, которые записываются в кадровый буфер (проходят альфа-тест), что влияет на производительность. Я полностью забыл об этом и, вероятно, постараюсь изменить код, чтобы отбросить канал альфа в движке следующего поколения 🙂 |
Несколько следующих тестов показывают, какой прирост производительности можно получить от реализации брилинейной фильтрации.
Карта GeForce 6800 Ultra показывает одни и те же результаты при использовании цветных и обычных mip-текстур, при включении и выключении трилинейной оптимизации. X800, в тоже время, получает немалый прирост с обычными текстурами.
Следует отметить, что при использовании цветных mip-текстур присутствуют некоторые области, которые не окрашены. В них драйвер ATi тоже выполняет оптимизацию. То есть разница между полной фильтрацией и оптимизированной фильтрацией у X800 будет ещё больше, чем показывают результаты с цветными mip-текстурами.
ATi приносит свои извинения и отказывается обсуждать оптимизацию фильтрации, поскольку на её реализацию подан патент. Но верно это или нет – мы сказать не можем.
Что более важно, в документации ATi оставляет впечатление о реализации полной трилинейной фильтрации, при этом обозревателям рекомендуется отключить оптимизации у конкурентов, то есть у GeForce 6800, чтобы обеспечить честное сравнение. В то же время, ATi рекомендует оценивать качество изображения X800 по цветным mip-текстурам – однако при этом в играх обеспечивается совершенно иное качество.
В одном из руководств по обзору Radeon X800 ATi заявляет о реализации полной трилинейной фильтрации и для доказательства рекомендует использовать стандартные инструменты по оценке качества с цветными текстурами, что совершенно не соответствует истине.
“Чтобы обеспечить честное сравнение…” ATi рекомендует отключить трилинейную оптимизацию у nVidia и заставить GeForce 6800 Ultra осуществлять полную трилинейную фильтрацию – хотя чип X800 не способен выполнять полную трилинейную фильтрацию с текущими драйверами.
Из презентации ATi во время Editors Day2 в Торонто. ATi говорит об уменьшении трилинейной фильтрации до уровня билинейной, но вполне очевидно, что здесь подразумевается брилинейная оптимизация линейки nVidia GeForce 5xxx. Маркетологи ATi всегда говорят о билинейной фильтрации у этих карт. Ни один из производителей не уменьшил трилинейную фильтрацию до полной билинейной… Пока.
ATi предложила ряд объяснений этой проблемы в разговорах с нами:
Вопрос Это на самом деле трилинейная фильтрация? Анди/Раджа (Andy/Raja), ATi Вопрос Анди/Раджа, ATi Вопрос Анди/Раджа, ATi |
Полный список вопросов и ответов можно прочитать здесь (на английском).
Как видим, утверждения ATi частично ошибочны. Полная трилинейная фильтрация математически определена, и поэтому её можно считать стандартом. По этой причине брилинейную или какую-либо другую оптимизированную фильтрацию нельзя считать “настоящей”. Мы не слишком понимаем, как ATi умудрилась сказать, что этот фильтр даёт более высокое качество, чем полный трилинейный. Более того, ATi уклонилась от ответа (вполне логично, с маркетинговой точки зрения), что они думают о результатах тестов из разных обзоров. Некоторые обозреватели отключали трилинейную оптимизацию nVidia GeForce 6800, как и рекомендует ATi. В наших тестах X800 трилинейная оптимизация у nVidia не отключалась, поэтому полученные значения являются верными, и их можно использовать для сравнения.
Понимание объяснений ATi зависит от вашей точки зрения. Однако факт заключается в том, что ATi X800 не может справиться с полной трилинейной фильтрацией, а nVidia GeForce 6800 обеспечивает, теоретически, лучшее качество фильтрации, по крайней мере, если отключить оптимизацию трилинейной фильтрации в драйвере. Также упомянем и тот факт, что качество картинки X800 не может быть оценено по тестам с цветными mip-текстурами. Поэтому то, что карта даёт хорошее качество в тестировании, верно лишь частично.
Однако ATi следует отдать должное за то, что оптимизация не слишком сильно ухудшает качество в играх – по крайней мере, у нас пока нет соответствующего примера. Но адаптивная природа оптимизации приводит к тому, что её очень сложно обнаружить. Даже линейку nVidia GeForce 5xxx не слишком сильно осудили за брилинейную фильтрацию, хотя критика, конечно, была. Но nVidia, в то же время, не скрывает использование этой фильтрации. И именно поэтому ATi заслужила большей критики. Также нам не очень понятно, насколько далеко заходит оптимизация ATi, то есть какой возможен минимальный уровень фильтрации, и ограничены ли оптимизации множественным отображением mip-текстур или они касаются чего-то ещё.
Ниже мы приведём официальный ответ ATi на эту проблему:
“Недавно возникли горячие дискуссии о наших алгоритмах трилинейной фильтрации.
Цель трилинейной фильтрации заключается в сглаживании переходов между mip-уровнями. До тех пор, пока эта цель достигается, нельзя говорить о “правильном” или “ошибочном” способе реализации фильтрации. Мы сделали наш алгоритм фильтрации более интеллектуальным, чтобы увеличить производительность без ущерба качеству изображения. Как обнаружили некоторые обозреватели, между нашей реализацией фильтрации в Radeon 9800XT и Radeon X800 можно показать различия. Однако эти различия могут быть видны только при условии вычитания кадра до и после полученного и усиления результата. Но никто так и не заявил, что различия делают одну реализацию лучше, чем другую. Наш алгоритм текстурной фильтрации на основе анализа изображения запатентован. Он определяет, насколько один mip-уровень отличается от следующего, и затем реализует нужный уровень фильтрации. То есть оптимизация применяется лишь в особых случаях – в частности, если mip-текстуры созданы с помощью прямоугольной фильтрации. Нетипичные случаи, когда каждая mip-текстура значительно отличается от других, не получают какой-либо оптимизации. Сюда можно отнести такие экстремальные случаи, как цветные mip-текстуры, и именно поэтому тесты с подобными текстурами дают отличающиеся результаты. Мы хотим, чтобы вы ясно понимали: мы не производим какого-либо определения запущенного приложения. Результаты просто показывают использование сложного алгоритма. Мы рекомендуем пользователям поэкспериментировать с изменением движка качества текстур с положения “Качество/Quality” в “Производительность/Performance” – вы получите значительный прирост производительности без влияния на качество изображения до самого крайнего положения движка, и даже тогда различия будут трудно заметны. Мы уверены, что мы даём игрокам лучшее качество изображения на каждом уровне производительности. Microsoft действительно установила некоторые стандарты текстурной фильтрации, и процесс сертификации WHQL компании включает расширенные тесты качества изображения для трилинейной фильтрации и множественного отображения mip-текстур. Драйверы CATALYST успешно прошли все эти тесты и, заметим, без применения нами определения запущенного приложения, хотя подобный шаг позволил бы скрыть низкокачественные алгоритмы от тестов. Наконец, ATi очень серьёзно подходит к качеству изображения, и мы уверены, что устанавливаем новые стандарты качества для всей индустрии. Мы не легко идём на изменения алгоритмов фильтрации. Сначала мы производим множество различных анализов качества изображения. Этот алгоритм уже используется больше года в наших продуктах Radeon 9600, и мы не получили никаких претензий по поводу качества картинки. Если кто-либо обнаружит какие-либо ухудшения качества в результате работы этого алгоритма, то мы предлагаем сразу же сообщить об этом нам. Если проблема действительно существует, то мы её решим”. |
Угловая оптимизация анизотропной фильтрации
Давайте перейдём к следующей главе в сегодняшних оптимизациях, а именно, к адаптивной анизотропной фильтрации. Подобный метод уже давно используется в картах ATi. nVidia тоже частично реализовала эту технологию на GeForce 6800. Здесь, опять же, главной целью является уменьшение вычислительной нагрузки. Поверхности получают различный уровень анизотропной фильтрации в зависимости от угла наклона к зрителю.
Скриншот показывает результаты анизотропной фильтрации 8x в Microsoft Refrast. Конечно, не идеально гладко по всем углам, но близко к этому.
Результаты ATi X800 с угловой оптимизацией. Только некоторые области получают анизотропную фильтрацию 8x. Большинство областей фильтруется на уровне 4x. GeForce 6800 демонстрирует схожее поведение.
Причины подобной фильтрации вполне благовидны. К примеру, если вы будете стоять перед стеной, то анизотропная фильтрация 16x вам не понадобится. С фильтрацией уровня 2x результат будет аналогичен. Поэтому мы можем реализовать оптимизацию, чтобы уменьшить вычислительную нагрузку, дабы вычислительная мощность не терялась на тех местах, где высокий уровень фильтрации не приводит к повышению качества. Если вы установите фильтрацию 16x в драйвере, то получите этот уровень только в определённых областях.
На практике подобный механизм работает хорошо. Однако в некоторых случаях, к примеру, когда игрок стоит перед неравномерным горным ландшафтом, можно заметить определённую потерю качества. Будет ли это для вас критично или нет – дело вкуса. Но не забывайте, что вы получаете существенно более высокую частоту кадров. И было бы хорошо, если пользователь получил бы возможность отключения этой оптимизации.
Более того, уровень анизотропной фильтрации зависит от расположения и расстояния поверхности от наблюдателя.
Оптимизация ступени и драйвер
Ещё один вид оптимизации фильтрации, который пока применялся, по большей части, ATi, называется оптимизацией ступени (stage optimization). Здесь ATi применяет трилинейную фильтрацию (или брилинейную фильтрацию на 9600/X800) только к первой ступени текстуры (0). Ступени 1-7 фильтруются чисто по билинейному методу.
Во многих играх это отнюдь не критично, поскольку текстуры на верхних ступенях являются либо картами освещения, либо картами неровностей, и им не так и нужна полная фильтрация. Но некоторые игры, в частности, Unreal Tournament, – случай совершенно иной. UT использует не только базовую текстуру на ступени 0, но также и карты деталей с высоким разрешением на следующих ступенях. Поэтому в UT ATi экономит определённую вычислительную мощность, и нам следует ожидать потери качества изображения.
Оптимизация ступени включается каждый раз, когда анизотропная фильтрация активируется через меню в драйверах ATi. Так и следует делать в большинстве игр, поскольку лишь немногие из них позволяют выставить анизотропную фильтрацию внутри себя. Как вы можете заметить, X800 Pro достигает 12% прироста производительности в UT2004 благодаря этой оптимизации (плюс неизвестный прирост из-за брилинейной фильтрации вместо трилинейной).
Однако драйвер демонстрирует подобное поведение только при насильственном включении анизотропной фильтрации в панели управления драйверов. Если вы оставите эту настройку на выбор приложения (by application), то драйвер обеспечит полную – или брилинейную на X800 – фильтрацию ко всем ступеням текстуры. По крайней мере, так утверждает ATi. Поскольку драйвер выбирает тип фильтрации адаптивно, здесь вполне вероятны и дальнейшие оптимизации, которые использование цветных mip-текстур выявить не позволяет.
Очень немногие игры позволяют пользователю выставить анизотропную фильтрацию внутри себя. Для них единственным способом является включение анизотропной фильтрации через меню драйвера. Даже UT200x позволяет указать эту опцию только через ручное редактирование файла ut200x.ini.
nVidia также стала использовать оптимизацию ступени после выхода драйверов 51.xx для карт GeForce 5xxx. Карты применяют анизотропную фильтрацию, максимум, 2x к текстурным ступеням 1-7, если анизотропная фильтрация насильственно включена в драйвере, – независимо от того, какой её уровень выбран.
Бесконечные оптимизации
Существуют и другие оптимизации фильтрации. Но мы слишком сильно углубимся в детали, если пожелаем их рассматривать. Если эта тема вам интересна, то мы рекомендуем обратиться к статье на сайте 3DCenter (на английском). Там вы сможете более детально разобраться в оптимизации фильтрации.
В нашей статье мы рассмотрели широко известные современные оптимизации фильтрации. Оптимизации вычисления программ-шейдеров, которые являются горячей темой для обсуждения с прошлого года, – совершенно иная проблема. В этих оптимизациях положение nVidia неприглядно, поскольку многие программы попросту полностью заменяются другими, которые дают худшее качество в угоду производительности. Причиной подобного подхода является низкая производительность программ DirectX 9 на картах GeForce FX 5xxx. Пока существует лишь несколько игр с настоящей поддержкой DX9, и там можно обнаружить ухудшение качества вычислений программ-шейдеров. Будем надеяться, что с выходом новой линейки GeForce 6xxx, которая в этом отношении работает быстрее, проблема оптимизации программ уйдёт в прошлое. Хотя ATi и nVidia, конечно же, будут продолжать производить оптимизации и здесь. Как мы считаем, эта оптимизация вполне оправданна до тех пор, пока результат будет получаться хорошим, а возможности графического процессора будут использоваться лучше. Впрочем, это тема для совершенно другого разговора, не менее противоречивого.
Заключение
Все оптимизации фильтрации, которые мы обсудили в этой статье, призваны увеличить производительность графических карт без заметного ухудшения качества изображения. Но слово “заметное” здесь является субъективным – в зависимости от используемой оптимизации, потерю в качестве при близком рассмотрении обнаружить всё же можно. Даже если на скриншотах картинка выглядит нормально, то в игре всё может быть совершенно иначе. Могут появиться такие эффекты, как муар или мерцание, которые на скриншотах незаметны.
В случае графических карт среднего и нижнего ценовых диапазонов потребитель, конечно же, выигрывает от оптимизаций фильтрации, поскольку “честная” фильтрация слишком сильно замедлила бы графический чип. Пользователь получает возможность игры в высоких разрешениях или может хоть как-то включать фильтрацию без превращения игры в слайд-шоу. Итог таков, что потребителю приходится заплатить за это качеством картинки.
С новыми картами, типа Radeon X800 Pro/XT и GeForce 6800 Ultra/GT – для богатых энтузиастов и геймеров, ситуация совершенно иная. На них оптимизации не дают пользователю новых возможностей. Он просто получает пониженное качество картинки, хотя карта обладает достаточной мощностью, чтобы обеспечить максимальное качество с великолепной частотой кадров. Нас не оставляло впечатление, что оптимизации фильтрации у новых топовых моделей карт реализованы не для того, чтобы дать пользователям новые возможности, а для того, чтобы победить карту конкурента в таблице тестов, что необходимо для престижа компании. Но готов ли пользователь заплатить за это $400-$500 – вопрос совершенно иного рода. nVidia, вполне очевидно, понимает это и позволяет включать полную трилинейную фильтрацию на новейших моделях карт. Впрочем, из-за ошибки в последней бета-версии драйвера 61.11 эта опция не работала… Будем надеяться, что это на самом деле ошибка, и опция вновь заработает в финальной версии драйвера.
“До тех пор, пока эта цель достигается, нельзя говорить о “правильном” или “ошибочном” способе реализации фильтрации…” (Спасибо Worth1000.com.
Будет ли продолжение? Возможно, поскольку спор по поводу недавно открытой брилинейной фильтрации на картах Radeon 9600 и X800 не утихает. ATi следует отдать должное за то, что качество картинки карт визуально не страдает из-за этой фильтрации. По крайней мере, у нас нет примеров, говорящих об обратном. Пока брилинейная фильтрация проявляет себя при искусственно созданных лабораторных условиях. В то же время, ATi не позволяет включить полную трилинейную фильтрацию для упомянутых карт, будь она адаптивной или нет. Из-за новой фильтрации значения производительности в тестах не демонстрируют всего настоящего потенциала X800, поскольку значения FPS получены после оптимизации, влияние которой на скорость оценить сложно. Да и слово “адаптивная” оставляет горькое послевкусие. ATi не предоставила нам информацию о механизме работы драйвера и много раз заявляла, что карта даёт полную трилинейную фильтрацию. Лишь после упомянутого разоблачения ATi признала, что фильтрация оптимизирована. Будем надеяться, что в других местах драйвера подобной “адаптивности” нет.
Впрочем, производители медленно, но уверенно, двигаются к тому моменту, когда уровень терпимости будет преодолён. “Адаптивность” или определение запускаемого приложения не позволяют тестовым программам показать действительную производительность карты в играх. Качество картинки в игре может отличаться от одного драйвера к другому. Производители могут свободно развлекаться с драйвером, в зависимости от того, какая производительность нужна отделу маркетинга на данный момент. Ну, а право потребителя знать, что он, собственно, покупает, здесь уже никого не интересует. Всё это оставлено средствам массовой информации – пусть они выполняют свою образовательную миссию. И трюки с фильтрацией, которые мы обсудили в нашей статье, являются лишь самыми известными такими случаями. Что ещё скрыто от нашего внимания, остаётся лишь догадываться.
Каждый производитель решает сам, какой уровень качества изображения он будет обеспечивать стандартно. Однако производителям следует документировать используемые оптимизации, особенно если они скрыты от известных тестов, как в свежем примере с ATi. Решение очевидно: дайте возможность выключать оптимизации! Тогда потребитель сможет сам решать, что ему важнее – больше FPS или лучшее качество. На Microsoft, как на третейского судью, рассчитывать тоже не приходится. Тесты WHQL не позволяют определить многие вещи, да и их можно легко обойти: значение слова “адаптивная” вам знакомо?
Известные на сегодня оптимизации фильтрации | ||
ATi | nVidia | |
Трилинейная оптимизация |
R9600 X800 |
GF FX5xxx (GF 6xxx)* |
Угловая оптимизация анизотропной фильтрации |
R9xxx X800 |
GF 6xxx |
Адаптивная анизотропная фильтрация |
R9xxx X800 |
GF FX5xxx GF 6xxx |
Оптимизация ступени | R9xxx X800 |
GF FX5xxx |
Оптимизация LOD | R9xxx X800(?) |
В целом, подобные дискуссии имеют свои преимущества: покупатели и, возможно, OEM-клиенты начинают прислушиваться к проблеме. Мы не сомневаемся, что мания необузданных оптимизаций будет продолжаться. Однако в тёмном царстве появился луч света, что наглядно продемонстрировала nVidia со своей трилинейной оптимизацией. Будем надеяться и на следующие подобные шаги!