"На пути к Идеальной Картинке" или антиалиасинг на современных игровых видеокартах.

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

Чего мы хотим


С выходом каждого нового поколения графических чипов производительность видеокарт поднимается на новый уровень, а количество и качество всевозможных спецэффектов расширяется со взрывным эффектом. Но какой бы совершенной нe стала современная графика в играх, какими реалистичными не стали персонажи и их окружение, главное свойство картинки на мониторе остаётся неизменным: эта картинка состоит из пикселов - элементарных единиц компьютерной картинки (Pixel, Picture Element). А это значит, что грани полигонов будут отображаться "ступеньками", состоящими из этих пикселов, и идеального качества картинки не удастся добиться до тех пор, пока не исчезнут "ступеньки".
Итак, проблема поставлена: "ступенек" на Идеальной Картинке быть не должно. Скажете, такого не бывает? Еще как бывает. Например, в современном кинематографе для создания спецэффектов и сцен, которые снять "вживую" очень трудно, дорого или просто невозможно, используются современные компьютерные системы рендеринга. То, что получается в результате программного расчёта, выглядит настолько естественно, что мы порой не замечаем этого "обмана" и воспринимаем плоды трудов программистов и дизайнеров как обычную видеосъемку. В таких изображениях "ступенек", разумеется, нет и в помине.
Но это - фильмы, и для них даже на мощных многопроцессорных системах кадры могут рассчитываться и минуту, и час, и день... А мы хотим, чтобы кадры строились в реальном времени. Это значит, что исключительно качественные методы антиалиасинга (антиалиасинг - удаление эффектов алиасинга, то есть, "ступенек" и т.д.), которые используются в программных пакетах рендеринга, нам не подходят. Не та скорость, к сожалению.

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

Что мы можем


Общая идея всех методов антиалиасинга одинакова: для того, чтобы убрать "ступеньки", нужно каким-либо образом получить дополнительную информацию о каждом пикселе изображения.
Например, в воксельных алгоритмах построения ландшафтов само описание сцены - вокселями (Voxel, volume pixel), "объемными пикселами" - несет в себе достаточное количество информации для реализации качественного антиалиасинга. Причем, опять же, в силу природы алгоритмов, используемых при визуализации таких воксельных сцен, "избавление от ступенек" практически не требует дополнительных вычислительных затрат. Я не буду углубляться в детали, тема воксельных алгоритмов настолько широка и глубока, что в ней можно просто утонуть - не хватит ни моих знаний, ни вашего терпения. Однако, отличный пример реализации антиалиасинга при воксельном описании сцен можно привести: это игра Outcast - 3D-шутер, адвенчура и квест в одном флаконе:



В момент появления Outcast был поистине революционной игрой - качество изображения, естественность и какая-то особенная красота воксельных миров делали Outcast игрой, абсолютно непохожей ни на что другое. Идеальная Картинка того времени оказалась на расстоянии вытянутой руки - стоило лишь коснуться экрана :).
Однако, за красоту приходилось платить - изображение строилось программно, и даже на мощных по тем временам процессорах класса Pentium II в разрешении 400х300 игра ощутимо "подтормаживала".
Сложность алгоритмов качественной визуализации воксельных сцен на фоне бурного развития 3D-ускорителей привела к тому, что разработчики игр в конце концов отвернулись от вокселей, и больше подобных проектов не появлялось. Трехмерные воксельные игры пока так и остаются где-то в далекой туманной перспективе - когда-нибудь, может быть, мощности процессоров будет достаточно для построения реалистичных воксельных сцен в реальном времени.

Что ж, нынче правит бал полигонное описание сцен, и если мы хотим добиться качественного изображения в играх, то выбора нет - нужно обращаться к 3D-ускорителям :).

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


В ATI RADEON7000/7200/7500, NVIDIA GeForce 256, GeForce2GTS/Pro/Ultra/Ti, GeForce2 MX и т.д. для устранения "ступенек" применяется суперсэмплинг (Super Sampling).
При включении суперсэмплинга каждый пиксел требуемого изображения "разделяется" на несколько субпикселов, которые рассчитываются независимо и записываются в отдельный буфер. После построения таким способом сцены (на Kyro/Kyro II - тайла) производится обратный процесс - фильтрация или "сборка" пикселов из субпикселов по шаблону (Filter Kernel), которая представляет собой ни что иное, как простое усреднение цветов соответствующих субпикселов:



Физически при суперсэмплинге изображение просто строится чипом в увеличенном разрешении, а затем отфильтровывается по необходимому шаблону (чипы VSA100 в Voodoo4/5 работают немного иначе, но мы не будем их рассматривать по причине их моральной смерти и "раритетного" статуса).
Например, в режиме 800х600 при включении суперсэмплинга 2х2 размеры построенного в отдельном буфере изображения равны 1600х1200, шаблон фильтрации имеет размеры 2х2, а весовые коэффициенты в этом шаблоне (то есть, коэффициенты, характеризующие "вклад" цвета каждого субпиксела в цвет результирующего пиксела) - по 1/4.
Другой пример: в разрешении 640х480 при включении полноэкранного сглаживания 2х1 размеры построенного в отдельном буфере изображения будут равны 1280х460, шаблон фильтрации будет иметь размеры 2х1, а весовые коэффициенты субпикселов - 0.5 и 0.5.

Схема работы этого метода позволяет чётко представить себе потери производительности при включении суперсэмплинга: например, в режиме 800х600 при сглаживании 4х производительность видеокарты будет равна её производительности в режиме 1600х1200.
Очевидно, что потери производительности при использовании суперсэмплинга велики, и нужно искать более производительный способ избавления от "ступенек".

Такой способ был предложен компанией NVIDIA, и с появлением чипа GeForce3 нам пришлось заучивать новые слова: "мультисэмплинг", "HRAA", "Quincunx".

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


Многие противопроставляют мультисэмплинг NVIDIA GeForce3 суперсэмплингу, и совершенно напрасно. Мультисэмплинг в исполнении NVIDIA - это вполне логичное развитие суперсэмплинга.
Основное отличие мультисэмплинга в NVIDIA GeForce3/GeForce4/GeForce4 MX от суперсэмплинга в чипах поколения NVIDIA GeForce2 состоит в том, что отныне чипы не рассчитывают одинаковое количество субпикселов для всех пикселов изображения. Действительно, если сглаживать нужно только "ступеньки" на границах полигонов, то зачем заниматься бесполезными расчетами там где это не нужно, то есть внутри полигона?
Физически при включении мультисэмплинга чип действует точно таким же образом, как и при суперсэмплинге: сначала - построение изображения в увеличенном виде, а затем - фильтрация по шаблону.
Однако, сам способ построения изображения несколько изменился: теперь при обсчете каждого пиксела выполняется несложная проверка расположения его субпикселов:

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

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

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

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



При этом качество сглаживания границ улучшается без появления дополнительных вычислительных затрат - при построении изображения в буфере пикселы разбиваются на 2 субпиксела - так же, как и при HRAA 2х.
Метод HRAA 4х 9-tap, являющийся модификацией HRAA 4х, имеет шаблон фильтрации размером 3х3, а для получения цвета комбинируются цвета девяти сэмплов. Естественно, качество сглаживания "ступенек" среди всех методов HRAA у 4x 9-tap получается наиболее близким к идеалу.
Подробнее о шаблонах фильтрации методов FSAA на NVIDIA GeForce3 можно прочитать в Приложении 1, а мне остается лишь напомнить, что NVIDIA GeForce4 Ti и GeForce4 MX функции антиалиасинга унаследовали от NVIDIA GeForce3, изменилось лишь общее их название - "Accuview". Поэтому эти чипы выполняют антиалиасинг с точно таким же качеством и точно такими же потерями производительности. Единственное новшество в NVIDIA GeForce4 Ti/MX - появление метода 4xS, о котором я расскажу чуть позже - необходимость в этом обязательно возникнет.

Что такое SMOOTHVISION?


Если компания NVIDIA не скрывает подробностей реализации полноэкранного сглаживания в своих чипах (об этом можно почитать, например, здесь), то ATI при появлении RADEON 8500, что называется "напустила тумана", и о том, как действует RADEON 8500, приходится только догадываться, несмотря на то, что существует официальный документ, который объясняет принципы работы SMOOTHVISION.

SMOOTHVISION™ uses a large group of 16-sample blocks that cover a variable number of pixels, which is determined by the level of anti-aliasing being implemented. Each pixel within every group of 16 samples has their actual sample positions selected from a pre-programmed 8-sample jitter table.

As the level of anti-aliasing is increased, each 16-sample block will cover a smaller number of pixels. For example in the 2x anti-aliasing case, a total of 8 pixels are covered by the 16 sample group, and in the 4x case, a total of 4 pixels are sampled 4 times each.

То есть, при включении антиалиасинга используется набор из 16 заранее определенных позиций сэмплов, который используется для определения количества и расположения субпикселов для каждого пиксела. Например, при сглаживании SMOOTHVISION 4x Quality этот набор "накрывает" 4 соседних пиксела, и в результате для каждого из них рассчитывается 4 субпиксела, цвета которых впоследствии смешиваются. При сглаживании SMOOTHVISION 2x Quality этот набор "накрывает" 8 пикселов - на каждый пиксел приходится по 2 субпиксела. Максимальное количество субпикселов для каждого пиксела - 8 штук. Вот пример SMOOTHVISION 4x Quality:




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

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

К счастью, или к сожалению, реализация SMOOTHVISION на ATI RADEON 8500 имеет мало общего со всем этим "туманом". При внимательном наблюдении за действием SMOOTHVISION на всевозможных углах наклона границ полигонов, по работе с текстурами, по величинам потери производительности можно сделать однозначный вывод: перед нами ничто иное, как обычный суперсэмплинг.
Для подтверждения этого предположения мне пришлось даже написать небольшую программку, моделирующую действие различных вариаций суперсэмплинга (см. Приложение 2). Добиваясь стопроцентного совпадения сглаживания границ полигонов в играх и в изображении, рассчитываемом утилитой, я достаточно быстро определил шаблоны фильтрации для всех режимов SMOOTHVISION. Чтобы не загромождать обзор деталями, шаблоны для всех десяти вариаций полноэкранного сглаживания на ATI RADEON 8500 я привел в Приложении 1.
Итак, вердикт таков: SMOOTHVISION - это слегка модифицированный суперсэмплинг. Да, отлично сглаживающий "ступеньки", но - суперсэмплинг. Со всеми его плюсами и минусами.

Слабые места и тонкие моменты


В этом разделе мы как раз и поговорим о плюсах и минусах суперсэмплинга и мультисэмплинга на современных игровых видеокартах.

"Неудобные" углы

Суперсэмплинг и мультисэмплинг при сглаживании "ступенек" на границах полигонов обеспечивают окрашивание пикселя в цвет, являющийся комбинацией цветов субпикселов, попавших внутрь полигона и цветом субпикселов, оказавшихся снаружи него. Например, при суперсэмплинге 4х внутрь полигона могут попасть все 4 субпиксела, только 3, только 2, только 1 субпиксел, и последний вариант - все субпикселы окажутся за пределами полигона. Для белого полигона на синем фоне это даст 5 вариаций цвета:



Сглаженная граница будет выглядеть примерно так:



Что ж, отлично, картинка близка к идеалу! Однако, радоваться рано, худшее - впереди.
Если угол наклона границы треугольника таков, что вероятность возникновения некоторых вариантов расположения субпикселов снижается, то снижается и количество полутонов в полученном изображении. Например, при почти горизонтальной границе полигона изображение будет строиться так:



В результате граница полигона будет выглядеть так:



Это далеко от того, что хотелось бы видеть на Идеальной Картинке:



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



Чипы VSA-100 от покойной ныне компании 3dfx обеспечивали отличное качество антиалиасинга благодаря тому, что располагали субпикселы на повёрнутой сетке (RGSS, Rotated Grid Super Sampling), но сейчас 3dfx мертва, а её наработки в части антиалиасинга не используются.
Остаётся только один выход для приближения к Идеальной Картинке - использовать самые "тяжелые" методы антиалиасинга, включающие четыре, пять или шесть сэмплов. Но и в этом случае границы, расположенные под "неудобными" углами, то есть, близкими к горизонтали (0 гр.), вертикали (90 гр., 270 гр.) и диагоналям (45 гр.,135 гр.) будут сглажены хуже, чем остальные.

"Это - не наш метод"

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

Например, метод 2х на NVIDIA GeForce2, GeForce3, GeForce4Ti/MX, обеспечивая сносное сглаживание на углах, близких к горизонтали и вертикали, имеет "неудобный" угол в 135 градусов. Границы полигонов, расположенные под углами, близкими к этому "неудобному" углу, он не сглаживает вообще. Сглаживание границ на углах, близких к 45гр., тоже выглядит неестественно.
Методы SMOOTHVISION 2x Quality и 2x Performance тоже отличаются неважным сглаживанием границ полигонов на некоторых углах наклона. 2x Quality неплохо справляется с границами полигонов, расположенными под углами, близкими к горизонтали и вертикали но на углах в 45гр. и 135 гр. работает плохо.
Метод 2x Performance на углах 45гр. и 135 гр. работает просто чудовищно, превращая "ступеньки", от которых нужно избавляться, в настоящие "зазубрины" размером в 2 пиксела, напрочь отбивая желание включить его когда-нибудь в следующий раз:




Вывод такой: не мучайте свои глаза и видеокарту, если уж сглаживать "ступеньки", то сглаживать качественно, используя "тяжелые" методы - с самыми большими количествами сэмплов/субпикселов. А если производительности видеокарты не хватает для использования "тяжелых" методов алиасинга, лучше вообще не использовать антиалиасинг. Включение "легкие" методов может привести к разочарованию - "скорости убавилось, а качества не прибавилось". В общем, всяческие 2х, 2х1 и 1х2 - это "не наши методы".

Методы Quincunx, 4x 9-tap и SMOOTHVISION 4x Performance

Для того, чтобы поднять качество сглаживания "ступенек", не теряя в производительности, то есть, не увеличивая количество рассчитываемых субпикселов, компании NVIDIA и ATI пошли одинаковым путем. Шаблоны фильтрации в методах "Quincunx", "4x 9-tap" и SMOOTHVISION 4x Performance включают в себя не только субпикселы "родного" пиксела, но и субпикселы соседних пикселов. Например, при методе 4х 9-tap для каждого пиксела рассчитывается 4 субпиксела, но конечный цвет пиксела является комбинацией цветов аж девяти сэмплов:



При таких методах за счет захвата соседних субпикселов качество сглаживания "ступенек" заметно увеличивается практически без потерь производительности, и всё бы хорошо, но появляется один неприятный эффект: изображение "смазывается". Можно показать это на примере методов HRAA 2х и Quincunx, отличие которых состоит как раз в том, что шаблон сглаживания в "Quincunx" захватывает субпикселы соседних пикселов. Слева - фрагмент скриншота с HRAA 2x, справа - с Quincunx:



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

Качество текстур

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




В результате при использовании суперсэмплинга улучшается качество фильтрации текстур, как будто включена анизотропная фильтрация. Кстати, суперсэмплинг, по сути, и есть один из вариантов реализации анизотропной фильтрации.
Мультисэмплинг на NVIDIA GeForce3/GeForce4Ti/GeForce4 MX таким замечательным качеством не обладает, потому, что внутри полигона, в отличие от его границ, для каждого пиксела рассчитывается всего лишь одно значение цвета, которое присваивается всем его субпикселам.

Для демонстрации работы антиалиасинга с текстурами я использовал сцену из Serious Sam: The Second Encounter, проверив в этой сцене работу NVIDIA GeForce3, GeForce2Ti и ATI RADEON 8500:




NVIDIA GeForce3 - мультисэмплинг:
Сцена без полноэкранного сглаживания:

Сцена с HRAA 4x:


Качество текстур совершенно не изменилось. Впрочем, этот недостаток (если это можно назвать недостатком :) ) компенсируется тем, что чипы NVIDIA GeForce3/GeForce4Ti/GeForce4 MX поддерживают анизотропную фильтрацию текстур.
Чипы NVIDIA GeForce4Ti/GeForce4 MX, вместе со всеми вариациями антиалиасинга, "унаследованными" от GeForce3, поддерживают новый метод полноэкранного сглаживания, "4xS", который является комбинацией мультисэмплинга 2х и суперсэмплинга 1х2. Он обеспечивает небольшое улучшение качества фильтрации текстур из-за того, что внутри полигонов для каждого пиксела рассчитываются по 2 субпиксела, но из-за этого приводит к большим потерям производительности, чем мультисэмплинг 4х.

NVIDIA GeForce2 - суперсэмплинг:
Сцена без полноэкранного сглаживания:

Сцена c FSAA 4x:


Качество текстур улучшилось - суперсэмплинг в действии :).

ATI RADEON 8500:
Сцена без полноэкранного сглаживания:

Сцена со SMOOTHVISION 6x Quality


Качество текстур, против ожидания, ухудшилось!
Как выяснилось, ATI RADEON 8500 при включении антиалиасинга специально занижает детализацию текстур (LOD, Level Of Details), снижая вместе с этим требования к пропускной способности видеопамяти, в расчёте на то, что ситуацию исправит суперсэмплинг. Однако, качество текстур оказывается всё-таки ниже, чем до включения антиалиасинга.
К счастью, это "лечится" - достаточно включить анизотропную фильтрацию, и качество фильтрации текстур поднимется. Учитывая невысокие потери производительности при включении анизотропной фильтрации на ATI RADEON 8500, такое "лекарство" можно принимать постоянно :).

Работа с прозрачными текстурами

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

Пример - листва деревьев в Serious Sam: The Second Encounter. На этой сцене я проверил работу NVIDIA GeForce3, GeForce2Ti и ATI RADEON 8500:


NVIDIA GeForce3 - мультисэмплинг:
Сцена без полноэкранного сглаживания:

Сцена с FSAA 4x:


"Ступеньки" на ветви дерева оказались сглаженными, листва - нет. К сожалению, сглаживания внутри полигонов при использовании мультисэмплинга добиться невозможно, поэтому такая картина работы с прозрачными текстурами будет наблюдаться везде.
Немного исправить ситуацию могут лишь методы Quincunx и 4х 9-tap, обеспечивающие "смазывание" всей сцены:
Сцена c HRAA Quincunx:



NVIDIA GeForce2:
Сцена без полноэкранного сглаживания:

Сцена с FSAA 4x:


Листва отрисована великолепно: улучшилась детализация текстур и полностью исчезли "ступеньки".

ATI RADEON 8500:
Сцена без полноэкранного сглаживания:

Сцена со SMOOTHVISION 6x Quality:


"Ступеньки" исчезли и на листьях, и на ветвях, но качество текстур, к сожалению, не улучшилось.

Итак, мультисэмплинг от NVIDIA при работе с прозрачными текстурами может разочаровать. К счастью, такие ситуации встречаются довольно редко, чаще разработчики применяют другие методы работы с прозрачными текстурами, при которых прозрачность изменяется плавно. Пример - трава в том же Serious Sam: The Second Encounter:


Так включать или не включать?


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

Увеличение разрешения вместо включения антиалиасинга

При повышении разрешения "ступеньки", естественно, никуда не исчезают, они становятся просто менее заметными. Например, при увеличении разрешения в A раз по горизонтали и в B раз по вертикали физические размеры пикселей на экране уменьшатся соответственно, в A раза по горизонтали и в B - по вертикали, а площадь пикселей уменьшится в A*B раз. Во столько же раз уменьшится и раздражающее действие "ступенек" :).
Всё это здорово, но повышение разрешения имеет свои минусы и ограничения:

Во-первых, изменение разрешения просто невозможно для владельцев жидкокристаллических мониторов.
Во-вторых, для получения изображения, примерно соответствующего по качеству сглаживания "ступенек" картинке с суперсэмплингом или мультисэмплингом 4х, разрешение приходится увеличивать в 2 раза по горизонтали и в 2 раза по вертикали. Максимальная частота кадровой развертки мониторов в таких высоких разрешениях (режим 800х600, например, увеличивается до 1600х1200, 1024x768 - до 2048х1536) может быть ограничена совсем некомфортным значением в 60 Гц, а то и ниже. Это только в том случае, если монитор вообще согласится работать в таких режимах.
В-третьих, потери производительности при включении мультисэмплинга (это касается только мультисэмплинга, почему - надеюсь, понятно) оказываются меньше, чем при эквивалентном увеличении разрешения.

В общем, выбор есть: можно включить полноэкранное сглаживание, а можно увеличить разрешение. В качестве примера такого выбора можно сравнить изображения сцены из Homeworld: Cataclysm при включении полноэкранного сглаживания и при увеличении разрешения в 2 раза по горизонтали и вертикали. На картинке - Hive Frigate в окружении двенадцати Sentinel:

Сцена без полноэкранного сглаживания:

Сцена с полноэкранным сглаживанием:

Сцена при повышении разрешения:


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

Cубъективные наблюдения

Включение очень высоких разрешений в играх, по-моему, приводит даже к излишней чёткости линий. Объекты находятся "в фокусе" и остаются чёткими на любом удалении от наблюдателя, а это не свойственно человеческому зрению. Включение антиалиасинга вместо повышения разрешения делает границы менее резкими, а очень удаленные объекты, которые занимают на экране всего лишь несколько пикселов, из "кучки непонятных пикселов" превращает в "мутное пятно". Мне кажется, такое "смазывание" удаленных объектов - огромный плюс суперсэмплинга и мультисэмплинга. Изображения при этом становятся гораздо естественнее: крупные и близкие объекты не теряют в чёткости, лишь обретая сглаженные границы, а удаленные и небольшие - "смазываются".
Попробую показать это на примере Homeworld: Cataclysm. В этой сцене крупный юнит, Hive Frigate, эскортирует звено мелких Recon:
Сцена без полноэкранного сглаживания:

Сцена при повышении разрешения:

Сцена с полноэкранным сглаживанием:


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

Вопрос скорости



Главным фактором, ограничивающим возможность применения полноэкранного сглаживания является большая величина потерь производительности.
Производительность падает тем больше, чем "тяжелее" используемый метод антиалиасинга. Например, при использовании суперсэмплинга 2х производительность видеокарты снизится почти в 2 раза, при 4х - в четыре, при 6х- примерно в шесть (!) раз.
К счастью, реальное снижение количества кадров в секунду в играх почти всегда будет не таким катастрофическим. Современные видеокарты обогнали в своём развитии процессоры (вернее, вся их вычислительная мощь пока не задействуется в большинстве современных игр, в отличии от ресурсов процессора), и в большинстве случаев они работают "вполсилы", будучи ограниченными скоростью обсчета игровой динамики, логики и подготовки сцен центральным процессором. В таких случаях включение функций, повышающих нагрузку только на видеокарту, таких, как полноэкранное сглаживание, анизотропная фильтрация или TRUFORM, вызовет незначительное падение количества кадров в секунду, а иногда может вообще не повлиять на скорость - она будет по-прежнему ограничена производительностью центрального процессора, подсистемы памяти и т.д.. Это касается, например, ATI RADEON 8500: его производительность такова, что даже при использовании "тяжелых" режимов SMOOTHVISION скорость в большинстве игр находится на приемлемом уровне.
Всё вышесказанное относится и к новейшим видеокартам от NVIDIA, поддерживающим мультисэмплинг. При использовании мультисэмплинга падение производительности не так велико, как при суперсэмплинге, поэтому разочарований в скорости будет еще меньше.
Хуже всего с полноэкранным сглаживанием дела обстоят у недорогих плат с поддержкой суперсэмплинга - это видеокарты класса NVIDIA GeForce2 MX, PowerVR/STM Kyro/Kyro II, SIS 315 и т.д.. Их производительность такова, что в современных играх они чаще всего работают "в полную силу", поэтому дополнительная нагрузка при включении суперсэмплинга может просто "убить" играбельность. В таком случае приходится либо отказываться от включения антиалиасинга, либо включать его в очень низких разрешениях - 512х384, 640х480, иногда, может быть, 800х600. Очевидно, что такое понравится далеко не всем.

Точные значения величины падения производительности при включении антиалиасинга можно посмотреть в обзорах конкретных моделей видеокарт.

Заключение или "Чего ждать в будущем?"



Во-первых, хочется появления поддержки качественных и быстрых методов антиалиасинга в недорогих видеокартах. Ведь, согласитесь: пока что качественный антиалиасинг в высоких разрешениях доступен лишь владельцам сравнительно дорогих видеокарт, таких, как NVIDIA GeForce3Ti/GeForce4Ti или ATI Radeon 8500.
Появление видеокарт на базе линейки чипов NVIDIA GeForce4 MX, поддерживающих мультисэмплинг, должно исправить эту ситуацию. Чипы серии SIS Xabre - пока еще "тёмные лошадки", но есть все оснавания предполагать, что они окажутся достаточно быстрыми, видеокарты на их основе будут стоить недорого, а хотя бы суперсэмплинг в числе поддерживаемых методов антиалиасинга будет присутствовать.
Во-вторых, несмотря на то, что суперсэмплинг и мультисэмплинг обеспечивают хорошее качество сглаживания "ступенек", хочеться, как всегда, "большего" :). Увеличение количества субпикселов, гибкое управление их количеством и позицией "внутри" пиксела - возможные пути развития полноэкранного антиалиасинга. Возможно, в действительности, а не "на бумаге" появятся функции, позволяющие программистам самостоятельно решать, в каких участках изображения или на каких полигонах включать антиалиасинг, а на каких - не включать.
В общем, фантазия и изобретательность разработчиков не знает границ, и я уверен, что мы еще не раз удивимся тем переменам в качестве изображения, которые обеспечат новые разработки. Идеальную Картинку мы увидим абсолютно точно, пусть не завтра, но скоро :).

Приложение 1: FSAA на RADEON 8500 и GeForce3/GeForce4/GeForce4 MX



HRAA - NVIDIA GeForce3/GeForce4Ti/GeForce4MX

2х:



Самый высокопроизводительный и наименее качественный метод антиалиасинга, доступный на NVIDIA GeForce3/GeForce4Ti/GeForce4MX. Качество сглаживания границ полигонов, близких к горизонтали и вертикали - хорошее. Качество сглаживания на углах 45 гр., 135 гр. - отвратительное.

Quincunx:



Модификация предыдущего метода, 2х. Шаблон фильтрации Quincunx включает дополнительные сэмплы - субпикселы соседних пикселов, поэтому за счет дополнительного "смазывания" картинки "слупеньки" оказываются более сглаженными. "Неудобные" углы - те же: 45 гр. и 135 гр.

4x:



Метод 4х хорошо сглаживает "ступеньки" почти на всех углах наклона. Хуже ведет себя на углах, близких к горизонтали, вертикали и диагоналям.

4x 9-tap:



4x 9-tap - самый качественный метод антиалиасинга из всего выбора на чипах от NVIDIA. За счет увеличения размеров шаблона фильтрации появляется небольшое "смазывание" картинки, но зато качество сглаживания "ступенек" - идеальное.

SMOOTHVISION - ATI RADEON 8500

2x Quality:



Этот метод по качеству сглаживания границ полигонов полностью идентичен методу HRAA 2x или Accuview 2x на чипах от NVIDIA. Соответственно, "неудобные" углы - 45 гр. и 135 гр..

3x Quality:



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

4x Quality:



SMOOTHVISION 4x Quality сглаживает грани полигонов точно так же, как и метод 4х на чипах от NVIDIA. "Неудобные" углы - близкие к горизонтали, вертикали и диагоналям.

5x Quality:



Этот метод лучше, чем 4х Quality, сглаживает грани на углах, наклона, близких к горизонтали. "Неудобные" углы наклона - близкие к вертикали.

6x Quality:



6х Quality - самая качественная и самая "тяжелая" в плане производительности вариация суперсэмплинга из доступных на ATI RADEON 8500. Качество сглаживания граней полигонов на углах наклона, близких к горизонтали - отличное, на остальных углах - хорошее. Ярко выраженных "неудобных" углов нет, но чуть хуже этот метод справляется с гранями, расположенными почти вертикально.



2x Performance:



При включении 2x Performance на чётных строках изображения для каждого пиксела рассчитывается два субпиксела, а на нечетных - один. В результате, этот метод можно назвать "1х1.5". Качество сглаживания "ступенек" на гранях полигонов - отвратительное, все углы наклона - "неудобные". В общем, не антиалиасинг, а издевательство над здравым смыслом.

3x Performance:



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

4x Performance:



Еще одна вариация на тему чередования количества субпикселов - "1.5х2". Однако, на этот раз шаблон фильтрации на нечетных столбцах включает в себя субпикселы соседних пикселов, в результате чего качество сглаживания граней полигонов, расположенных близко к вертикали, улучшается почти до уровня "честного" 4х Quality, а изображение немного "смазывается". Качество сглаживания граней, близких к горизонтали и "неудобные углы" - такие же, как у 4x Quality.

5x Performance:



В этой вариации SMOOTHVISION используется разбиение пиксела на 4 субпиксела, как и при 4x Quality, но шаблон фильтрации имеет размеры не 2х2, а 2х3. За счет захвата субпикселов соседнего пиксела качество сглаживания "ступенек" улучшается по сравнению с 4х Quality, но появляется небольшое "смазывание" изображения.

6x Performance:



Здесь опять используется чередование количества субпикселов: чётные строки пикселов имеют по 6 субпикселов, а нечетные - по 4. Можно назвать этот метод "2х2.5". Производительность этой вариации SMOOTHVISION оказывается чуть-чуть выше, чем у "настоящего" 6x Quality, а качество сглаживания границ полигонов - чуть-чуть хуже. Чётко выделить "неудобные" углы для этого метода трудно - визуально на любых углах наклона граней полигонов этот метод, как и 6x Quality, действует замечательно. Разве что, как и 6х Quality, эта вариация работает чуть хуже на гранях, расположенных почти вертикально.

Приложение 2: Программа моделирования FSAA чипов от ATI и NVIDIA


Для моделирования и демонстрации действия различных вариаций мультисэмплинга и суперсэмплинга я написал небольшую программку:



Программа удобна для сравнения качества антиалиасинга в исполнении чипов от NVIDIA и ATI, выявления "неудобных" углов и т.д.. При включении какого-либо из режимов антиалиасинга тут же меняется изображение на демонстрационных панелях, а на вспомогательной выводится информация об используемом шаблоне фильтрации на примере четырех соседних пикселов.
Программа не использует аппаратные 3D-функции видеокарт, поэтому может быть запущена на любой системе с Windows 9x/ME/NT/XP/2000.

Ссылка: /Software/Graphics/FSAADemo/fsaademo.rar