![]()
Прекрасно видно, что на ряде углов зрения четкости у RADEON 8500 как ни бывало. Не это ли и является причиной вычислительной дешевизны анизотропии от ATI? А вот у NVIDIA GeForce3 и GeForce4 все "честно", если можно, конечно, считать способы реализации этой функции честными и нечестными. Плохо, что производители не предоставляют пользователям сознательного выбора: использовать честную анизотропию с большими потерями или "аппроксимацию", но более дешевую. Пока такой выбор может быть осуществлен только косвенно - выбором карты. И все же нельзя напрямую оперировать понятием "честности" в отношении анизотропии. Если трилинейку мы можем достаточно строго оценивать, поскольку ее алгоритм однозначен и хорошо описан, то технология осуществления анизотропной фильтрации не разглашается производителем, а базовых подходов для выполнения такой фильтрации известно как минимум пол десятка. И это не считая нюансов реализации! Давайте подробно остановимся на реализациях этой функции у двух компаний. Различия подходов NVIDIA и ATI к практической реализации анизотропной фильтрации
Если билинейная и трилинейная фильтрация достаточно четко опеределены математически (что, впрочем, не
помешало NVIDIA в свое время называть в некоторых документах трилинейной фильтрацией некий метод
аппроксимации - дизеринг значений из разных MIP уровней), то термин "анизотропная фильтрация" не подразумевает
каких-то конкретных алгоритмов ее реализации. Подходы NVIDIA и ATI в этом вопросе существенно разнятся.
Давайте (схематически) познакомимся с ними:
NVIDIA поступает довольно прямолинейно. На схеме показано, как происходит в пространстве текстуры выборка билинейных семплов в процессе анизотропной фильтрации. В зависимости от установок качества фильтрации и угла наклона поверхности относительно плоскости экрана, выполняется от одного до четырех раз стандартная би- (или три-) линейная фильтрация для точек, лежащих на прямой, проведенной по делящей проектируемый из экрана в поверхность текстуры пиксель вдоль его длинной стороны (на схеме изображена стрелкой). Полученные таким образом значения (синие кружки) усредняются - это и будет результатом фильтрации. Каждое значение основывается на четырех ближайших дискретных значениях текстуры (прямоугольники) и может иметь собственные независимые координаты. Такой подход годится для произвольно ориентированных текстур, но требует изрядной производительности - для заметной части непараллельных экрану треугольников в несколько раз возрастает число выбираемых текстурных семплов, и, соответственно, время закраски.
Подход ATI более ограничен, но и более производителен:
Как мы видим, значения выбираются цепочкой, причем она может быть ориентирована в плоскости текстуры строго горизонтально или вертикально. Т.е. для близких к ортам значений проекционного вектора (стрелка на схеме) качество фильтрации будет высоким, но по мере его поворота эффект будет сходить на нет, вплоть до полной потери смысла в использовании такого метода. В реальных приложениях это выразится следующим образом - на стенах или потолках фильтрация будет работать на все сто, в то время как на наклоненных под непрямыми углами поверхностях ее результат будет все менее и менее заметен по мере приближения к критическому углу в 45 градусов (что мы и наблюдали выше). Но, с другой стороны, подобный подход гораздо более выгоден с вычислительной точки зрения. Во-первых, мы выбираем организованные цепочки размером от 2хN точек текстуры (на схеме квадратики), которые можно эффективно выбрать за N/2 тактов с помощью стандартных, рассчитанных на билинейную фильтрацию текстурных блоков. Затем, мы фильтруем значения (на схеме кружки), используя каждый раз одни и те же смещения относительно дискретных точек исходной текстуры. Подобная операция может быть выполнена за один такт специальной схемой из десяти умножителей, встроенной в текстурный блок, благо само значение параметров интерполяции вычисляется один раз и остается неизменным для всех 1..5 вычисляемых точек. Кроме того, мы можем существенно ускорить этот и так достаточно производительный алгоритм, заранее вычислив специально сжатые по осям варианты текстуры (т.н. RIP mapping). Суммируя вышесказанное, отметим, что подход NVIDIA требует большее время на вычисление результата, но и является более "честным", одинаково хорошо справляясь с объектами, расположенными под любыми углами наклона, а не только строго горизонтально или вертикально по отношению к наблюдателю. В методе ATI заложено свое рациональное зерно - большинство современных игр изобилуют в основном горизонтальными и вертикальными поверхностями. Вернемся к GeForce4 и его анизотропии. По сути, мы имеем тот же способ, какой увидели у GeForce3, то-есть три уровня, за которыми может скрываться максимально возможное для каждого уровня число выборки текстурных сэмплов для реалиазации анизотропной фильтрации (Level2 - 8, Level4 - 16, Level8 - 32 сэмпла). В наших обзорах по GeForce3 вы сможете подробно узнать, чем отличаются эти уровни в плане качества, да и падения по скорости имеет смысл изучить :-).
Давайте посмотрим, что дает потенциальным пользователям GeForce4 анизотропия в плане производительности:
Quake3
Return to Castle Wolfenstein
3DMark2001, Game1 Low details
3DMark2001, Game2 Low details
3DMark2001, Game3 Low details
3DMark2001, Game4
Думаю, что такого большого количества тестов достаточно для того, чтобы получить печальное
представление о том, как такая функция, как анизотропия, может "убить" даже сверхмощный ускоритель. Важно отметить, что пока по неясным причинам мы можем наблюдать гораздо более сильное падение
производительности у GeForce4, чем было у GeForce3. Возможно, что виноваты еще не доведенные до ума драйверы,
возможны и иные причины. Но пока факт остается фактом: Level8 просто уничтожает все преимущества
GeForce4 в плане скорости перед GeForce3 Ti 500. Возникает вопрос - а можно ли хотя бы при помощи Level4
получить почти такое же качество, как у RADEON 8500? Ответ - да! Потери относительно Level8 будут, но
получить достаточно высокий уровень качества возможно при помощи изменения LOD BIAS в отрицательную сторону.
К сожалению, до последнего времени существовала возможность менять этот параметр только в Direct3D, и то
только через твикеры, например RivaTuner. В 27.* версиях драйверов
появилась такая же возможность и в OpenGL, но, к сожалению, пока только при помощи правки в Registry (автор
RivaTuner в ближайшее время выпустит новую версию этой программы, обладающую уже возможностями изменения
LOD BIAS в OpenGL). Давайте посмотрим, что нам даст смещение LOD BIAS до значения -1 на примере игры
Serious Sam: The Second Encounter.
Как мы видим, эффект достигнут! Побочными явлениями можно назвать появление муара, того самого шума текстур ("песка"), который обычно и вызывается понижением LOD BIAS (т.е. смещением MIP-уровней), но примерно то же самое мы можем видеть и у RADEON 8500 при активной анизотропии (да, разумеется, когда мы говорим про эту функцию у RADEON 8500, то имеется ввиду максимально возможный уровень анизотропной фильтрации). Здесь падение велико, но уже не столь катастрофично. А вот при степени анизотропии Level2 понижение LOD BIAS уже не помогает, хотя качество Level4 при LOD BIAS = 0 и достигается. АНТИ-АЛИАСИНГ (АА)Эта функция борьбы с "лестницами по краям объектов", называемыми артефактами алиасинга, также имеет давнюю и сложную историю. Дело в том, что у АА аппетиты еще выше, чем у анизотропии (если имеем дело с существенными уровнями АА, дающими заметное визуальное улучшение картинки). Как известно еще из материалов по GeForce3, год назад NVIDIA дала жизнь новому методу АА - Quincunx, который имеет свои плюсы и минусы. К плюсам относится быстрота этого АА, несмотря на приличный уровень сглаживания; к минусам относится "замыливание" текстур во многих случаях, что приводит к размытию картинки в целом. Поэтому рост производительности GeForce4 относительно предыдущего продукта может сделать более востребованным следующий уровень АА (4х), отличающийся великолепным качеством. Давайте посмотрим на качество двух наиболее интересных видов АА у GeForce3 Ti 500 и GeForce4, и сравним их.
![]()
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||