FSAA - что это такое и с чем его едят?

15.09.2000


Вступление

  У всякого рода эволюции есть какая-то своя конечная цель. Цель эволюции 3D-акселераторов - фотореалистичная графика в реальном времени, которая позволила бы нам с вами лицезреть на экранах мониторов (или… кто знает, на чём мы будем лицезреть в будущем J) живое, реалистичное изображение, но сделанное искусственно, при помощи программных средств, а также рук и фантазии человека. На сегодня, к сожалению, вычислительной мощности современных компьютеров не хватает для достижения желанной цели, некое (но очень даже неплохое!) подобие фотореалистичной графики доступно лишь в статических картинках и пререндеренных анимационных фильмах.

  В этой статье мы попробуем рассказать вам об одном из методов, позволяющих на достаточно ощутимую долю приблизиться к данной цели – «полноэкранное сглаживание» (FSAA) посредством суперсэмплинга (super-sampling).



Теория

FSAA – Full Scene Anti-Aliasing (полносценный анти-алиасинг).

  Чтобы понять, что такое анти-алиасинг, необходимо разобраться, что же такое само понятие «алиасинг» (или, как его называют, “лестничный” эффект). Для начала разберёмся, из чего состоит изображение? На этот вопрос есть два ответа:

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

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

  Почему именно треугольники? Дело в том, что это простейшие плоскости, комбинируя которые, легче всего строить любые трехмерные геометрические объекты.

  И то, и другое, является приближением к той самой фотореалистичной графике, а, попросту говоря к тому, что мы видим нашими глазами в реальной жизни. Собственно, чем больше полигонов и пикселей используется при построении трехмерного изображения, тем более реалистично выглядит полученная картинка. Реально повысить количество полигонов на экране в ближайшем будущем позволит аппаратный блок T&L, который сейчас активно продвигается такими фирмами как NVIDIA и ATI.

  Повышать количество пикселей, отображаемых на экране, сложнее – у большинства мониторов (15-17 дюймов), максимальное комфортное разрешение – лишь 1024х768. Но даже на таком разрешении на краях трехмерных объектов можно различить так называемую “лесенку”. Что это такое, проще всего показать:

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

  Точки стали гораздо мельче, и алиасинг практически не заметен. Человеческий глаз воспринимает как бы размазанную “лесенку” и получается иллюзия совершенно гладкой и ровной линии. Более высокое разрешение дает более качественную картинку, на которой “лесенки” уже мало заметны. Что же делать, когда повысить его до идеального уровня невозможно? Здесь и работает так называемый анти-алиасинг. Он имитирует уже отмеченное выше свойство зрения человека и, благодаря сглаживанию (обратите внимание: сглаживанию, а не размазыванию), добивается иллюзии гораздо большего разрешения, чем реально установлено. Таким образом, всё выше сказанное, даёт определения двум понятиям:

Алиасинг – собственно, сам «эффект лестницы»

Анти-алиасинг – функция видеокарты, призванная максимально, на сколько это возможно, уменьшить эффект лестницы.

  В этом материале мы рассмотрим один из базовых методов FSAA, применяемый в картах NVIDIA, а также некоторых ускорителях других фирм – суперсэмплинг. Суть его в том, что ускоритель рассчитывает изображение в гораздо большем разрешении, чем то, которое реально выставлено на экране (например, в игре), а затем сжимает его до установленного значения. Например, при разрешении экрана 800х600 и установке режима FSAA 2x2, изображение будет расчитываться в разрешении 1600х1200, а затем сжиматься до 800х600 и выводиться на экран. При этом эффект лестницы заметно снизится (попробуйте отснять скриншот в разрешении, к примеру, 1024х768, а затем просмотрите его в разрешении 800х600, и вы увидите, что изображение на картинке стало более сглаженным!). Проще всего это продемонстрировать на иллюстрациях:

Рисунок 1.

  Вначале, изображение рассчитывается как картинка высокого разрешения. Для наглядности использовалась простая наклонная линия. Как видите, линия практически близка к идеалу (Рисунок 1).

Рисунок 2.

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

Рисунок 3.

  Думается, что комментарии здесь излишни. Без анти-алиасинга линия выглядит очень грубо и лестничный эффект сразу бросается в глаза.

  Обрабатывая таким образом изображение, можно избавиться от столь неприятного нам "лестничного" эффекта (либо достаточно уменьшить его) и соответственно, заметно повысить качество картинки. Но к сожалению, скорость от включения анти-алиасинга падает в режиме 2х2 в 4 раза, а в режиме 4х4 – в 16 раз (!), так что во многих играх его включение приводит просто к катастрофически низкой скорости, совершенно недостаточной для полноценной комфортной игры. Приходится либо снижать разрешение, что повышает алиасинг, а значит повышение качества от этого эффекта будет в значительной мере компенсироваться низким разрешением, либо отказываться от анти-алиасинга (что и происходит чаще всего). Разумеется, это не значит, что FSAA бесполезен. Есть множество игр, не требовательных к ускорителю, которые вполне могут работать в максимальном разрешении с включенным анти-алиасингом. Да и мощность ускорителей на сегодня растет в несколько раз быстрее всех остальных компонентов PC (равно как и требований игр к самим ускорителям J), поэтому очень скоро этот эффект будет применяться повсеместно уже без всяких компромиссов.



Практика

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

Direct3D

  В настройках Detonator-ов есть несколько режимов FSAA. От 1х2 до 4х4. При этом, они разделяются на обычные, с низкой детализацией (low detail) и один специальный (2x2 special). Устанавливать режимы low detail нет никакого смысла, т.к. будет только потеря качества, а выигрыша в скорости – никакого. Режим 2х2 special имеет более высокое качество, на уровне обычного 3х3, однако при этом скорость сохранится на уровне обычного 2х2! Но при этом есть существенный минус - этот режим вызывает больше всего проблем совместимости с играми.

  Для примера, расскажем вам о том, как подбирался оптимальный режим FSAA для некоторых игр. Примеры эти не единичны. Это, так сказать, представители игр разных классов – нетребовательных к ускорителю, средних и требовательных. Некоторые игры не позволяют повышать разрешение, некоторые – не могут работать с FSAA... Таких игр, особенно старых, встречается очень много.

Driver

  Эта игра весьма нетребовательна к мощности ускорителя. Например, был установлен режим FSAA 4х4, в режиме 1024х768х16 и субъективно скорость не снизилась. Правда, в 1024х768х32 уже не хватало памяти для FSAA, поэтому если необходим 32-битный цвет, то придется играть в разрешении 800х600. Оба эти режима имеют отличную скорость, и выбор зависит от предпочтений игрока.

Rollcage

  Эта игра уже сильнее загружает ускоритель. Тем не менее, режим 1024х768х16 FSAA 2x2 special является для неё вполне играбельным. Как и в прошлом случае, для получения 32-битного цвета, придется снижать разрешение до 800x600.

Dungeon Keeper

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

Carmageddon 2

  Эта игра - одна из немногих, которые “знают” об анти-алиасинге, а следовательно, с ней гарантированно не будет никаких проблем. К сожалению, в ней нельзя самостоятельно подбирать режимы, она сама устанавливает оптимальный для выбранного разрешения режим FSAA. Делает она это вполне удачно, поскольку во всех разрешениях обеспечивается очень высокое качество и скорость. Всё это можно отчётливо увидеть на приведённых ниже скриншотах, сделанных в режиме 640х480х32 (т.к. нормально играть, с приемлемой скоростью, во многих играх, равно как и в эту, можно лишь с таким разрешением):

FSAA 2x2:

FSAA 2x2 special:

FSAA 3x3:

FSAA 4x4:

Без FSAA:

  Как можно видеть, разницы между разными режимами нет, отличаются лишь 2х2 и 2х2 special, что говорит о том, что игра сама выбирает приемлемый для неё режим FSAA. Ну и конечно же, очень заметна разница между картинками с включенным и отключенным анти-алиасингом, комментарии здесь, как говорится, излишни… К сожалению, формат JPEG не позволяет в полной мере показать различия, но на самом деле они ещё больше!

Unreal Tournament

  Включение анти-алиасинга в этой игре не приводит к визуальным артефактам, но в силу ее относительно большой требовательности к мощности ускорителя, применять FSAA без снижения экранного разрешения невозможно. А стоит ли его использовать в низких разрешениях (800х600 и 640х480) или лучше установить 1024х768 – это уже дело вкуса и универсального решения для всех в данном случае не существует. Но даже в низких разрешениях не рекомендуется устанавливать режимы FSAA более, чем 2х2. Хотя, конечно, это зависит от мощности используемого ускорителя и то, что будет тормозить на GeForce256 SDR или GeForce2 MX, вполне возможно будет быстро работать на GeForce256 DDR или GeForce2 GTS/Ultra.

OpenGL

  Требовательность современных OpenGL-игр к производительности общеизвестна, именно поэтому максимальный режим FSAA здесь всего лишь 2х2 и даже он применим далеко не всегда. Для начала рассмотрим доступные режимы FSAA:

  1.5x1.5 – этот режим имеет слабое сглаживание и алиасинг все равно хорошо заметен. Но зато он не очень сильно снижает скорость и доступен в относительно высоких разрешениях.

  2х2 (LOD Bias) – это режим со сниженной детализацией текстур. Поскольку, как и в случае D3D, он не дает выигрыша в скорости, лучше использовать следующий режим – 2х2.

  Рассмотрим несколько примеров:

Quake 3: Arena

  Это, без сомнения, самая требовательная к мощности ускорителя OGL-игра. На GeForce 256 SDR максимальное разрешение, при котором с FSAA 2x2 скорость остается на приемлемом уровне, это 640х480х32 или 800х600х16 (выбор - 32-х битный цвет или более высокое разрешение - это исключительно дело вкуса каждого). В режиме 1.5х1.5 – на одно разрешение выше (800х600х32 и 1024х768х16). Надо сказать, режим 2х2 обеспечивает очень высокое качество сглаживания, особенно на высоких разрешениях. Давайте посмотрим скриншоты:

FSAA 2x2

FSAA 1.5x1.5

No FSAA

  Качество картинки с включенным FSAA на много лучше, нежели без него. Однако здесь хотелось бы отметить два самых важных для подобного рода игр момента, взаимосвязанных друг с другом. Во-первых, это значительное падение скорости при включенном FSAA (в любом режиме). Особенно это касается более высоких разрешений, чем 640х480. Взгляните на диаграмму, показывающую производительность Creative Annihilator2 (GeForce2 GTS, замеры производились на системе, описанной в первой части обзора драйверов) в различных режимах FSAA и на разных разрешениях, а также без FSAA на тех же разрешениях (применялись стандартные настройки игры Normal и High Quality, каждый режим прогонялся с 16 и 32-битным цветом, а также был использован режим Мах – 1024х768 с максимальными настройками):





  Как мы можем видеть, производительность при разрешении 1024х768х32 c отключенным FSAA гораздо выше, нежели при разрешении 640х480х32 с включенным FSAA 2х2. Плюс к этому - примерно одинаковое качество картинки. Так какой резон значительно понижать разрешение и включать FSAA?

  Таким образом, мы с вами подошли ко второму моменту: в шутерах, от разрешения экрана, зависит точность прицела. То есть, чем больше разрешение, тем точность прицела выше, т.к. уменьшается «шаг» прицела:

Высокое разрешение       Низкое разрешение

  Этот рисунок прекрасно показывает (подтверждает, если хотите J) вышесказанное и это является основной причиной, почему профессиональные игроки предпочитают использовать высокое разрешение с отключенным FSAA, нежели низкое разрешение, но с включенным FSAA.

  Увы, все эти аргументы говорят не в пользу анти-алиасинга. В качестве сравнения и ещё одного примера, мы приведём результаты тех же тестов в Quake3, но на другой системе:

Процессор

Intel Celeron2 566 o/c up to 892 (105MHz FSB)

Оперативная память

128Mb IBM (64+64), PC-100

Материнская плата

Asus P3B-F

Видео карта

Asus AGP-V7100 (GeForce2 MX, 32Mb)

Жесткий диск

IBM DTLA 305020 (20.5Gb, 5400rpm)

Звуковая карта

SB Live! 1024 Player

  Звук не отключался, дабы посмотреть реальную производительность системы в реальной игровой обстановке. Плюс ко всему, была включена компрессия текстур S3TC. Итак, посмотрим на результаты:





  После просмотра результатов хочется одно – прослезиться. Скорость с отключенным анти-алиасингом весьма и весьма впечатляет, однако стоит его включить и тогда – прощай комфортная игра. Сказывается SDR-память, которая не позволяет видеоподсистеме работать быстрее при сложной нагрузке, в отличие от DDR, которая справляется с ней более легко. Учитывая, что производительность GF256 и GF2 MX находится примерно на одном уровне, можно смело сделать вывод, что на более-менее быстродействующих системах эти видео карты смогут дать приемлемый уровень играбельности, с включенным FSAA, лишь при следующих настройках:

  FSAA 1.5x1.5 – режим High Quality с 16-ти битным цветом, либо с 32-х битным, но с минимальной детализацией текстур (положение ползунка 1 или 2), средней детализацией геометрии, вертэксным освещением и билинейной фильтрацией. С такими настройками можно получить скорость в районе 50-ти fps, что позволит вполне комфортно играть.

  FSAA 2x2 – только 640х480х32 со средними настройками, либо 800х600х16, но опять таки с минимальными настройками.

  Стоит ли овчинка выделки, когда в режиме Мах (32-бит цвет), без FSAA, качество картинки гораздо лучше, а скорость – выше, нежели с FSAA с указанными выше настройками!

Quake2

  Это более старая игра, но, тем не менее, на ее движке созданы десятки достойных игр, поэтому ее свойства в режиме FSAA характерны для большинства современных OGL-игр. Никаких визуальных артефактов при работе FSAA замечено не было. Режим 1.5x1.5 применим практически во всех разрешениях. А вот самый качественный режим – 2х2 позволяет максимально комфортно играть только в 1024х768х16 или 800х600х32.

Общие рекомендации

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



Заключение

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



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

Павел Данильченко a.k.a. Quaz (quaz@aaanet.ru)

Отдельное спасибо Monolith-у за помощь в подготовке материала.

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