Анализ методов сглаживания на основе super-sampling

Продолжение


Какие краевые углы требуют Anti-Aliasing в первую очередь?

Возникает важный вопрос: имеют ли существенное значение близкие к горизонтальным и вертикальным края. Есть несколько аргументов в защиту идеи о том, что их эффективное сглаживание критично. Первый аргумент — гравитация, второй связан с тем, как работают наши глаза, наше зрение. Наверное вы удивитесь, какое отношение имеет гравитация к сглаживанию? Ключ к пониманию её значения лежит в понимании природы этого явления. Смотря вокруг себя вы замечаете, что большинство вас окружающих объектов содержат огромное количество близких к вертикальным и горизонтальным краёв. Сидя за столом, вы знаете, что он стоит горизонтально относительно пола, края компьютерного экрана и самого компьютера перпендикулярны полу и таким образом достаточно вертикальны. Причина этого в гравитации. Если ваш стол не горизонтален, то всё с него просто упадёт и разобьётся. Всего лишь по причине одной небольшой штучки — гравитации. Конечно, нет правила, утверждающего то, что всегда и везде больше горизонтальных и вертикальных краёв. Совершенно не сложно создать игру их избегающую, но большинство игр стремятся достичь полного реализма, а это невозможно без гравитации. Просто подумайте хорошенько. Когда вы играете в стрелялку или симулятор, вы ведёте машину или летите. Вы поступаете так, как поступали бы в реальном мире. Большинство объектов в симулированном мире горизонтальны или вертикальны. Наиболее хорошим примером является конечно же симулятор летательного аппарата. Большее количество времени вы летите по прямой линии, а горизонт представляется в виде прямой горизонтальной линии расположенной на некотором расстоянии от вас. Точно такая же картина наблюдается в гоночных симуляторах. В стрелялках от первого лица вы ходите вокруг зданий, а они обычно состоят из множества горизонтальных и вертикальных деталей и поверхностей. Да вы можете держать голову под каким-то определённым углом, но будете ли вы это делать во время игры?

Наш второй аргумент основывается на особенностях работы человеческого глаза. Вместо погружения в дебри работы наших нейронов, мы просто попытались дать вам испытать эффект на себе. На рисунке 15 вы видите два изображения которые показывают края под разными углами. Объект одинаков на обоих изображениях. Единственное отличие в том, что они повёрнуты относительно друг друга. Изображение слева показывает вам близкие к горизонтальным, вертикальным и диагональным линии. Изображение справа показывает то же самое, но со смещением на угол примерно равный 27o. Вы, наверное, ещё помните, что это критические углы метода OGSS (слева) и RGSS (справа). Держите изображение спереди и продолжайте смотреть на края. Теперь медленно начинайте отодвигать документ дальше от глаз, но продолжайте оценивать относительную сглаженность различных краёв. Если вы смотрите на изображение с экрана монитора, расположите свой стул так, чтобы вы могли медленно отодвигаться назад, продолжая наблюдение за краями изображения. Продолжайте движение до тех пор, пока все линии не будут выглядеть абсолютно сглаженными. Сделайте это перед продолжением чтения текста. ОК, эффект, который вы только пронаблюдали называется Vernier Acuity [6]. Можно измерить минимальное разрешение, при котором глаз в состоянии обнаруживать разрывы (discontinuities). Люди, изучающие зрение очень долгое время, измеряли Vernier Acuity и обнаружили, наши глаза почему-то очень чувствительны к разрывам. Иными словами, они очень чувствительны ко всяким неровностям, ступенчатости.


Рисунок 15: Иллюстрация, демонстрирующая различную чувствительность глаза в зависимости от углов

Очевидно, что чувствительность зависит от контраста, а тестовые изображение, которые вы рассматривали, имеют очень высокую контрастность. Также вы должны были заметить то, что края на правой картинке разглаживались гораздо быстрее, чем края на левой. Это говорит о том, что глаз человека чувствителен к разрывам, особенно по вертикали и горизонтали. Разрывы под другими углами были не так заметны. Из этого можно прийти к выводу, что к сглаживанию краёв, близких к горизонтальному и вертикальному углу, нужно подходить с особой осторожностью, т.к. они наиболее заметны и раздражительны нашему глазу.

Реальное (практическое) качество изображения

Вопрос качества изображения в компьютерных играх всегда был очень щекотливым и сложным. У каждого человека своё собственное мнение о том, что выглядит наилучшим образом. Поэтому вопросу возникало множество дебатов и споров. Тем не менее, приход сглаживания резко сократил количество споров на эту тему. Кроме устранения всевозможных артефактов, AA ещё и просто повышает качество изображения. Теоретическое качество изображения очень важно, т.к. оно показывает нам, что сможет обеспечить наилучшее качество в данной ситуации. Тем не менее очень важно смотреть на то, как выглядит окружающий нас мир. Понимание теории качества изображения может означать очень многое, но оно никогда не сравнится с результатами реального мира. Мы понимаем, как должно выглядеть изображение, где оно должно выглядеть наилучшим образом, а где наихудшим. Однако для полного понимания мы должны увидеть всё это. Для этого нам потребуются хорошие примеры дискретных искажений. Для этого мы будем использовать Relic Homeworld. Почему Homeworld? Homeworld показывает действие AA очень хорошо благодаря своей очень сильной контрастности. Как и в большинстве космических игр, Homeworld использует тёмные фона (космос) и светлые поверхности (корабли). Кроме этого, игра позволяет полное и свободное трёхмерное позиционирование, что даёт нам возможность разглядеть всё под всеми возможными углами. Конечно, не во всех играх артефакты проявляются настолько сильно, как в Homeworld, но Homeworld является отличной точкой отсчёта, практически идеальным примером. Это позволяет нам легко распробовать качество различных видов сглаживания. На рисунке 16 вы видите скриншот из Homeworld с использованием 4х OGSS. Глядя на изображение 16-A мы видим менее чем оптимальное состояние упорядоченных решёток. Здесь эта проблема возникает вследствие недостаточного количества отсчетов. Тем не менее на рисунке 16-B мы видим гораздо более оптимальную ситуацию с упорядоченными решётками и очень хорошее, почти идеальное в этом случае качество. Рисунок 17 показывает Homeworld с использованием RGSS с 2 отсчетами. При более пристальном взгляде на рисунок 17-A, мы видим, что полученное качество практически не уступает качеству OGSS с 4. Это объясняется тем, что края изображения находятся под углом, близком к оптимальному для RGSS. Теперь, обратим своё внимание на 17-B. Мы видим почти самый плохой случай (near-worst-case) для RGSS AA. Даже не смотря на это, качество сглаженного изображения не так уж плохо благодаря тому, что ступеньки очень малы. Также совсем не идеально качество изображения на рисунке 18 с использованием RGSS с 4 отсчетами. Рисунок 18-A заостряет внимание на наиболее оптимальной ситуации с краевым углом. Качество AA изображения значительно превосходит качество как RGSS c 2, так и OGSS c 4, приближаясь к почти идеальному. Рисунок 18-B демонстрирует самый худший случай для RGSS. К какому выводу мы пришли, рассмотрев результаты работы OGSS и RGSS? В среднем оказывается, что качество OGSS c 4 отсчетами незначительно лучше RGSS с 2 во всех случаях, кроме наихудших для RGSS. RGSS с 4 отсчетами обеспечивает прекрасное качество AA в оптимальных условиях, устраняя почти все следы артефактов. В наихудших случаях, RGSS c 4 всё ещё сохраняет качество, сравнимое c OGSS с 4 при оптимальных условиях. Более ранняя теоретическая дискуссия, а теперь и скриншоты проиллюстрировали нам преимущества RGSS.


Рисунок 16: Реальный пример OGSS с 4 отсчетами
  • (a) показывает плохое качество изображения в результате случая плохого угла
  • (b) показывает нормальный угол обеспечивающий приемлемое качество



Рисунок 17: Реальный пример RGSS с 2 отсчетами
  • (a) показывает почти вертикальный край.
  • (b) показывает край около 45°.



Рисунок 18: Реальный пример RGSS с 4 отсчетами
  • (a) показывает почти вертикальный край.
  • (b) показывает край 45°..

Теоретическая "стоимость" сглаживания

В то время как AA одна из самых полезных функций, она также является одной из самых дорогостоящих. В этой части нашей статьи будет сделан краткий анализ затрат производительности, вызванных сглаживанием, реализованным с помощью вышеописанных методов. Первый фактор, влияющий на производительность — скорость заполнения (fillrate). SS, как было объяснено раньше, использует избыточную выборку (множество отсчетов) для выполнения сглаживания. Эти дополнительные отсчеты просто съедают весь потенциал ускорителя по скорости заполнения. В частности, метод, использующий 4 отсчета, требует в четыре раза большего суммарного fillrate, чем без использования AA. Это означает, что если fillrate ограничен, то при сглаживании количество FPS сократится вчетверо. Этот факт приостанавливает использование настоящего SS вне зависимости от расположения отсчетов. Вторым фактором, влияющим на производительность, является пропускная способность памяти. Ширину пропускания очень часто путают с fillrate. Причиной этого является то, что эти понятия очень тесно связаны между собой. В 99% случаях вы никогда не достигнете максимального fillrate, т.к. вы сперва упретёсь в производительность памяти. Определение цвета пикселя требует информации. Нам нужно знать, какие текстуры используются, где находятся полигоны, и т.д. Этот информационный поток ограничен пропускной способностью памяти. Когда мы сравнивали T-Buffer метод RGSS с OGSS, исполняемым при помощи Accumulation Buffer, мы заметили несколько важных отличий. Первое отличие в том, что T-Buffer использует сегментированный буфер памяти. Каждый чип имеет свой собственный буфер памяти для хранения и доступа к текстурам и буферам. Традиционные движки рендеринга, реализующие метод OGSS обычно используют один унифицированный буфер памяти (хотя есть некоторые исключения). Влияние этого отличия просто понять и увидеть. Сегментированная память обеспечивает большую гибкость. Каждый чип имеет независимый доступ к необходимым ему данным; так, один чип может извлекать данные, пока второй занимается записью конечного пикселя. Более того, ширина пропускания эффективно удваивается в случае с двухчиповым вариантом. Мы получаем два независимых интерфейса памяти (текстурные данные должны быть скопированы в локальную память каждого чипа). Даже если бы традиционный акселератор имел вдвое большую чем у чипа частоту памяти, всё равно он не смог бы соревноваться с VSA-100, т.е. во всех остальных архитектурах нет гибкости. Третьим фактором являются эффективно доступные такты. Метод OGSS, реализованный в традиционных акселераторах вынужден выполнять операцию копирования и усреднения во время которой изображение высокого разрешения считывается, усредняется и записывается в задний буфер. Эта операция буквально "замораживает" весь 3D конвейер, т.к. во время всей этой процедуры 3D часть вынуждена ожидать завершения этой стадии. Главная причина в использовании пропускной способности памяти. Операция копирования имеет более высокий приоритет. Она перекрывает доступ 3D ядра к памяти. Нет даже доступа к буферу, куда можно что-то рендерить. Четвёртым и последним фактором является использование памяти. T-Buffer реализация RGSS использует четыре T-Buffers при исполнении 4 отсчетов. Эти буфера имеют размер идентичный размеру конечного сглаженного изображения. Для поддержания высокой скорости, система также использует переднюю и заднюю версию T-Buffer-ов. Это означает, что общее использование буферов с применением T-Buffer равно:

"Конечное Разрешение Изображения По Горизонтали" x "Конечное Разрешение Изображения По Вертикали" x "4 Буфера" x "3 (один Front/Back Буфер и один Z/Stencil Буфер)" x "Bit Depth (16 или 32-bit цвет и Z/Stencil)".

Традиционный OGSS метод требует внекадрового буфера высокого разрешения с разрешением, вчетверо превосходящим финальное изображение, цветовой буфер и Z/Stencil буфер. Также этот метод также требует финальных переднего и заднего буферов (включая Z/Stencil буфер, в зависимости от реализации). Итак, итоговое использование памяти равняется:

"Конечное Разрешение Изображения По Горизонтали" x "Конечное Разрешение Изображения По Вертикали" x "4 (увеличеное разрешение)" x "2 (цветной и Z/Stencil буфера)" x "Bit Depth (16 или 32-bit цвет и глубина Z/Stencil)" + "Конечное Разрешение Изображения По Горизонтали" x "Конечное Разрешение Изображения По Вертикали" x "2 (передний и задний буфера)" x "Bit Depth (16 или 32)" x "(1 или 2, в зависимости от того, необходимо ли наличие Z/Stencil буферов на этом уровне — мы допускаем, что нет)".

По этой формуле мы может рассчитать количество оставшейся под текстуры памяти. Важно отметить, что из-за сегментированной структуры памяти VSA-100 T-Buffer, вам не требуется доступ ко всей текстурной памяти. Оставшаяся текстурная память равномерно распределяется между чипами, каждый чип имеет свой банк для текстур. Все банки содержат одни и те же текстуры, так как банки не объединяются, а работают отдельно друг от друга. Буферы (кадровый и Z/Stencil) совмещены, используют совместный доступ (shared). Итак, для получения финального количества памяти, свободной под текстуры на T-Buffer карте, последняя должна разделить оставшуюся память (после выделения необходимой буферам памяти) на количество чипов VSA-100 (т.е. банков памяти), т.е. на 2 в случае с картами Voodoo5 5000 64 MB и на 4 в случае с Voodoo5 6000 128 MB.

Таблица 1: Общее представление о количестве необходимой памяти (байт) используемой буферами при различных методах AA.

  T-Buffer Традиционный метод Разница
16 bpp 32 bpp 16 bpp 32 bpp 16 bpp 32 bpp
640x480 7372800 14745600 6144000 12288000 1228800 2457600
800x600 11520000 23040000 9600000 19200000 1920000 3840000
1024x768 18874368 37748736 15728640 31457280 3145728 6291456
1280x1024 31457280 62914560 26214400 52428800 5242880 10485760
1600x1200 46080000 92160000 38400000 76800000 7680000 15360000

Таблица 2: Общее представление о количестве оставшейся под текстуры памяти (байт) при различных методах реализации AA.

  16 bpp
640x480 800x600 1024x768 1280x1024 1600x1200
64 Mb плата с T-buffer 28313600 26240000 22562816 16271360 8960000
128 Mb плата с T-buffer 30156800 29120000 27281408 24135680 20480000
32 Mb Обычная плата 25856000 22400000 16271360 5785600 нехватка памяти
64 Mb Обычная плата 57856000 54400000 48271360 37785600 25600000
  32 bpp
640x480 800x600 1024x768 1280x1024 1600x1200
64 Mb плата с T-buffer 24627200 20480000 13125632 542720 нехватка памяти
128 Mb плата с T-buffer 28313600 26240000 22562816 16271360 8960000
32 Mb Обычная плата 19712000 12800000 542720 нехватка памяти нехватка памяти
64 Mb Обычная плата 51712000 44800000 32542720 11571200 нехватка памяти

Таблицы сверху (1 и 2) должны делать очевидным тот факт, что SS, всё равно каким методом, очень недешёвая функция. Количество остающейся под текстуры памяти крайне резко уменьшается при увеличении разрешения конечного изображения. Метод VSA-100 T-Buffer требует 12 отсчетов разных величин (4 передний, 4 задний, 4 Z) для хранения в буферах, но по причине сегментированной структуры памяти, он требует даже больше в связи с тем, что в каждом банке должны храниться одни и те же текстуры (сегментированная структура, использованная в целях увеличения пропускной способности, не допускает совместного использования. Из-за дублирования текстур и из-за того, что используется по сути только 10 величин (1 передний, 1 задний, 4 исходный и 4 Z), традиционная архитектура предоставляет большее количество памяти при использовании 64MB карт, и к сожалению, хотя бы 64 MB DDR карт, но они все ещё не вышли на массовый рынок из-за своей высокой цены. У 64MB T-Buffer продукта всегда остаётся большее количество текстурной памяти, чем у столько же стоящих 32MB традиционных карт.

Заметьте, что некоторые разрешения и значения глубины цвета не доступны по причине нехватки памяти. Это случается при полном исчезновении свободной текстурной памяти или когда часть буферов оказывается в AGP памяти, что приводит к неприемлемому падению производительности. Наличие достаточного количества текстурной памяти очень важно для плавной игры. В ином случае происходит замусоривание текстурной памяти и это серьёзно ухудшает производительность. Поддержка сжатия сплошных текстур (solid texture compression) может помочь уменьшить эффект. В заключительном анализе мы может сделать заключение, что методы SS AA очень "дороги" и используют очень много ресурсов. Практически невозможно предсказать реальную производительность основываясь на теоретических факторах, обсуждённых здесь. В связи с множеством сложных факторов, разница между теорией и практикой имеет склонность принимать огромные размеры. Действительная эффективность 3D акселератора находится под влиянием огромного количества факторов. Это делает все предсказания и прогнозы, основанные на теоретических выкладках, если и не опасными, то по меньшей мере бесполезными. Единственный вывод, о котором мы может говорить с полной уверенностью — включение AA ведёт за собой неминуемую потерю в производительности.

Частые вопросы и недоразумения, касающиеся Anti-Aliasing

В этой части нашей статьи мы хотим развеять два наиболее часто упоминающихся мифа, которые часто используются в роли причины (отмазки) "не использования" AA: "Когда вы запускаете игру в разрешениях 1024x768 и выше, уже не видно всех этих лесенок и артефактов, ну так зачем тогда нам нужен AA?"

Да, это правда, что эффекты некоторых дискретных артефактов уменьшаются, но это не означает, что они полностью исчезают. Пропажа полигонов это один из артефактов, эффект которого действительно сильно снижается с повышением разрешения, но это просто потому, что точки становятся ближе друг к другу по причине более высокого разрешения. Это снижает риск полного отсутствия полигона. А вот что не исчезает, так это наличие ступенчатости. Каждый краешек, находящийся под углом так и останется ступенчатым, каким бы высоким не было разрешение вашего монитора. Опять, возвращаясь к эффекту Vernier Acuity, который используется для определения малейшего отклонения между двумя линиями, которое наблюдатель может заметить, или насколько легко он обнаружит ступеньки. Исследователи провели тесты. Они обнаружили, что среднее значение Vernier Acuity примерно равно 10 угловых секунд. На расстоянии 18 дюймов, это примерно равно 1/1200 дюйма и очень тяжело заметно на 600 dpi принтере. На типичном видео экране, один пиксель примерно в 10-12 раз больше предела резкости и всегда заметен для любого среднего человека с нормальным зрением. На современных мониторах, ступеньки будут заметны всегда, в любом разрешении.

В одном научном докладе было подсчитано, что для уменьшения ступенек понадобится монитор с разрешением, как минимум 4000x4000 пикселей. А для людей с уровнем зрения выше среднего, например для маленьких детей, вообще 18000x18000. Итак, проще говоря, наши глаза очень чувствительны ко всем этим эффектам и современные мониторы просто не в состоянии обеспечивать таких разрешений для скрытия ступенек. Также заметьте, на видимость ступенек огромную роль оказывает контраст, а так как многие игры используют очень низко контрастную окружающую среду (читать — "тёмную и страшную"), значит то, что вы не видите ступенек в высоких разрешениях — ваше счастье, вам повезло. Наиболее важно понять, что сглаженное изображение низкого разрешения часто может выглядеть также хорошо и иногда даже лучше, чем не сглаженное высокого. Причина: не такое сильное раздражение неестественными артефактами изображения [6].

Вторым заблуждением является утверждение: "AA это элементарное размытие…"

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

Заключение

Сглаживание — это, безусловно, важный фактор качества изображения и он будет оставаться им в будущем. До тех пор, пока мониторы не будут в состоянии работать в невообразимо высоких разрешениях. AA обеспечивает ощутимое улучшение качества изображения почти любой 3D игры или приложения. Конечно, он происходит за счёт ощутимой потери производительности. AA, особенно при использовании 4 отсчетов, требует примерно вчетверо большего fillrate и пропускной способности памяти.

Есть распространённое заблуждение, что AA не нужен в таких разрешениях, как 1280x1024 или 1600x1200. Далеко не всегда и не везде. Во многих ситуациях игра будет выглядеть лучше в более низком разрешении, но со сглаживанием, чем та же игра в более высоком разрешении и без сглаживания. Причина в визуальном реализме, в меньшем количестве неестественных артефактов. Конечно, итоговая цель — добиться нормальной работы AA и в высоких разрешениях. Когда дело всё-таки дойдёт до практической реализации этой цели, то применение RGSS несомненно лучше, чем OGSS. И теория и практика подтверждают это. Ясно, что RGSS "заботится" о трудных местах значительно лучше, чем OGSS. Более того, RGSS с 2 отсчетами обеспечивает такое же качество как OGSS c 4. Однако всегда надо помнить, что Видение — это Вера. Чтобы наиболее полно оценить улучшение качества изображения привнесённое нам сглаживанием по достоинству, нужно увидеть его в действии.

Ссылки по теме

  • [1] Aliasing Problems and Anti-aliasing Techniques
  • [2] Programming with OpenGL: Advanced Rendering (Anti-aliasing)
  • [3] 22 bit colour Analysed
  • [4] 3dfx T-Buffer
  • [5] Sampling, Aliasing and Anti-aliasing
  • [6] Human Vision, Anti-aliasing, and the cheap 4000 Line Display, by William J Leler, 1980 ACM
  • [7] The Accumulation Buffer: Hardware Support for High-Quality Rendering, Paul Haeberli and Kurt Akeley, Computer Graphics, Vol 24, No.4, Aug’90, Siggraph‘90 Proceedings


Опубликовано с разрешения 3dfx Interactive, Inc.




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

Анализ методов сглаживания на основе super-sampling. Часть 3.

Анализ методов сглаживания на основе super-sampling

Продолжение

Какие краевые углы требуют Anti-Aliasing в первую очередь?

Возникает важный вопрос: имеют ли существенное значение близкие к горизонтальным и вертикальным края. Есть несколько аргументов в защиту идеи о том, что их эффективное сглаживание критично. Первый аргумент — гравитация, второй связан с тем, как работают наши глаза, наше зрение. Наверное вы удивитесь, какое отношение имеет гравитация к сглаживанию? Ключ к пониманию её значения лежит в понимании природы этого явления. Смотря вокруг себя вы замечаете, что большинство вас окружающих объектов содержат огромное количество близких к вертикальным и горизонтальным краёв. Сидя за столом, вы знаете, что он стоит горизонтально относительно пола, края компьютерного экрана и самого компьютера перпендикулярны полу и таким образом достаточно вертикальны. Причина этого в гравитации. Если ваш стол не горизонтален, то всё с него просто упадёт и разобьётся. Всего лишь по причине одной небольшой штучки — гравитации. Конечно, нет правила, утверждающего то, что всегда и везде больше горизонтальных и вертикальных краёв. Совершенно не сложно создать игру их избегающую, но большинство игр стремятся достичь полного реализма, а это невозможно без гравитации. Просто подумайте хорошенько. Когда вы играете в стрелялку или симулятор, вы ведёте машину или летите. Вы поступаете так, как поступали бы в реальном мире. Большинство объектов в симулированном мире горизонтальны или вертикальны. Наиболее хорошим примером является конечно же симулятор летательного аппарата. Большее количество времени вы летите по прямой линии, а горизонт представляется в виде прямой горизонтальной линии расположенной на некотором расстоянии от вас. Точно такая же картина наблюдается в гоночных симуляторах. В стрелялках от первого лица вы ходите вокруг зданий, а они обычно состоят из множества горизонтальных и вертикальных деталей и поверхностей. Да вы можете держать голову под каким-то определённым углом, но будете ли вы это делать во время игры?

Наш второй аргумент основывается на особенностях работы человеческого глаза. Вместо погружения в дебри работы наших нейронов, мы просто попытались дать вам испытать эффект на себе. На рисунке 15 вы видите два изображения которые показывают края под разными углами. Объект одинаков на обоих изображениях. Единственное отличие в том, что они повёрнуты относительно друг друга. Изображение слева показывает вам близкие к горизонтальным, вертикальным и диагональным линии. Изображение справа показывает то же самое, но со смещением на угол примерно равный 27o. Вы, наверное, ещё помните, что это критические углы метода OGSS (слева) и RGSS (справа). Держите изображение спереди и продолжайте смотреть на края. Теперь медленно начинайте отодвигать документ дальше от глаз, но продолжайте оценивать относительную сглаженность различных краёв. Если вы смотрите на изображение с экрана монитора, расположите свой стул так, чтобы вы могли медленно отодвигаться назад, продолжая наблюдение за краями изображения. Продолжайте движение до тех пор, пока все линии не будут выглядеть абсолютно сглаженными. Сделайте это перед продолжением чтения текста. ОК, эффект, который вы только пронаблюдали называется Vernier Acuity [6]. Можно измерить минимальное разрешение, при котором глаз в состоянии обнаруживать разрывы (discontinuities). Люди, изучающие зрение очень долгое время, измеряли Vernier Acuity и обнаружили, наши глаза почему-то очень чувствительны к разрывам. Иными словами, они очень чувствительны ко всяким неровностям, ступенчатости.


Рисунок 15: Иллюстрация, демонстрирующая различную чувствительность глаза в зависимости от углов

Очевидно, что чувствительность зависит от контраста, а тестовые изображение, которые вы рассматривали, имеют очень высокую контрастность. Также вы должны были заметить то, что края на правой картинке разглаживались гораздо быстрее, чем края на левой. Это говорит о том, что глаз человека чувствителен к разрывам, особенно по вертикали и горизонтали. Разрывы под другими углами были не так заметны. Из этого можно прийти к выводу, что к сглаживанию краёв, близких к горизонтальному и вертикальному углу, нужно подходить с особой осторожностью, т.к. они наиболее заметны и раздражительны нашему глазу.

Реальное (практическое) качество изображения

Вопрос качества изображения в компьютерных играх всегда был очень щекотливым и сложным. У каждого человека своё собственное мнение о том, что выглядит наилучшим образом. Поэтому вопросу возникало множество дебатов и споров. Тем не менее, приход сглаживания резко сократил количество споров на эту тему. Кроме устранения всевозможных артефактов, AA ещё и просто повышает качество изображения. Теоретическое качество изображения очень важно, т.к. оно показывает нам, что сможет обеспечить наилучшее качество в данной ситуации. Тем не менее очень важно смотреть на то, как выглядит окружающий нас мир. Понимание теории качества изображения может означать очень многое, но оно никогда не сравнится с результатами реального мира. Мы понимаем, как должно выглядеть изображение, где оно должно выглядеть наилучшим образом, а где наихудшим. Однако для полного понимания мы должны увидеть всё это. Для этого нам потребуются хорошие примеры дискретных искажений. Для этого мы будем использовать Relic Homeworld. Почему Homeworld? Homeworld показывает действие AA очень хорошо благодаря своей очень сильной контрастности. Как и в большинстве космических игр, Homeworld использует тёмные фона (космос) и светлые поверхности (корабли). Кроме этого, игра позволяет полное и свободное трёхмерное позиционирование, что даёт нам возможность разглядеть всё под всеми возможными углами. Конечно, не во всех играх артефакты проявляются настолько сильно, как в Homeworld, но Homeworld является отличной точкой отсчёта, практически идеальным примером. Это позволяет нам легко распробовать качество различных видов сглаживания. На рисунке 16 вы видите скриншот из Homeworld с использованием 4х OGSS. Глядя на изображение 16-A мы видим менее чем оптимальное состояние упорядоченных решёток. Здесь эта проблема возникает вследствие недостаточного количества отсчетов. Тем не менее на рисунке 16-B мы видим гораздо более оптимальную ситуацию с упорядоченными решётками и очень хорошее, почти идеальное в этом случае качество. Рисунок 17 показывает Homeworld с использованием RGSS с 2 отсчетами. При более пристальном взгляде на рисунок 17-A, мы видим, что полученное качество практически не уступает качеству OGSS с 4. Это объясняется тем, что края изображения находятся под углом, близком к оптимальному для RGSS. Теперь, обратим своё внимание на 17-B. Мы видим почти самый плохой случай (near-worst-case) для RGSS AA. Даже не смотря на это, качество сглаженного изображения не так уж плохо благодаря тому, что ступеньки очень малы. Также совсем не идеально качество изображения на рисунке 18 с использованием RGSS с 4 отсчетами. Рисунок 18-A заостряет внимание на наиболее оптимальной ситуации с краевым углом. Качество AA изображения значительно превосходит качество как RGSS c 2, так и OGSS c 4, приближаясь к почти идеальному. Рисунок 18-B демонстрирует самый худший случай для RGSS. К какому выводу мы пришли, рассмотрев результаты работы OGSS и RGSS? В среднем оказывается, что качество OGSS c 4 отсчетами незначительно лучше RGSS с 2 во всех случаях, кроме наихудших для RGSS. RGSS с 4 отсчетами обеспечивает прекрасное качество AA в оптимальных условиях, устраняя почти все следы артефактов. В наихудших случаях, RGSS c 4 всё ещё сохраняет качество, сравнимое c OGSS с 4 при оптимальных условиях. Более ранняя теоретическая дискуссия, а теперь и скриншоты проиллюстрировали нам преимущества RGSS.


Рисунок 16: Реальный пример OGSS с 4 отсчетами
  • (a) показывает плохое качество изображения в результате случая плохого угла
  • (b) показывает нормальный угол обеспечивающий приемлемое качество



Рисунок 17: Реальный пример RGSS с 2 отсчетами
  • (a) показывает почти вертикальный край.
  • (b) показывает край около 45°.



Рисунок 18: Реальный пример RGSS с 4 отсчетами
  • (a) показывает почти вертикальный край.
  • (b) показывает край 45°..

Теоретическая "стоимость" сглаживания

В то время как AA одна из самых полезных функций, она также является одной из самых дорогостоящих. В этой части нашей статьи будет сделан краткий анализ затрат производительности, вызванных сглаживанием, реализованным с помощью вышеописанных методов. Первый фактор, влияющий на производительность — скорость заполнения (fillrate). SS, как было объяснено раньше, использует избыточную выборку (множество отсчетов) для выполнения сглаживания. Эти дополнительные отсчеты просто съедают весь потенциал ускорителя по скорости заполнения. В частности, метод, использующий 4 отсчета, требует в четыре раза большего суммарного fillrate, чем без использования AA. Это означает, что если fillrate ограничен, то при сглаживании количество FPS сократится вчетверо. Этот факт приостанавливает использование настоящего SS вне зависимости от расположения отсчетов. Вторым фактором, влияющим на производительность, является пропускная способность памяти. Ширину пропускания очень часто путают с fillrate. Причиной этого является то, что эти понятия очень тесно связаны между собой. В 99% случаях вы никогда не достигнете максимального fillrate, т.к. вы сперва упретёсь в производительность памяти. Определение цвета пикселя требует информации. Нам нужно знать, какие текстуры используются, где находятся полигоны, и т.д. Этот информационный поток ограничен пропускной способностью памяти. Когда мы сравнивали T-Buffer метод RGSS с OGSS, исполняемым при помощи Accumulation Buffer, мы заметили несколько важных отличий. Первое отличие в том, что T-Buffer использует сегментированный буфер памяти. Каждый чип имеет свой собственный буфер памяти для хранения и доступа к текстурам и буферам. Традиционные движки рендеринга, реализующие метод OGSS обычно используют один унифицированный буфер памяти (хотя есть некоторые исключения). Влияние этого отличия просто понять и увидеть. Сегментированная память обеспечивает большую гибкость. Каждый чип имеет независимый доступ к необходимым ему данным; так, один чип может извлекать данные, пока второй занимается записью конечного пикселя. Более того, ширина пропускания эффективно удваивается в случае с двухчиповым вариантом. Мы получаем два независимых интерфейса памяти (текстурные данные должны быть скопированы в локальную память каждого чипа). Даже если бы традиционный акселератор имел вдвое большую чем у чипа частоту памяти, всё равно он не смог бы соревноваться с VSA-100, т.е. во всех остальных архитектурах нет гибкости. Третьим фактором являются эффективно доступные такты. Метод OGSS, реализованный в традиционных акселераторах вынужден выполнять операцию копирования и усреднения во время которой изображение высокого разрешения считывается, усредняется и записывается в задний буфер. Эта операция буквально "замораживает" весь 3D конвейер, т.к. во время всей этой процедуры 3D часть вынуждена ожидать завершения этой стадии. Главная причина в использовании пропускной способности памяти. Операция копирования имеет более высокий приоритет. Она перекрывает доступ 3D ядра к памяти. Нет даже доступа к буферу, куда можно что-то рендерить. Четвёртым и последним фактором является использование памяти. T-Buffer реализация RGSS использует четыре T-Buffers при исполнении 4 отсчетов. Эти буфера имеют размер идентичный размеру конечного сглаженного изображения. Для поддержания высокой скорости, система также использует переднюю и заднюю версию T-Buffer-ов. Это означает, что общее использование буферов с применением T-Buffer равно:

"Конечное Разрешение Изображения По Горизонтали" x "Конечное Разрешение Изображения По Вертикали" x "4 Буфера" x "3 (один Front/Back Буфер и один Z/Stencil Буфер)" x "Bit Depth (16 или 32-bit цвет и Z/Stencil)".

Традиционный OGSS метод требует внекадрового буфера высокого разрешения с разрешением, вчетверо превосходящим финальное изображение, цветовой буфер и Z/Stencil буфер. Также этот метод также требует финальных переднего и заднего буферов (включая Z/Stencil буфер, в зависимости от реализации). Итак, итоговое использование памяти равняется:

"Конечное Разрешение Изображения По Горизонтали" x "Конечное Разрешение Изображения По Вертикали" x "4 (увеличеное разрешение)" x "2 (цветной и Z/Stencil буфера)" x "Bit Depth (16 или 32-bit цвет и глубина Z/Stencil)" + "Конечное Разрешение Изображения По Горизонтали" x "Конечное Разрешение Изображения По Вертикали" x "2 (передний и задний буфера)" x "Bit Depth (16 или 32)" x "(1 или 2, в зависимости от того, необходимо ли наличие Z/Stencil буферов на этом уровне — мы допускаем, что нет)".

По этой формуле мы может рассчитать количество оставшейся под текстуры памяти. Важно отметить, что из-за сегментированной структуры памяти VSA-100 T-Buffer, вам не требуется доступ ко всей текстурной памяти. Оставшаяся текстурная память равномерно распределяется между чипами, каждый чип имеет свой банк для текстур. Все банки содержат одни и те же текстуры, так как банки не объединяются, а работают отдельно друг от друга. Буферы (кадровый и Z/Stencil) совмещены, используют совместный доступ (shared). Итак, для получения финального количества памяти, свободной под текстуры на T-Buffer карте, последняя должна разделить оставшуюся память (после выделения необходимой буферам памяти) на количество чипов VSA-100 (т.е. банков памяти), т.е. на 2 в случае с картами Voodoo5 5000 64 MB и на 4 в случае с Voodoo5 6000 128 MB.

Таблица 1: Общее представление о количестве необходимой памяти (байт) используемой буферами при различных методах AA.

  T-Buffer Традиционный метод Разница
16 bpp 32 bpp 16 bpp 32 bpp 16 bpp 32 bpp
640x480 7372800 14745600 6144000 12288000 1228800 2457600
800x600 11520000 23040000 9600000 19200000 1920000 3840000
1024x768 18874368 37748736 15728640 31457280 3145728 6291456
1280x1024 31457280 62914560 26214400 52428800 5242880 10485760
1600x1200 46080000 92160000 38400000 76800000 7680000 15360000

Таблица 2: Общее представление о количестве оставшейся под текстуры памяти (байт) при различных методах реализации AA.

  16 bpp
640x480 800x600 1024x768 1280x1024 1600x1200
64 Mb плата с T-buffer 28313600 26240000 22562816 16271360 8960000
128 Mb плата с T-buffer 30156800 29120000 27281408 24135680 20480000
32 Mb Обычная плата 25856000 22400000 16271360 5785600 нехватка памяти
64 Mb Обычная плата 57856000 54400000 48271360 37785600 25600000
  32 bpp
640x480 800x600 1024x768 1280x1024 1600x1200
64 Mb плата с T-buffer 24627200 20480000 13125632 542720 нехватка памяти
128 Mb плата с T-buffer 28313600 26240000 22562816 16271360 8960000
32 Mb Обычная плата 19712000 12800000 542720 нехватка памяти нехватка памяти
64 Mb Обычная плата 51712000 44800000 32542720 11571200 нехватка памяти

Таблицы сверху (1 и 2) должны делать очевидным тот факт, что SS, всё равно каким методом, очень недешёвая функция. Количество остающейся под текстуры памяти крайне резко уменьшается при увеличении разрешения конечного изображения. Метод VSA-100 T-Buffer требует 12 отсчетов разных величин (4 передний, 4 задний, 4 Z) для хранения в буферах, но по причине сегментированной структуры памяти, он требует даже больше в связи с тем, что в каждом банке должны храниться одни и те же текстуры (сегментированная структура, использованная в целях увеличения пропускной способности, не допускает совместного использования. Из-за дублирования текстур и из-за того, что используется по сути только 10 величин (1 передний, 1 задний, 4 исходный и 4 Z), традиционная архитектура предоставляет большее количество памяти при использовании 64MB карт, и к сожалению, хотя бы 64 MB DDR карт, но они все ещё не вышли на массовый рынок из-за своей высокой цены. У 64MB T-Buffer продукта всегда остаётся большее количество текстурной памяти, чем у столько же стоящих 32MB традиционных карт.

Заметьте, что некоторые разрешения и значения глубины цвета не доступны по причине нехватки памяти. Это случается при полном исчезновении свободной текстурной памяти или когда часть буферов оказывается в AGP памяти, что приводит к неприемлемому падению производительности. Наличие достаточного количества текстурной памяти очень важно для плавной игры. В ином случае происходит замусоривание текстурной памяти и это серьёзно ухудшает производительность. Поддержка сжатия сплошных текстур (solid texture compression) может помочь уменьшить эффект. В заключительном анализе мы может сделать заключение, что методы SS AA очень "дороги" и используют очень много ресурсов. Практически невозможно предсказать реальную производительность основываясь на теоретических факторах, обсуждённых здесь. В связи с множеством сложных факторов, разница между теорией и практикой имеет склонность принимать огромные размеры. Действительная эффективность 3D акселератора находится под влиянием огромного количества факторов. Это делает все предсказания и прогнозы, основанные на теоретических выкладках, если и не опасными, то по меньшей мере бесполезными. Единственный вывод, о котором мы может говорить с полной уверенностью — включение AA ведёт за собой неминуемую потерю в производительности.

Частые вопросы и недоразумения, касающиеся Anti-Aliasing

В этой части нашей статьи мы хотим развеять два наиболее часто упоминающихся мифа, которые часто используются в роли причины (отмазки) "не использования" AA: "Когда вы запускаете игру в разрешениях 1024x768 и выше, уже не видно всех этих лесенок и артефактов, ну так зачем тогда нам нужен AA?"

Да, это правда, что эффекты некоторых дискретных артефактов уменьшаются, но это не означает, что они полностью исчезают. Пропажа полигонов это один из артефактов, эффект которого действительно сильно снижается с повышением разрешения, но это просто потому, что точки становятся ближе друг к другу по причине более высокого разрешения. Это снижает риск полного отсутствия полигона. А вот что не исчезает, так это наличие ступенчатости. Каждый краешек, находящийся под углом так и останется ступенчатым, каким бы высоким не было разрешение вашего монитора. Опять, возвращаясь к эффекту Vernier Acuity, который используется для определения малейшего отклонения между двумя линиями, которое наблюдатель может заметить, или насколько легко он обнаружит ступеньки. Исследователи провели тесты. Они обнаружили, что среднее значение Vernier Acuity примерно равно 10 угловых секунд. На расстоянии 18 дюймов, это примерно равно 1/1200 дюйма и очень тяжело заметно на 600 dpi принтере. На типичном видео экране, один пиксель примерно в 10-12 раз больше предела резкости и всегда заметен для любого среднего человека с нормальным зрением. На современных мониторах, ступеньки будут заметны всегда, в любом разрешении.

В одном научном докладе было подсчитано, что для уменьшения ступенек понадобится монитор с разрешением, как минимум 4000x4000 пикселей. А для людей с уровнем зрения выше среднего, например для маленьких детей, вообще 18000x18000. Итак, проще говоря, наши глаза очень чувствительны ко всем этим эффектам и современные мониторы просто не в состоянии обеспечивать таких разрешений для скрытия ступенек. Также заметьте, на видимость ступенек огромную роль оказывает контраст, а так как многие игры используют очень низко контрастную окружающую среду (читать — "тёмную и страшную"), значит то, что вы не видите ступенек в высоких разрешениях — ваше счастье, вам повезло. Наиболее важно понять, что сглаженное изображение низкого разрешения часто может выглядеть также хорошо и иногда даже лучше, чем не сглаженное высокого. Причина: не такое сильное раздражение неестественными артефактами изображения [6].

Вторым заблуждением является утверждение: "AA это элементарное размытие…"

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

Заключение

Сглаживание — это, безусловно, важный фактор качества изображения и он будет оставаться им в будущем. До тех пор, пока мониторы не будут в состоянии работать в невообразимо высоких разрешениях. AA обеспечивает ощутимое улучшение качества изображения почти любой 3D игры или приложения. Конечно, он происходит за счёт ощутимой потери производительности. AA, особенно при использовании 4 отсчетов, требует примерно вчетверо большего fillrate и пропускной способности памяти.

Есть распространённое заблуждение, что AA не нужен в таких разрешениях, как 1280x1024 или 1600x1200. Далеко не всегда и не везде. Во многих ситуациях игра будет выглядеть лучше в более низком разрешении, но со сглаживанием, чем та же игра в более высоком разрешении и без сглаживания. Причина в визуальном реализме, в меньшем количестве неестественных артефактов. Конечно, итоговая цель — добиться нормальной работы AA и в высоких разрешениях. Когда дело всё-таки дойдёт до практической реализации этой цели, то применение RGSS несомненно лучше, чем OGSS. И теория и практика подтверждают это. Ясно, что RGSS "заботится" о трудных местах значительно лучше, чем OGSS. Более того, RGSS с 2 отсчетами обеспечивает такое же качество как OGSS c 4. Однако всегда надо помнить, что Видение — это Вера. Чтобы наиболее полно оценить улучшение качества изображения привнесённое нам сглаживанием по достоинству, нужно увидеть его в действии.

Ссылки по теме

  • [1] Aliasing Problems and Anti-aliasing Techniques
  • [2] Programming with OpenGL: Advanced Rendering (Anti-aliasing)
  • [3] 22 bit colour Analysed
  • [4] 3dfx T-Buffer
  • [5] Sampling, Aliasing and Anti-aliasing
  • [6] Human Vision, Anti-aliasing, and the cheap 4000 Line Display, by William J Leler, 1980 ACM
  • [7] The Accumulation Buffer: Hardware Support for High-Quality Rendering, Paul Haeberli and Kurt Akeley, Computer Graphics, Vol 24, No.4, Aug’90, Siggraph‘90 Proceedings


Опубликовано с разрешения 3dfx Interactive, Inc.