3DGiТоги, апрель 2002 года: Исследование Full Screen AntiAliasing (FSAA)


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

Что такое, собственно, антиалиасинг и с чем его едят? Чтобы ответить на этот вопрос, надо обратиться к физике и к лингвистике. С лингвистикой всё просто. "Анти" означает "противо", "лиасинг" значит "линейность". Получается, что антилинейность. Но это лишь половина правды. Вторую половину правды мы получим, после обращения к физике. Ведь изображение на мониторе состоит из определенного количества пикселей по вертикали и определенного количества пикселей по горизонтали. Таким образом, строго вертикальная линия или строго горизонтальная линия будет выглядеть весьма ровно, так как пиксели будут размещаться строго друг под другом в случае вертикальной линии или строго рядом друг с другом в случае горизонтальной линии. Если же линия будет рисоваться под каким-либо углом, то она не будет выглядеть ровно, а будет "рваной", в силу того, что пиксели располагаются в двумерной матрице, размеры которой соответствуют разрешению экрана. Получается так называемая "лесенка". Казалось бы, безвыходное положение! Ведь невозможно изменить физику мониторов производимых ранее и производящихся сейчас. Но, как говаривал всемирно известный барон, безвыходных положений не бывает. На самом деле, физику изменить нельзя, но можно обмануть глаза и сознание пользователя. Именно этим и занимается технология антиалиасинга. В ее задачу входит сглаживание кривых. А способы могут быть весьма различны при одном алгоритме.
Поскольку задача поставлена достаточно четко алгоритм или принцип работы такой. Поскольку физику поменять нельзя, на помощь приходит визуальный обман. Так как цвет одного пикселя может кодироваться 8-ю битами минимум и 32-мя битами, как максимум (можно на самом деле и больше, но на обычном мониторе вы вряд ли сможете выставить, например, 64-х битный цвет, а уж увидеть его глазами и различить точно не сможете в силу физики человеческого глаза), можно совершить подмену цвета. Поясню на простом примере. Есть два цвета, например, белый и черный. Оба цвета достаточно противоположны друг другу, чтобы при наложении линии одного из них на другой была видна четкая граница. То есть, если на белом фоне в нашей матрице провести черную линии, она не будет абсолютно ровной, только если она не горизонтальна или вертикальна. Она получится как бы "рваной". Для того, чтобы она выглядела менее "рваной" надо места разрывов или, по-другому, места смещений "замазать". "Замазывание" суть есть смешение цветов. В нашем случае это смешение белого и черного. В результате этого смешения у нас получится новый цвет — серый. Он проявится с двух сторон от места смещения. В большинстве случаев, исходный цвет линии сохранится, но в частных случаях полученный цвет может и полностью заместить исходный цвет линии. Весьма немаловажен здесь так же и размер исходной матрицы. Например, если матрица имеет размер популярного разрешения 800 на 600, но линия будет достаточно сильно "изломана", однако, если матрица увеличится в размере в два раза, то есть станет 1600 на 1200, то "изломы" внешне будут уже не так заметны в силу минимизации мест смещения за счет увеличения размера матрицы, так как одна и та же картинка должна помещаться в матрице 800 на 600 и 1600 на 1200. То есть, при большем размере матрицы увеличивается ее разрядность и соответственно размер пикселя уменьшается. В принципе, использовать антиалиасинг в разрешении 1600 на 1200 это скорее прихоть, чем необходимость в отличии от разрешения 800 на 600. Это если говорить в целом о технологии, но это лишь простая часть. На самом деле всё несколько сложнее.

Чтобы еще больше запутать читателя ;-) мы приведем выдержки из статей, взятых с сайта Мир НВИДИА и несколько дополненных нами.
Сглаживание основывается на том, что каждый пиксель разбивается на несколько субпикселей. Цвет каждого пикселя определяется усреднением по какому-либо закону цветов всех субпикселей, которые находятся внутри пикселя. При этом, хотя физически разрешение остается прежним, эффективное разрешение значительно повышается.
Два наиболее часто применяемых подхода — это "Суперсэмплинг" и "Мультисэмплинг". Оба они основаны на том, что цвет каждого пикселя вычисляется путем смешивания цветов субпикселей (сэмплов). Но сэмплы в этих методах генерируются по-разному.
Суперсэмплинг — это самый простой и прямолинейный метод сглаживания. Он заключается в том, что изображение рассчитывается в виртуальном разрешении, в несколько раз превосходящем реальное экранное. После чего оно масштабируется и фильтруется до итогового разрешения. При этом цвет каждого пикселя реального разрешения вычисляется на основе нескольких субпикселей виртуального. Это позволяет значительно повысить качество изображения, но при этом нагрузка на ускоритель возрастает в несколько раз и скорость при этом, соответственно, падает. Вызвано это тем, что вместо одного цвета для пикселя, приходится рассчитывать в несколько раз больше, например, при формуле антиалиасинга 2x2 в разрешении 800x600 ускорителю придется обсчитать разрешение 800x2 x 600x2, то есть 1600x1200.
Мультисэмплинг — гораздо более хитрый и интеллектуальный метод сглаживания. Правильнее это называть даже не метод, а скорее инструмент. Идея, по сути, очень проста: зачем просто так тупо вычислять N субпикселей для каждого пикселя? Ведь, уже рассчитанные субпиксели, во многих случаях, можно использовать несколько раз, для формирования не одного, а нескольких результирующих пикселей. С другой стороны, в некоторых участках изображения, сглаживание не требуется вовсе, так зачем рассчитывать их по нескольким субпикселям? Достаточно и одного. И, наоборот, в других участках нужно очень хорошее качество сглаживания и там можно рассчитать очень много субпикселей. Этот инструмент позволяет не только значительно сэкономить ресурсы ускорителя, но и получить лучшее качество сглаживания! Этот инструмент может использоваться как угодно и, качество сглаживания и скорость зависят от конкретной реализации, которую выбрал разработчик ускорителя или игры.

Теперь мы познакомим вас с конкретными реализациями антиалиасинга от производителей. Начнем с самого необычного и самого оригинального по своей сути решения от компании Matrox.
Технология полноэкранного сглаживания, реализованная в Parhelia-512 на сегодняшний день аналогов не имеет. Посему, должна быть похвалена, и несомненно может считаться достаточно близкой к идеалу. По своей сути, это суперсэмплинг, до 16 отсчетов на одну точку экрана. Но, выполняется он ТОЛЬКО (!) для точек принадлежащих краям полигонов (всего 3..5% типичной сцены). Основное преимущество очевидно: в отличие от мултисэмплинга избыточные данные не хранятся в памяти и не пересылаются по шине! Суммарный размер буфера кадра возрастает лишь незначительно, не более чем вдвое, даже при максимальной 16x установке. Для определения граничных пикселей используется специальный быстрый проход рендеринга, когда ускоритель в отдельном буфере помечает только граничные пиксели полигонов, не вычисляя значения текстур и не закрашивая промежуточных точек. Кроме того, т.к. обрабатываются только края полигонов, не возникает свойственной FSAA и некоторым гибридным MSAA техникам потери четкости текстур. Однако, столь интеллектуальный метод AA способен вызывать артефакты в некоторых случаях. Кроме того, он не может корректно обрабатывать сглаживание границ перемешаных с полупрозрачными полигонами (например облака, туман, стекла, огонь в играх).

На этом теоритическую часть мы закончим и перейдем к количественным показателям.

Количественные тесты мы снимали на двух игровых тестах один под управлением DirectX и второй OpenGL. Все данные были получены на стенде на базе Pentium4 под управлением Windows XP. Инструментарий соответственно 3DMark2001 SE и Serious Sam: The Second Encounter.

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

Замечание.

В последних версиях драйверов от NVIDIA антиалиасинг на картах GeForce4 и GeForce4 MX стал работать весьма странно. Был применем для убыстрения тяжелого вида антиалиасинга 4x некий алгоритм, который пока сложно идентифицировать. Я приведу скриншоты и попробую рассказать, как теперь выглядит сглаживание от NVIDIA на данных картах.

Антиалиасинг выключен:



Антиалиасинг 2x:



Антиалиасинг Quincunx:



Антиалиасинг 4x:



К сожалению, на скриншотах не видно самого интересного. При этом, в режиме антиалиасинга 4x наблюдается эффект дрожания. Границы объектов сотрясаются мелкой дрожью, причем, это настолько раздражает, что использовать данный режим становится невозможным. Будем надеяться, что это ошибка в драйвере и в новых версиях будет исправлена, а не станет возможностью (фичей).

Хочется отдельно сказать про карты на базе XABRE. Ее антиалиасинг это просто тихий ужас. Либо вся получаемая картинка замылена, либо антиалиасинг весьма странен. Смотрите на скриншотах сами и делайте выводы сами. Мы же в свою очередь крайне не рекомендуем вам использовать какой-либо антиалиасинг на картах этого типа.




Дополнительно

3DGiТоги, апрель 2002 года: Исследование Full Screen AntiAliasing (FSAA)

3DGiТоги, апрель 2002 года: Исследование Full Screen AntiAliasing (FSAA)

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

Что такое, собственно, антиалиасинг и с чем его едят? Чтобы ответить на этот вопрос, надо обратиться к физике и к лингвистике. С лингвистикой всё просто. "Анти" означает "противо", "лиасинг" значит "линейность". Получается, что антилинейность. Но это лишь половина правды. Вторую половину правды мы получим, после обращения к физике. Ведь изображение на мониторе состоит из определенного количества пикселей по вертикали и определенного количества пикселей по горизонтали. Таким образом, строго вертикальная линия или строго горизонтальная линия будет выглядеть весьма ровно, так как пиксели будут размещаться строго друг под другом в случае вертикальной линии или строго рядом друг с другом в случае горизонтальной линии. Если же линия будет рисоваться под каким-либо углом, то она не будет выглядеть ровно, а будет "рваной", в силу того, что пиксели располагаются в двумерной матрице, размеры которой соответствуют разрешению экрана. Получается так называемая "лесенка". Казалось бы, безвыходное положение! Ведь невозможно изменить физику мониторов производимых ранее и производящихся сейчас. Но, как говаривал всемирно известный барон, безвыходных положений не бывает. На самом деле, физику изменить нельзя, но можно обмануть глаза и сознание пользователя. Именно этим и занимается технология антиалиасинга. В ее задачу входит сглаживание кривых. А способы могут быть весьма различны при одном алгоритме.
Поскольку задача поставлена достаточно четко алгоритм или принцип работы такой. Поскольку физику поменять нельзя, на помощь приходит визуальный обман. Так как цвет одного пикселя может кодироваться 8-ю битами минимум и 32-мя битами, как максимум (можно на самом деле и больше, но на обычном мониторе вы вряд ли сможете выставить, например, 64-х битный цвет, а уж увидеть его глазами и различить точно не сможете в силу физики человеческого глаза), можно совершить подмену цвета. Поясню на простом примере. Есть два цвета, например, белый и черный. Оба цвета достаточно противоположны друг другу, чтобы при наложении линии одного из них на другой была видна четкая граница. То есть, если на белом фоне в нашей матрице провести черную линии, она не будет абсолютно ровной, только если она не горизонтальна или вертикальна. Она получится как бы "рваной". Для того, чтобы она выглядела менее "рваной" надо места разрывов или, по-другому, места смещений "замазать". "Замазывание" суть есть смешение цветов. В нашем случае это смешение белого и черного. В результате этого смешения у нас получится новый цвет — серый. Он проявится с двух сторон от места смещения. В большинстве случаев, исходный цвет линии сохранится, но в частных случаях полученный цвет может и полностью заместить исходный цвет линии. Весьма немаловажен здесь так же и размер исходной матрицы. Например, если матрица имеет размер популярного разрешения 800 на 600, но линия будет достаточно сильно "изломана", однако, если матрица увеличится в размере в два раза, то есть станет 1600 на 1200, то "изломы" внешне будут уже не так заметны в силу минимизации мест смещения за счет увеличения размера матрицы, так как одна и та же картинка должна помещаться в матрице 800 на 600 и 1600 на 1200. То есть, при большем размере матрицы увеличивается ее разрядность и соответственно размер пикселя уменьшается. В принципе, использовать антиалиасинг в разрешении 1600 на 1200 это скорее прихоть, чем необходимость в отличии от разрешения 800 на 600. Это если говорить в целом о технологии, но это лишь простая часть. На самом деле всё несколько сложнее.

Чтобы еще больше запутать читателя ;-) мы приведем выдержки из статей, взятых с сайта Мир НВИДИА и несколько дополненных нами.
Сглаживание основывается на том, что каждый пиксель разбивается на несколько субпикселей. Цвет каждого пикселя определяется усреднением по какому-либо закону цветов всех субпикселей, которые находятся внутри пикселя. При этом, хотя физически разрешение остается прежним, эффективное разрешение значительно повышается.
Два наиболее часто применяемых подхода — это "Суперсэмплинг" и "Мультисэмплинг". Оба они основаны на том, что цвет каждого пикселя вычисляется путем смешивания цветов субпикселей (сэмплов). Но сэмплы в этих методах генерируются по-разному.
Суперсэмплинг — это самый простой и прямолинейный метод сглаживания. Он заключается в том, что изображение рассчитывается в виртуальном разрешении, в несколько раз превосходящем реальное экранное. После чего оно масштабируется и фильтруется до итогового разрешения. При этом цвет каждого пикселя реального разрешения вычисляется на основе нескольких субпикселей виртуального. Это позволяет значительно повысить качество изображения, но при этом нагрузка на ускоритель возрастает в несколько раз и скорость при этом, соответственно, падает. Вызвано это тем, что вместо одного цвета для пикселя, приходится рассчитывать в несколько раз больше, например, при формуле антиалиасинга 2x2 в разрешении 800x600 ускорителю придется обсчитать разрешение 800x2 x 600x2, то есть 1600x1200.
Мультисэмплинг — гораздо более хитрый и интеллектуальный метод сглаживания. Правильнее это называть даже не метод, а скорее инструмент. Идея, по сути, очень проста: зачем просто так тупо вычислять N субпикселей для каждого пикселя? Ведь, уже рассчитанные субпиксели, во многих случаях, можно использовать несколько раз, для формирования не одного, а нескольких результирующих пикселей. С другой стороны, в некоторых участках изображения, сглаживание не требуется вовсе, так зачем рассчитывать их по нескольким субпикселям? Достаточно и одного. И, наоборот, в других участках нужно очень хорошее качество сглаживания и там можно рассчитать очень много субпикселей. Этот инструмент позволяет не только значительно сэкономить ресурсы ускорителя, но и получить лучшее качество сглаживания! Этот инструмент может использоваться как угодно и, качество сглаживания и скорость зависят от конкретной реализации, которую выбрал разработчик ускорителя или игры.

Теперь мы познакомим вас с конкретными реализациями антиалиасинга от производителей. Начнем с самого необычного и самого оригинального по своей сути решения от компании Matrox.
Технология полноэкранного сглаживания, реализованная в Parhelia-512 на сегодняшний день аналогов не имеет. Посему, должна быть похвалена, и несомненно может считаться достаточно близкой к идеалу. По своей сути, это суперсэмплинг, до 16 отсчетов на одну точку экрана. Но, выполняется он ТОЛЬКО (!) для точек принадлежащих краям полигонов (всего 3..5% типичной сцены). Основное преимущество очевидно: в отличие от мултисэмплинга избыточные данные не хранятся в памяти и не пересылаются по шине! Суммарный размер буфера кадра возрастает лишь незначительно, не более чем вдвое, даже при максимальной 16x установке. Для определения граничных пикселей используется специальный быстрый проход рендеринга, когда ускоритель в отдельном буфере помечает только граничные пиксели полигонов, не вычисляя значения текстур и не закрашивая промежуточных точек. Кроме того, т.к. обрабатываются только края полигонов, не возникает свойственной FSAA и некоторым гибридным MSAA техникам потери четкости текстур. Однако, столь интеллектуальный метод AA способен вызывать артефакты в некоторых случаях. Кроме того, он не может корректно обрабатывать сглаживание границ перемешаных с полупрозрачными полигонами (например облака, туман, стекла, огонь в играх).

На этом теоритическую часть мы закончим и перейдем к количественным показателям.

Количественные тесты мы снимали на двух игровых тестах один под управлением DirectX и второй OpenGL. Все данные были получены на стенде на базе Pentium4 под управлением Windows XP. Инструментарий соответственно 3DMark2001 SE и Serious Sam: The Second Encounter.

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

Замечание.

В последних версиях драйверов от NVIDIA антиалиасинг на картах GeForce4 и GeForce4 MX стал работать весьма странно. Был применем для убыстрения тяжелого вида антиалиасинга 4x некий алгоритм, который пока сложно идентифицировать. Я приведу скриншоты и попробую рассказать, как теперь выглядит сглаживание от NVIDIA на данных картах.

Антиалиасинг выключен:



Антиалиасинг 2x:



Антиалиасинг Quincunx:



Антиалиасинг 4x:



К сожалению, на скриншотах не видно самого интересного. При этом, в режиме антиалиасинга 4x наблюдается эффект дрожания. Границы объектов сотрясаются мелкой дрожью, причем, это настолько раздражает, что использовать данный режим становится невозможным. Будем надеяться, что это ошибка в драйвере и в новых версиях будет исправлена, а не станет возможностью (фичей).

Хочется отдельно сказать про карты на базе XABRE. Ее антиалиасинг это просто тихий ужас. Либо вся получаемая картинка замылена, либо антиалиасинг весьма странен. Смотрите на скриншотах сами и делайте выводы сами. Мы же в свою очередь крайне не рекомендуем вам использовать какой-либо антиалиасинг на картах этого типа.