Антиалиасинг сегодня

24.03.2002


Введение

Как следует из приставки "анти", эта технология призвана бороться с алиасингом. Что же это такое? Не так давно, слова "алиасинг" и "анти-алиасинг" были совершенно неизвестны широкой общественности. А между тем, проблема алиасинга стояла очень давно. Чтобы понять, что такое алиасинг, необходимо понять самый общий принцип вывода изображения на экран монитора.

Экран состоит из сотен тысяч очень мелких квадратов (обычно, называемых точками или пикселями) - примерно как бумага в клетку, только гораздо мельче. Каждый квадрат (точка, пиксель, клетка) может быть закрашена только одним цветом. Так, например, когда говорят, что установлено разрешение 1024х768 True Color, это значит, что по горизонтали на экране помещаются 1024 точки, а по вертикали - 768 точек, т.е. всего на экране 1024*768=768 432 точек, каждая из которых может быть закрашена любым из доступных цветов (в True Color их 16 777 216, в High Color - 65 536).

Антиалиасинг (antialiasing) сегодня

Обратите внимание, что рисунок, состоящий из таких больших точек, выглядит странно. Собственно, это и есть алиасинг - на краях букв видны "ступеньки". Самое очевидное решение проблемы - уменьшить точки. К сожалению, экран монитора имеет очень существенный недостаток: он не позволяет сделать точки настолько малыми, чтобы взгляд не мог их различить. Для сравнения: хороший принтер может печатать изображения с разрешением 2048х2048 точек на дюйм и больше, в то время, как лучшие мониторы ограничены разрешением около 100х100 точек на дюйм.

Разработчики ускорителей, долгое время, основной задачей ставили покорение все новых и новых разрешений, пока не были остановлены уже упомянутыми выше ограничениями мониторов.

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

На первый взгляд, задача кажется невыполнимой: из цельных кирпичей круглое колесо не сделать никак! Но оказалось, что решение все-таки есть. При помощи плавных переходов цветов на изображении, можно очень существенно сгладить "ступеньки", т.е. как бы компенсировать недостаток пространственного разрешения цветовым. Это стало всем очевидно еще с появлением видеоадаптера VGA, поддерживающим 2 новых разрешения - 640х480 16 цветов и 320х200 256 цветов. Самое интересное в том, что многие игры работали в разрешении 320х200 и имели на порядок более качественную графику, чем игры, использующие режим 640х480! Все дело в том, что большее количество цветов (256 против 16) позволило сделать плавные переходы между цветами и не только компенсировать потери в разрешении, но и получить существенно более качественную графику и даже показывать настоящие фотографии, вместо простенькой "мультяшной" графики в режиме 640х480. Основано это на особенности зрения человека, которое стремится сгладить плавные переходы между близкими цветами, усиливая эффект.

Именно на таком принципе борьбы с алиасингом основаны все современные методы анти-алиасинга, которые сейчас начинают использоваться в игровых ускорителях.



Методы

Общие подходы.

Сглаживание основывается на том, что каждый пиксель разбивается на несколько субпикселей. Цвет каждого пикселя определяется усреднением по какому-либо закону цветов всех субпикселей, которые находятся внутри пикселя. При этом, хотя физически разрешение остается прежним, эффективное разрешение значительно повышается.

Два наиболее часто применяемых подхода - это "Суперсэмплинг" и "Мультисэмплинг". Оба они основаны на том, что цвет каждого пикселя вычисляется путем смешивания цветов субпикселей (сэмплов). Но сэмплы в этих методах генерируются по-разному.

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

Мультисэмплинг - гораздо более хитрый и интеллектуальный метод сглаживания. Правильнее это называть даже не метод, а скорее инструмент. Идея, по сути, очень проста: зачем просто так тупо вычислять N субпикселей для каждого пикселя? Ведь, уже рассчитанные субпиксели, во многих случаях, можно использовать несколько раз, для формирования не одного, а нескольких результирующих пикселей. С другой стороны, в некоторых участках изображения, сглаживание не требуется вовсе, так зачем рассчитывать их по нескольким субпикселям? Достаточно и одного. И, наоборот, в других участках нужно очень хорошее качество сглаживания и там можно рассчитать очень много субпикселей. Этот инструмент позволяет не только значительно сэкономить ресурсы ускорителя, но и получить лучшее качество сглаживания! Этот инструмент может использоваться как угодно и, качество сглаживания и скорость зависят от конкретной реализации, которую выбрал разработчик ускорителя или игры.

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

Текстура - это рисунок, имеющий определенное разрешение, допустим 256х256 точек. Если он накладывается на большой (или близкий) объект, занимающий область примерно 256х256, то все в порядке. А вот что делать, если объект занимает область, намного меньшую, чем разрешение текстуры, например 128х128? В этом случае, на один реальный пиксель приходится 4 текселя (так называется один пиксель текстуры) и физического разрешения не хватает для вывода текстуры. В обычном режиме, ускоритель снижает качество (разрешение) текстуры. Эта техника называется LOD (Level Of Detail) Biasing. К сожалению, она далеко не идеальна: текстуры упрощаются гораздо больше, чем необходимо потому, что метод применяется для всех текстур сразу, на определенном расстоянии от экрана, без учета размера объектов, на который они наложены и без учёта их разрешения. К счастью, уровень LOD Biasing можно изменять, т.е. текстуры с увеличением расстояния от наблюдателя будут упрощаться сильнее или слабее. Если LOD Biasing уменьшить, то текстуры будут упрощаться слабее, т.е. их четкость на удалении будет намного выше. Но, если слишком занизить Biasing, то на удаленных объектах появляется артефакт, называемый "дрожание текстур", "шум текстур", "песок" и пр. Выглядит это так: пиксели как будто разбросаны и явно находятся не на своем месте, причем, во время движения сцены, пиксели хаотично прыгают на новые места, в результате чего, на удаленных текстурах заметен шум, немного напоминающий то, что мы видим на экране телевизора после того, как канал прекратил свое вещание. Как я уже упомянул выше, этот артефакт вызван тем, что текстура имеет большее разрешение, чем область экрана, отведенная для ее изображения.

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

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

Суперсэмплинг

Этот метод был предложен на рынке игровых ускорителей самым первым. Его поддерживала еще легендарная Riva TNT и более древние ускорители (правда, увидеть его можно было не во всех играх, а только в тех, которые сами вызывали необходимые функции ускорителя). Как мы уже говорили выше, он рассчитывает изображение в повышенном разрешении, а затем уменьшает его до результирующего, используя для вывода каждого пикселя несколько рассчитанных значений - субпикселей.

Вот как это выглядит на практике, когда виртуальное разрешение в два раза выше итогового (видимого на экране монитора) по горизонтали и вертикали:

Антиалиасинг (antialiasing) сегодня

Один результирующий пиксель состоит из четырех субпикселей. Его цвет определяется усреднением значений этих четырех виртуальных субпикселей.

Несмотря на то, что метод давно реализован, по причине огромного падения скорости (в рассмотренном нами случае - примерно в четыре раза!), практически никакого распространения он не получал, до сравнительно недавнего времени - начала 2000 года. Именно тогда появились достаточно мощные ускорители, такие как NVIDIA GeForce2 GTS и ATI Radeon256.

NVIDIA GeForce256, GeForce2

В новых драйверах Detonator, серии 5.хх, NVIDIA раньше конкурентов реализовала возможность принудительного включения анти-алиасинга, в любых трехмерных играх, на всех видеокартах семейства GeForce. Это значит, что теперь от игры больше не требовалось, чтобы она сама включала анти-алиасинг: теперь это, при желании пользователя, делал драйвер.

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

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

Более подробно об этом можно почитать в нашей статье, посвященной суперсэмплингу.

ATI Radeon256

Вскоре, после выхода GeForce2 GTS, ATI выпустила достойный ответ. Это был ускоритель Radeon256, составивший серьезную конкуренцию GeForce2. Естественно, не была обойдена вниманием ставшая тогда очень модной функция анти-алиасинга. ATI никак не усовершенствовала стандартную реализацию и, точно так же, ввела принудительное включение полноэкранного сглаживания в любых играх, поэтому нет смысла рассматривать ее отдельно (все, выше сказанное о суперсэмплинге, верно и для Radeon256).

Мультисэмплинг

А вот этот инструмент, применяемый для борьбы с алиасингом, является настоящей новинкой на рынке игровых ускорителей. Достаточно спорный вопрос, где он был применен впервые. Первый метод, который условно можно назвать мультисэмплингом, это анти-алиасинг, предложенный фирмой 3dfx и, реализованный ею, также в 2000 году. Хотя официально он назывался Rotated Grid Super Sampling, он имел очень серьезные отличия от использовавшегося конкурентами простого суперсэмплинга. Продукт назывался Voodoo5 и имел один из самых удачных методов сглаживания среди всех, созданных на данный момент. Всякому его дальнейшему развитию и распространению положила конец безвременная кончина разработчика Voodoo5 - фирмы 3dfx.

Другой вид сглаживания, на основе мультисэмплинга, предложила NVIDIA в своем очередном поколении продуктов GeForce3, а затем немного доработала его, к выходу GeForce4.

ATI также не осталась в стороне. В ответ на семейство GF3, она выпустила очень серьезный продукт, помимо всего прочего, поддерживающий фирменный метод анти-алиасинга, альтернативный подходу NVIDIA.

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

NVIDIA GeForce3, GeForce4

В начале 2001 года NVIDIA выпустила на рынок новый ускоритель, приятно удивляющий количеством новых и усовершенствованных функций. Одной из них был новый метод полноэкранного сглаживания, называемый High-Resolution AntiAliasing (или просто HRAA). Вряд ли можно утверждать, что его качество превосходит качество традиционного суперсэмплинга, но скорость была очень и очень серьезно увеличена, что было направлено на решение главной проблемы анти-алиасинга, которая не снята до сих пор: падение скорости от включения этой функции часто так велико, что вместо нее можно увеличить разрешение, поставить максимальные настройки графики и иметь при этом большую скорость. Именно поэтому, некоторые люди, скептически относятся к анти-алиасингу, вообще не видя смысла в его применении в играх. Разберемся в принципах работы нового метода сглаживания.

Основная идея метода NVIDIA, позволившая столь существенно поднять скорость этой функции состоит в том, что сглаживание делается только на краях треугольников (полигонов) и не делается внутри них или за их пределами. Логика здесь проста: алиасинга не бывает внутри треугольников - с пикселизацией текстур справляются билинейная или анизотропная фильтрации. Алиасинга не бывает и за пределами всех треугольников, потому, что где нет треугольников, там нет и объектов, на которых можно наблюдать "лестничный эффект". То есть, ускоритель был освобожден от значительной части работы, связанной со сглаживанием всего изображения полностью, и делал сглаживание только там, где есть алиасинг.

Выгода от такого решения очевидна: серьезный прирост в скорости. Каковы же недостатки? Если вы помните, выше, в начале раздела, я рассказывал о том положительном влиянии, которое оказывает полноэкранное сглаживание на текстуры, значительно улучшая их качество. Так вот: HRAA не оказывает на текстуры никакого влияния вообще, ни положительного, ни отрицательного. Эта функция на 100% соответствует своему названию, специализируется исключительно на борьбе с эффектом алиасинга и ничего больше не делает (в отличие от суперсэмплинга, качественно сглаживающего все изображение без исключений).

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

Рассмотрим доступные режимы анти-алиасинга и подробности работы каждого:


Отсутствие анти-алиасинга.

Каждому пикселю соответствует один сэмпл (или субпиксель). Этот режим вряд ли требует комментариев. На рисунке показаны 4 пикселя. Номерами обозначены субпиксели (в дальнейшем, если номера одинаковы, то это один и тот же сэмпл, записанный несколько раз, если нет - то это разные сэмплы).

Антиалиасинг (antialiasing) сегодня


Анти-алиасинг 2x (1х2).

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

Антиалиасинг (antialiasing) сегодня

Здесь и далее, на рисунке, зеленой линией, обозначена граница между двумя полигонами. Сэмплы, на основе которых рассчитывается цвет пикселя, изображены маленькими кружками. Один и тот же сэмпл отображается одним цветом.


Анти-алиасинг Quincunx.

Этот режим требует особых пояснений.

Проще всего это показать на примере "из жизни": у человека есть два рубля, а он хочет пять. Как это сделать проще всего? Естественно, стащить у соседей (что, конечно, будет неизбежно наказано). Но, не будем углубляться в криминал, а вернемся к нашему режиму.

В режиме Quincunx, на один пиксель, как и в предыдущем режиме, приходится два субпикселя. Рассчитываются они аналогично предыдущему режиму. Но, для формирования пикселя используются не только свои законные два сэмпла, но еще три сэмпла, "позаимствованных" у трех соседних пикселей. То есть, практически без потерь скорости, пиксель формируется на основе пяти сэмплов! Отлично, но как мы уже говорили выше, воровство неизбежно наказывается. Подобное заимствование всегда приводит к банальному размазыванию изображения, эффекту близорукости.

Конечно, эти пять субпикселей не просто усредняются, это привело бы к слишком сильному размазыванию (на два своих субпикселя приходилось бы три чужих!). Усреднение происходит по определенному закону, где влияние на конечный результат своих сэмплов значительно выше, чем влияние позаимствованных. Тем не менее, несмотря на неплохое качество сглаживания алиасинга, изображение сильно портится общей размазанностью.

Антиалиасинг (antialiasing) сегодня

Здесь, штриховой линией выделены сэмплы, используемые для формирования верхнего левого пикселя.


Анти-алиасинг 4x (2x2).

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

Однако режим 2х2 не ограничен двумя честными сэмплами на пиксель. Так, например, если в один пиксель попадут четыре полигона (что, конечно, весьма маловероятно), то будут честно рассчитаны 4 субпикселя (по одному на каждый) и честно смешаны для получения результирующего цвета также, как делает суперсэмплинг в режиме 2х2.

Антиалиасинг (antialiasing) сегодня


Анти-алиасинг 4x (2х2) по девяти сэмплам.

Этот режим - аналог Quincunx, но только рассчитывающий четыре своих субпикселя (точно также, как при работе обычного режима 2х2) и "заимствующий" пять чужих, как это показано на рисунке. Достоинства и недостатки этого метода аналогичны Quincunx, но, поскольку доля честных сэмплов стала больше, размазанность изображения практически незаметна, а качество сглаживания повышается.

К сожалению, как и в случае с Quincunx, скорость работы этого метода заметно ниже аналогичного, "честного" метода - в данном случае 2х2.

Антиалиасинг (antialiasing) сегодня


Анти-алиасинг 4XS.

После выхода последнего, на сегодняшний день, ускорителя, анти-алиасинг NVIDIA приобрел, наконец, модное название: Accuview. Хотя, сам по себе, он практически не изменился. В драйверах был добавлен новый режим анти алиасинга - 4XS, который в закладках драйвера можно включить только при наличии карты на GeForce4, а через скрытые настройки - на любой карте семейства GeForce3. Если вы не являетесь счастливым обладателем карты на GeForce4, а всего лишь скромный обладатель GeForce3, то для включения этого режима придется либо залазить в реестр, либо просто не забывать, своевременно скачивать последние версии RivaTuner.

Суть нового режима анти-алиасинга в совместном использовании мультисэмплинга и суперсэмплинга для увеличения качества изображения. Проще всего это представить так: по горизонтали изображение сглаживается методом мультисэмплинга 1х2. Точно также, пиксель по горизонтали состоит из двух сэмплов, имеющих одинаковый цвет, если не находятся на краю полигона и два разных цвета, если на краю. Но, по вертикали, пиксель состоит не из одного такого блока из двух сэмплов, как режим мультисэмплинга 1х2, а из двух. Результирующий цвет пикселя определяется так: сначала находятся результирующие цвета верхнего и нижнего блока из двух сэмплов, затем они смешиваются. В итоге, пиксель рассчитывается на основе четырех сэмплов, точно также как и в режиме 4х. Но, в отличие от последнего, 4XS рассчитывает больше честных сэмплов и меньше использует один и тот же рассчитанный сэмпл (не более двух раз, в то время как 4x - до четырех раз).

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

Очевидно, что метод 4XS обеспечивает более качественное и полное сглаживание, чем режим 4x. Кроме краев полигонов он честно сглаживает по двум сэмплам все текстуры. А самое приятное заключается в том, что этот режим работает с той же скоростью, что и обычный 4x.

Антиалиасинг (antialiasing) сегодня


3dfx Voodoo 5

До сих пор мы рассматривали методы сглаживания, в которых сэмплы располагаются упорядоченно, в виде прямой упорядоченной решетки, подобных клеточной бумаге. Недостаток подобной техники в том, что при сравнительно небольшом количестве сэмплов (от четырех до девяти на пиксель), которые используются в современных ускорителях для формирования пикселя, очень плохо сглаживаются линии (границы полигонов), близкие к вертикальным или близкие к горизонтальным, т.е. угол наклона которых относительно прямых составляет всего 10-15 градусов. Это связано с тем, что такой "почти вертикальный" или "почти горизонтальный" край треугольника в половине случаев проходит между двумя пикселями и потому, сглаживание никак его не затрагивает:

Антиалиасинг (antialiasing) сегодня


Решить эту проблему можно двумя способами:

  1. Все больше увеличивать количество сэмплов, на основании которых формируется пиксель. Этот способ снижает вероятность того, что край полигона пройдет между двумя пикселями. Это катастрофически скажется на производительности и, к тому же, не решит проблему на 100%.
  2. Изменить расположение сэмплов, то есть исказить обычную прямую решетку.

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

Фирма 3dfx предложила метод сглаживания, просто поворачивающий эту решетку на 20-30 градусов.

Антиалиасинг (antialiasing) сегодня


В результате линии, близкие к прямым, сглаживаются очень даже неплохо. К сожалению, проблему этот метод не снимает, так как линии, имеющие наклон около 30-45 градусов, точно также могут проскочить между двумя пикселями, не попав ни в один из них, следовательно, они будут сглаживаться очень плохо. Однако, по многим оценкам, на таких линиях алиасинг гораздо менее заметен, чем на линиях, близких к прямым. Поэтому, такая повернутая решетка, в большинстве случаев все-таки предпочтительнее, чем прямая.

Рассмотрим метод 3dfx. Он называется Rotated Grid Super Sampling (в дальнейшем RGSS). Основывается на технологии 3dfx T-Buffer, позволяющей рассчитать сразу четыре разных кадра, а потом их смешивать для получения широкого набора эффектов. Нас сейчас интересует только один из этих эффектов - полноэкранное сглаживание.

Ускоритель Voodoo5 - первый и единственный, поддерживающий технологию T-Buffer, а значит и RGSS. Карта снабжена двумя чипами VSA-100, каждый из которых может рассчитать и хранить один или два кадра. В результате, мы имеем два режима анти-алиасинга: 4x и 2x.


Анти-алиасинг 4х.

В отличие от обычного суперсэмплинга, RGSS рассчитывает не одно изображение в повышенном разрешении, а четыре одинаковых изображения в установленном на экране разрешении. На самом деле, эти четыре рассчитываемых изображения не совсем одинаковы. Поскольку результирующий пиксель по-прежнему состоит из четырех субпикселов, нужно определить их положение внутри пикселя. Как мы уже говорили, метод 3dfx предполагает, что все сэмплы внутри пикселя повернуты на 20-30 градусов:

Антиалиасинг (antialiasing) сегодня


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

Очевидно, что в данном случае честно сглаживаются по четырем сэмплам все пиксели экрана, а не только эффект алиасинга, как при использовании Accuview от NVIDIA. Из этого факта следуют естественные выводы: скорость падает не меньше, чем при использовании обычного суперсэмплинга (Ordered Grid Super Sampling - суперсэмплинг с прямой решеткой), но и удаленные текстуры тоже серьезно улучшаются, также как и при использовании OGSS.


Анти-алиасинг 2х.

Другой, более быстрый, но и менее качественный режим сглаживания. Это расчет только двух разных кадров и формирование финального пикселя по двум сэмплам. Очевидно, что в отличие от других рассмотренных методов, использующих для расчета пикселя два субпикселя, метод 3dfx сглаживает изображение не только по горизонтали, но и по вертикали. Хотя, совершенно не сглаживаются линии с наклоном около 60 градусов, этот режим, тем не менее, является одним из самых удачных, среди конкурентов в весовой категории 2х.

Антиалиасинг (antialiasing) сегодня


ATI Radeon 8500 (Smooth Vision)

В своем сверхновом ускорителе, способном на равных бороться с ускорителями NVIDIA GeForce3, ATI предложила новое решение полноэкранного сглаживания с фирменным названием Smooth Vision.

Это второй, после 3dfx метод, основанный на неупорядоченном расположении сэмплов внутри пикселя (так называемая искаженная решетка или jittered sample pattern). Но, в отличие от метода 3dfx, сэмплы не просто повернуты внутри пикселя. Каждый пиксель допускает восемь различных, заранее заданных расположения внутренних сэмпла:

Антиалиасинг (antialiasing) сегодня


Метод 3dfx сдвигает каждый пиксель одинаково в одном и том же направлении. В отличие от него, Smooth Vision сдвигает пиксели группами, причем каждая группа может быть сдвинута в любую сторону. В итоге, расположение сэмплов должно приближаться к идеалу, то есть полностью случайной решетке. А значит, метод должен одинаково хорошо справляться с линиями, проходящими под любыми углами.

SV оперирует с блоками из 16-ти сэмплов, на основе которых может рассчитываться различное количество результирующих пикселей (для режима 2х - 8 пикселей, для режима 4х - 4 пикселя). Каждый пиксель внутри этого блока имеет собственное, отличное от остальных пикселей, расположение внутренних субпикселов, наугад выбранное из восьми допустимых позиций.

Вот пример расположения сэмплов внутри пикселя, в режиме SV 4x:

Антиалиасинг (antialiasing) сегодня


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

Полноэкранное сглаживание SV имеет два основных режима работы: Quality и Performance. Они отличаются только тем, что первый честно рассчитывает заданное количество сэмплов (от 2х до 6х), а второй использует сэмплы соседних пикселей. Естественно, использование не своих субпикселей приводит к повышению скорости и некоторой смазанности изображения, о чем мы достаточно подробно говорили выше.

Искаженная решетка сэмплов позволяет делать некоторые интересные вещи, например, нечетное количество субпикселей на пиксель. Кроме того, как и у Voodoo 5, режим 2х дает действительно полное сглаживание, а не только по одной из координат, как у NVIDIA, даже более полное, чем у Voodoo5, поскольку сэмплы располагаются внутри пикселей намного более произвольно (случайно). Однако это не значит, что качество сглаживания будет на достаточном уровне.

Следует также отметить одну неприятную особенность драйверов Radeon 8500: на сегодняшний день, поддержка Smooth Vision реализована только в Direct3D, а в OpenGL используется самый обыкновенный суперсэмплинг, работающий гораздо медленнее и дающий худшее качество сглаживания. Будем надеяться, что эта досадная недоработка будет исправлена в самое ближайшее время.


Сравнение методов

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

Среди остальных методов можно выделить два направления развития: увеличение качества обычного суперсэмплинга и повышение скорости.

3dfx и ATI пошли по первому направлению, увеличив качество суперсэмплинга, поворачивая или располагая случайно сэмплы внутри пикселя, при этом немного оптимизировав скорость. Причем, ATI пошла гораздо дальше 3dfx, введя почти случайное расположение субпикселов и значительно лучше оптимизировав скорость. Кроме того, 3dfx больше не существует и ее последний продукт, Voodoo5, едва ли можно назвать для кого-то серьезным конкурентом, хотя бы по причине фактического отсутствия такового на рынке.

Метод, предлагаемый ATI, вероятно, является самым качественным из того, что реализовано до сих пор. К сожалению, производительность Radeon 8500 не позволяет использовать его с максимальными настройками в достойном разрешении. На сегодняшний день, для современных ускорителей намного важнее такой показатель сглаживания, как качество/падение скорости. Чем выше будет этот показатель, тем выше в итоге будет и качество, с которым можно будет играть с достойной скоростью. ATI увеличила этот показатель, увеличив качество. Но математика подсказывает и другой способ: уменьшить падение скорости.

Именно по этому пути и пошла NVIDIA, сглаживание которой по качеству не лучше суперсэмплинга, но зато гораздо быстрее по скорости, давая, в итоге, самый быстрый анти-алиасинг среди всех конкурентов.

Трудно однозначно назвать победителя. Режим Accuview 4XS дает хорошее качество при небольшом падении скорости. Зато режим SV Quality 4x дает несколько более высокое качество сглаживания, хотя и заплатить за него придется дороже. И не стоит забывать про анизотропную фильтрацию, которая еще больше усложняет проблему выбора. Я не возьмусь называть победителя, поскольку это будет исключительно мое субъективное мнение. Полагаю, если вы внимательно прочитали этот материал, то сможете самостоятельно сделать выбор.


Перспективы развития и выводы

Скорость трехмерных акселераторов растет с неудержимой скоростью, поэтому анти-алиасинг неизбежно будет становиться все более доступным и качественным. Естественно, будут совершенствоваться и методы сглаживания. Я думаю, в дальнейшем сохранится та же дилемма, что и сейчас: выбрать чуть более качественный метод и проиграть в скорости или выбрать чуть меньшее качество, но с большей скоростью. Но, скорее всего, каждый метод будет совершенствоваться по обоим направлениям сразу, повышая и качество и скорость. Мне, например, представляется очевидным следующий шаг Accuview: лучшим решением, повышающим качество и не сильно снижающим скорость, было бы введение смещенного расположения сэмплов внутри пикселей (при этом, как и раньше, сглаживать только края полигонов).

После публикации нашей предыдущей статьи, посвященной анти-алиасингу, прошло уже больше года. Напомню, тогда вывод был прост - несмотря ни на что, скорость слишком мала, чтобы говорить о серьезном применении сглаживания. С тех пор, производительность новейших ускорителей возросла более чем в два раза, были предложены другие, более быстрые методы. Поэтому, можно уверенно говорить, что положение изменилось: функция перестала играть, преимущественно маркетинговую, роль и появились реальные причины для ее использования. Когда сегодняшние, самые современные, ускорители опустятся в цене до уровня около $100-150, анти-алиасинг придет в каждый дом.


P.S.

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



Игорь Епимахов a.k.a. Sboy (sboy@nvWorld.ru)



Обсудить/дополнить в конференции

Линки по теме: