NVIDIA GeForce 7800 GTX 256MB PCI-E

Часть 4: Transparent antialiasing




СОДЕРЖАНИЕ

  1. Части 1, 2 и 3.
  2. Новые режимы антиалиасинга: асиметричный ответ


NVIDIA GeForce 7800 GTX 256MB PCI-E: Часть 1: Теоретические сведения

NVIDIA GeForce 7800 GTX 256MB PCI-E: Часть 2: Описание карты, конфигурация стенда, результаты синтетических тестов

NVIDIA GeForce 7800 GTX 256MB PCI-E: Часть 3: Игровые тесты, качество АА

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

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

Новые режимы антиалиасинга: асиметричный ответ

В новом поколении видеочипов NVIDIA усовершенствовала уже доступные владельцам NV4x режимы антиалиасинга, добавив возможность гамма коррекции, а также режимы transparent antialiasing. Если с гамма коррекцией при выполнении антиалиасинга мы знакомы еще со времен ATI R300, то transparent antialiasing стал предметом нашего пристального внимания.

Доступные режимы

В драйверах можно выбрать один из двух режимов работы transparent antialiasing: мультисэмплинг и суперсэмплинг. Либо выключить новые режимы вообще (это значение по умолчанию), тогда мы получим антиалиасинг, аналогичный реализованному в чипах NV40-NV45.

Необходимо добавить что активация новых режимов антиалиасинга полностью ортогональна уровню AA, выбираемому приложением или форсируемому пользователем в панели управления. Новые режимы активируются на всех уровнях AA и в той или иной степени улучшают все стандартные режимы от 2x до 8x. На самом деле как таковые transparent antialiasing режимы работают только совместно с multisample антиалиасингом (далее из статьи будет понятно почему), т.е. 2x или 4x. Но 8x режим антиалиасинга является комбинированным режимом, использующим совместно мультисэмплинг и суперсемплинг, в этом случае transparent antialiasing с успехом применяется к мультисэмплинг части.

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

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

Что? Где? Когда?

Пожалуй отвечать на эти вопросы мы будем в обратном порядке.

Когда. В обоих случаях специальные модификации антиалиасинга начинают работать только в особом режиме работы DirectX / OpenGL приложений с буфером кадров. А именно - необходимо чтобы было отключено альфа смешение (alpha blending) и включен альфатест (alpha testing). В этом режиме в буфер кадра выводятся только пиксели, прозрачность которых больше или наоборот меньше некоторого граничного значения (задается приложением) и при этом не происходит смешения цветов.

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

Чтобы ответить на остальные вопросы, рассмотрим набор специальных тестовых изображений. Все изображения были сняты в режиме антиалиасинга 4x и для удобства увеличены в 2 раза. Как известно, начиная с NV40, в режиме 4x все четыре сэмпла получены в режиме мультисэмплинга на основе повернутой решетки (rotated grid MSAA).

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

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

На всех последующих изображениях границы сформированы при помощи полупрозрачных текстур и изображение формируется в вышеупомянутом особом режиме работы с буфером кадров. Посмотрим как с ними справятся новые режимы антиалиасинга.

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

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

Пора делать выводы.

Transparency Adaptive Multisampling

После анализа полученных изображений можно предположить что режим transparency adaptive multisampling представляет собой творческую доработку возможности заложенной в спецификации OpenGL: "alpha to coverage" - GL_SAMPLE_ALPHA_TO_COVERAGE.

В режиме GL_SAMPLE_ALPHA_TO_COVERAGE согласно спецификации OpenGL в зависимости от прозрачности пикселя только часть сэмплов (в нашем случае их всего 4 штуки) попадает в буфер кадра, а остальные отбрасываются. При этом если задано граничное значения альфа-теста, то для пикселей не удовлетворяющих этому значению отбрасываются все сэмплы. В случае transparency adaptive multisampling режима поведение несколько отличается: в буфер кадра выводятся и сэмплы не совсем удовлетворяющие граничному значения альфа-теста. В итоге мы либо получаем изображение ни имеющее резких краев, но по размеру несколько большее тому, что изначально предполагалось программистами / дизайнерами, либо можем получить изображение совсем не соответствуюее тому, что ожидалось как в случае с третьим и четвертым объектами на первом тестовом изображении.

Transparency Adaptive Supersampling

В режиме transparency adaptive supersampling для наших тестовых изображений видеочип очевидно начинает выполнять полноценный суперсэмплинг с той же кратностью, с который должен был работать мультисэмплинг. Используя при этом мультисэмплинг для непрозрачных объектов. Получаем идеальное качество изображения, даже нечего и добавить.

Итого

Оба "прозрачных" (transparency) режима антиалиасинга позволяют убрать "ступеньки" алиасинга на изображениях с полупрозрачными текстурами.

Transparency adaptive multisampling при этом имеет тенденцию "приукрашивать" итоговое изображение, не теряя при этом в скорости выполнения шейдеров. Нравится ли такое приукрашение - решать Вам.

Transparency adaptive supersampling - это честный суперсэмплинг, но только для тех мест изображения, где это необходимо. Соответственно падение скорости при его использовании много меньше, чем при полноэкранном суперсэмплинге. Можно похвалить NVIDIA за реализацию этого режима. Хотя в предыдущей части на скриншотах FarCry мы так и не разглядели преимуществ данного режима.

Недаром статья была озаглавлена "Асиметричный ответ": пока ATI в своих чипах использует доведенный почти до идеала мультисэмплинг, а с представлением технологии CrossFire обещает появление новых комбинированных режимов суперсэмплинг+мультисэмпленг; NVIDIA пошла несколько другим путем – не наращивая мощь антиалиасинга по всем фронтам, а атакуя слабые стороны существующих технологий.

Процессор для тестирования предоставлен компанией




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

Обзор NVIDIA GeForce 7800 GTX 256MB PCI-E

NVIDIA GeForce 7800 GTX 256MB PCI-E

Часть 4: Transparent antialiasing



СОДЕРЖАНИЕ

  1. Части 1, 2 и 3.
  2. Новые режимы антиалиасинга: асиметричный ответ


NVIDIA GeForce 7800 GTX 256MB PCI-E: Часть 1: Теоретические сведения

NVIDIA GeForce 7800 GTX 256MB PCI-E: Часть 2: Описание карты, конфигурация стенда, результаты синтетических тестов

NVIDIA GeForce 7800 GTX 256MB PCI-E: Часть 3: Игровые тесты, качество АА

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

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

Новые режимы антиалиасинга: асиметричный ответ

В новом поколении видеочипов NVIDIA усовершенствовала уже доступные владельцам NV4x режимы антиалиасинга, добавив возможность гамма коррекции, а также режимы transparent antialiasing. Если с гамма коррекцией при выполнении антиалиасинга мы знакомы еще со времен ATI R300, то transparent antialiasing стал предметом нашего пристального внимания.

Доступные режимы

В драйверах можно выбрать один из двух режимов работы transparent antialiasing: мультисэмплинг и суперсэмплинг. Либо выключить новые режимы вообще (это значение по умолчанию), тогда мы получим антиалиасинг, аналогичный реализованному в чипах NV40-NV45.

Необходимо добавить что активация новых режимов антиалиасинга полностью ортогональна уровню AA, выбираемому приложением или форсируемому пользователем в панели управления. Новые режимы активируются на всех уровнях AA и в той или иной степени улучшают все стандартные режимы от 2x до 8x. На самом деле как таковые transparent antialiasing режимы работают только совместно с multisample антиалиасингом (далее из статьи будет понятно почему), т.е. 2x или 4x. Но 8x режим антиалиасинга является комбинированным режимом, использующим совместно мультисэмплинг и суперсемплинг, в этом случае transparent antialiasing с успехом применяется к мультисэмплинг части.

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

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

Что? Где? Когда?

Пожалуй отвечать на эти вопросы мы будем в обратном порядке.

Когда. В обоих случаях специальные модификации антиалиасинга начинают работать только в особом режиме работы DirectX / OpenGL приложений с буфером кадров. А именно - необходимо чтобы было отключено альфа смешение (alpha blending) и включен альфатест (alpha testing). В этом режиме в буфер кадра выводятся только пиксели, прозрачность которых больше или наоборот меньше некоторого граничного значения (задается приложением) и при этом не происходит смешения цветов.

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

Чтобы ответить на остальные вопросы, рассмотрим набор специальных тестовых изображений. Все изображения были сняты в режиме антиалиасинга 4x и для удобства увеличены в 2 раза. Как известно, начиная с NV40, в режиме 4x все четыре сэмпла получены в режиме мультисэмплинга на основе повернутой решетки (rotated grid MSAA).

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

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

На всех последующих изображениях границы сформированы при помощи полупрозрачных текстур и изображение формируется в вышеупомянутом особом режиме работы с буфером кадров. Посмотрим как с ними справятся новые режимы антиалиасинга.

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

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

Пора делать выводы.

Transparency Adaptive Multisampling

После анализа полученных изображений можно предположить что режим transparency adaptive multisampling представляет собой творческую доработку возможности заложенной в спецификации OpenGL: "alpha to coverage" - GL_SAMPLE_ALPHA_TO_COVERAGE.

В режиме GL_SAMPLE_ALPHA_TO_COVERAGE согласно спецификации OpenGL в зависимости от прозрачности пикселя только часть сэмплов (в нашем случае их всего 4 штуки) попадает в буфер кадра, а остальные отбрасываются. При этом если задано граничное значения альфа-теста, то для пикселей не удовлетворяющих этому значению отбрасываются все сэмплы. В случае transparency adaptive multisampling режима поведение несколько отличается: в буфер кадра выводятся и сэмплы не совсем удовлетворяющие граничному значения альфа-теста. В итоге мы либо получаем изображение ни имеющее резких краев, но по размеру несколько большее тому, что изначально предполагалось программистами / дизайнерами, либо можем получить изображение совсем не соответствуюее тому, что ожидалось как в случае с третьим и четвертым объектами на первом тестовом изображении.

Transparency Adaptive Supersampling

В режиме transparency adaptive supersampling для наших тестовых изображений видеочип очевидно начинает выполнять полноценный суперсэмплинг с той же кратностью, с который должен был работать мультисэмплинг. Используя при этом мультисэмплинг для непрозрачных объектов. Получаем идеальное качество изображения, даже нечего и добавить.

Итого

Оба "прозрачных" (transparency) режима антиалиасинга позволяют убрать "ступеньки" алиасинга на изображениях с полупрозрачными текстурами.

Transparency adaptive multisampling при этом имеет тенденцию "приукрашивать" итоговое изображение, не теряя при этом в скорости выполнения шейдеров. Нравится ли такое приукрашение - решать Вам.

Transparency adaptive supersampling - это честный суперсэмплинг, но только для тех мест изображения, где это необходимо. Соответственно падение скорости при его использовании много меньше, чем при полноэкранном суперсэмплинге. Можно похвалить NVIDIA за реализацию этого режима. Хотя в предыдущей части на скриншотах FarCry мы так и не разглядели преимуществ данного режима.

Недаром статья была озаглавлена "Асиметричный ответ": пока ATI в своих чипах использует доведенный почти до идеала мультисэмплинг, а с представлением технологии CrossFire обещает появление новых комбинированных режимов суперсэмплинг+мультисэмпленг; NVIDIA пошла несколько другим путем – не наращивая мощь антиалиасинга по всем фронтам, а атакуя слабые стороны существующих технологий.

Процессор для тестирования предоставлен компанией