Интервью с NVIDIA о FSAA


Dave Barron и Kristof Beets (Beyond 3D) взяли интервью по вопросам FSAA у специалистов NVIDIA. Предлагаю вашему вниманию перевод данного интервью и комментарии его авторов, которые, на мой взгляд, весьма интересны.

Недавно, нам представилась возможность задать несколько вопросов специалистам NVIDIA, чтобы лучше узнать об их способе реализации FSAA. Отвечали нам Derek Perez и Loyd Case. Нам просто очень хочется поблагодарить их за ответы на некоторые вопросы. Их ответы, сопровожденные нашими комментариями, вы найдете ниже.

1. Когда NVIDIA объявила о поддержке FSAA, звучало мнение о том, что это всего лишь программный фокус. Конечно, это оказалось неправдой. Мы понимаем, что ошибка произошла оттого, что вы использовали уже существующие аппаратные возможности и способности таким образом, что получили в итоге FSAA. Можете ли вы по шагам описать нам, начиная с 3D вывода игр, как же, на вашем железе и с вашими драйверами получается на экране конечный результат с антиалайсингом?

NVIDIA осуществляет антиалайсинг аппаратно. Графический процессор рендерит несколько образцов каждого пиксела, которые затем фильтруются для того, чтобы аппаратно получить результирующий пиксел. Нет разницы в требованиях к полосе пропускания памяти между аппаратным методом от NVIDIA (суперсемплинг) и методами, которые применили некоторые из наших конкурентов. В конечном счете, в обоих случаях различные образцы каждого пиксела записываются в буферы кадра, после чего фильтруются для получения конечного пиксела на экране, причем, все это аппаратно. Фактически GeForce2 GTS имеет преимущество над мультичиповыми решениями, так как текстурная полоса пропускания и память, требуемая для хранения текстур, здесь ровно вдвое меньше, ведь в случае мультичипового решения копии текстуры сохраняются в буфере кадра каждого чипа, что требует вдвое большего объема памяти и большей полосы пропускания для каждой текстуры.

2. Есть некоторая путаница по поводу суперсемплинга и мультисемплинга. Можете ли вы объяснить, что NVIDIA понимает под этими понятиями, и какие у каждого метода получения FSAA преимущества и недостатки?

Методы сборки результирующего пиксела из нескольких вариантов весьма субъективны. Точно так же невозможно объективно оценить качество изображения. Количественно качество изображения, в первую очередь, определяется количеством образцов каждого пиксела, а методы сборки и методы фильтрации влияют на качество изображения, но во вторую очередь. Заявление о том, что один из методов сборки имеет "самое лучшее" качество, очень субъективно. NVIDIA создала программируемое ядро фильтров для сборки результирующего пиксела из нескольких образцов пикселей. И пока это наиболее гибкое решение, и вообще отличное от всех других решений фильтров, которые предлагаются конкурентами, что, однако, не делает качество наших фильтров "самым лучшим". Качество изображения вещь очень субъективная, GeForce2 GTS предлагает пользователю выбор между высоким разрешением, антиалайсингом по 2-м образцам, антиалайсингом по 4-м образцам, и антиалайсингом с большим количеством образцов, все с различными характеристиками. Лично я считаю, что изображение в очень высоком разрешении и без антиалайсинга смотрится лучше, так как видно больше деталей. Становится возможным разглядеть больше подробностей издалека, а неясные, скрытые детали становятся видимыми. Один побочный эффект большинства сегодняшних аппаратных методов состоит в том, что линии толщиной в пиксел могут получиться размазанными, а это значит, то что текст в кокпитах, всплывающих дисплеях, циферблаты со шкалами и подобные вещи окажутся трудночитаемыми. Однако если края после антиалайсинга становятся ровнее, это не означает, что для этого не придется пожертвовать чем-то другим.

Разница между вариантами размещения образцов очень неявная, и зависит от личных предпочтений. В то же время, существует четкое количественное разделение — чем больше образцов, тем лучше.

3. FSAA в D3D с драйверами Детонатор 5.16 был проблематичен, а GeForce2 GTS обычно поставляется с этим драйвером. Сообщения о бете Детонатора 5.22 позволяют предположить, что устранение этих проблем близко к успеху. Можете ли вы рассказать нам о том, что это были за трудности, и как NVIDIA преодолела их? Остались ли еще нерешенные вопросы с какими-нибудь D3D играми? Что это за вопросы и как вы намерены их разрешать?

Некоторые старые Direct3D программы производили 2D операции во время текущего этапа 3D рендеринга. OpenGL приложения так не делают, поэтому, таких проблем в OpenGL не возникает. Фактически, выполнение 2D операций во время этапа 3D рендеринга (пара начало сцеы/конец сцены), никогда не одобрялось, но и не возбранялось. В DirectX 8, Microsoft приняла силовые меры для устранения такой возможности, таким образом, в приложениях, использующих DirectX 8, такой проблемы не будет.

4. Существует некоторая путаница в различных FSAA режимах NVIDIA, как в OpenGL, так и в D3D. 4X может означать антиалайсинг по 4-м образцам или антиалайсинг по 16-ти образцам (или, возможно, что-нибудь еще). Не могли бы вы прояснить значение этих режимов и установок в контексте количества использованных образцов на каждый пиксел, получаемого при этом разрешения экрана суперсемплинга (задний буфер) и добавочных улучшений качества картинки (опции фильтрации и обработки мип-мап уровней)?

То, что 3dfx пытается доказать, что нам нужно что-то вроде 16х (16 образцов), чтобы сравниться с их режимом 4x (4 образца) это их личное и, даже судя из перспективы чистых данных, ошибочное мнение. Их карты производят AA либо по 2-м образцам (в серии V5 5x), либо по 4-м образцам (серия V5 6000). Наши карты могут производить АА по различному количеству образцов — от 2-х до 16-ти, при чем, режим АА можно установить при помощи панели управления в наших драйверах. Наши настройки для хорошего качества выглядят гораздо лучше, чем у 3dfx, потому что мы генерируем больше образцов. Если вы хотите сравнить один к одному, то вам нужно сравнить наши настройки 2x с настройками 2x у 3dfx и наши настройки 4x с их 4x. В панели управления 2x настройки это первое деление слева, а стандартное 4x два деления слева.

5. FSAA может значительно улучшить качество картинки, устраняя или уменьшая видимые артефакты. Однако это сильно отражается на производительности. В связи с этим, очень важно предложить потребителю компромисс между скоростью и качеством. Все идет к тому, что большинство драйверов GeForce2 GTS будут иметь ползунок для выбора настроек от низкого до высокого качества D3D FSAA. Можете ли вы прояснить, как эти настройки соответствуют 8 режимам, и как они различаются по качеству?

Антиалайсинг от NVIDIA предлагает более гибкий спектр установок. В режиме OpenGL мы предлагаем следующие установки:

  • 2x режим (2.25x разрешение экрана)
  • 4x режим (2x разрешение экрана, с уровнями детализации (мип-мап) в родном разрешении игры)
  • 4x режим (2x разрешение экрана с мип-мап уровнями в 2x разрешении)

Вторая установка эквивалентна антиалайсингу по 4-м образцам от 3dfx.

Третья установка значительно лучше по качеству изображения, чем антиалайсинг по 4-м образцам от 3dfx, но за счет ощутимого падения скорости.

В Direct3D, NVIDIA предлагает следующие установки антиалайсинга:

  • 2x режим (2x разрешение экрана заднего буфера; суперсемплинг 2x1)
  • 4x режим (задний буфер в разрешении 4х с мип-мап уровнями в разрешении игры)
  • 4x режим (задний буфер с мип-мап уровнями в разрешении 4x)
  • 9x режим (задний буфер в разрешении 9x с мип-мап уровнями в разрешении игры)
  • 9x режим (задний буфер с мип-мап уровнями в разрешении 9x)
  • 16x режим (задний буфер в разрешении 16x с мип-мап уровнями в разрешении игры)
  • 16x режим (задний буфер с мип-мап уровнями в разрешении 16x)

Установки антиалайсинга 9x и 16x дают гораздо лучшее качество изображения, по сравнению с лучшим из того, что может предложить 3dfx, но такие режимы могут довольно сильно отразиться на филрейте.

6. Как уже упоминалось в предыдущем вопросе, FSAA довольно сильно влияет на филрейт и сказывается на производительности. Считаете ли вы, что FSAA — это лучший способ растрачивания огромных запасов филрейта, доступных в продуктах следующих поколений, или, может быть, существуют другие эффекты или возможности, которые будут смотреться гораздо приятнее? Будут ли они различаться для игр разного типа?

В конечном счете, NVIDIA считает антиалайсинг перспективным делом и обеспечит его полную поддержку в DirectX 8.0. Это хорошо сочетается с планами NVIDIA на будущее, имеет огромное значение для новых проектов и защиту вложений разработчиков игр, так как они получат полный набор преимуществ GeForce2 GTS, включая попиксельное затенение, работу со скинами и ускорение операций T&L. И для каждой игры можно будет сделать свой выбор, например, играя в летный имитатор, вы захотите включить АА, а, играя в шутер от первого лица, вы не захотите его включать. Это целиком зависит от воли пользователя и его или ее предпочтений.

Мы постоянно стремимся донести мысль о том, что людям нужна все более и более высокая детализация графики. Разница в деталях между высоким и низким разрешением колоссальна. Уже начали появляться проекты, которые имеют гораздо более улучшенную детализацию, что, правда, не так заметно при низких разрешениях.

7. Джон Кармак в одной из своих последних заметок написал следующее:

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

Я не собираюсь обсуждать реализацию T-буфера. Но, я хочу спросить о потере двух бит цветовой точности на каждый цветовой канал при работе в 16-битном цвете. Не может ли это вызвать размазанность и/или появление полос на изображении с FSAA? Посетители нашего форума сообщали о подобных эффектах при работе с платами на базе GeForce 256 с включенным FSAA. Не в этом ли проблема? Можно ли ее как-нибудь решить, например, рендерить в 16-битный задний буфер (суперсемплинг), а комбинировать уже в 24/32-битный?

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

8. Существует ли разница на уровне процессоров между GeForce 256 и GeForce2 GTS касающаяся осуществления FSAA?

Каждый пиксельный конвейер теперь может обрабатывать две текстуры за такт. Вместе с более высокой тактовой частотой дополнительная тексельная производительность делает антиалайсинг реально применимым на GeForce2 GTS, в то время как на GeForce 256 в большинстве случаев он будет слишком медленным.

9. Вы заявляли, что ваш FSAA будет совместим с DX8 FSAA. Однако, исходя из того, что мы слышали, DX8 для реализации FSAA будет делать не то, что делает для этого GTS. Хотя, конечно, спецификация DX8 постоянно меняется. Все-таки, как вы можете быть уверены в данном случае?

В конечном счете, NVIDIA считает антиалайсинг перспективным делом и обеспечит его полную поддержку в DirectX 8.0. Это хорошо сочетается с планами NVIDIA на будущее, имеет огромное значение для новых проектов и защиту вложений разработчиков игр, так как они получат полный набор преимуществ GeForce2 GTS, включая попиксельное затенение, работу со скинами и ускорение операций T&L. Помните, что в течение последних двух лет, мы поддерживаем больше возможностей DirectX чем любой другой графический процессор, таким образом, можно спокойно заявить, что мы договоримся с DirectX о том, что касается поддержки FSAA.

10. Ясно ли уже, как именно в DirectX 8 будет реализовываться FSAA?

Спецификации DirectX 8.0 еще не были публично оглашены, но мы уверены, что наша реализация антиалайсинга будет поддерживаться.

Комментарии:

На первый вопрос не было дано исчерпывающего ответа. Они дали очень сжатый обзор того, что они делают, но ничего не расписали по шагам. Интересно то, что они привнесли 3dfx в картину своего первого ответа. Даже не пытаюсь уколоть их или еще что-либо, но они сами специально просили нас не упоминать о 3dfx, потому что не хотели об этом говорить, а потом сами же на это пошли. Хм… Более того, они заявили, что 3dfx транжирит полосу пропускания — это неправда. 3dfx не нужно считывать данные текстуры дважды для каждого пиксела, как это пытается представить NVIDIA. Каждый пиксел требует одного поиска текстуры так же, как и в однопроцессорной архитектуре. Для загрузки текстуры, они производят загрузку один раз. Да, конечно, им нужно хранить информацию дважды, но для этого не нужно двойной текстурной полосы пропускания.

На второй вопрос они дали хороший ответ, но, мне кажется, что они отвечали не на тот вопрос. В ответе обсуждаются различные способы осуществления суперсемплинга, хотя мы, в общем-то, спрашивали про мультисемплинг. Мультисемплинг — это использование одного и того же тексела множество раз для получения изображения с антиалайсингом. Преимущества такого пересуперсемплинга в том, что текстурные данные нужно считывать не 2-4 или больше раз, как для суперсемплинга, а только один раз. По существу, это экономит полосу пропускания. Однако здесь есть одна проблема, и она в том, что этот метод мало помогает для текстурного алайсинга. Для осуществления мультисемплинга требуются усовершенствованные методы фильтрации, например, анизатропная. Следует обратить внимание на то, что если антиалайсинг произведен корректно, то нет причины полагать, что изображение отрендеренное в данном разрешении (скажем, 800x600), получится хоть сколько-нибудь размазанным. То, о чем они говорили, может иногда происходить, если получать изображение с антиалайсингом, из изображения большего разрешения. Чтобы это обойти, необходимо установить более высокие мип-мап уровни. NVIDIA нужно просто для каждой настройки AA использовать мип-мап уровни высокого разрешения, а 3dfx необходимо добавить ползунок настройки уровней детализации (LOD Bias). По поводу замечания NVIDIA о том, что нет метода сборки, который дает "гораздо лучшее" качество мы знаем, что это неправда. С чисто технической точки зрения, учитывая теоретическую информацию, мы знаем, что RGSS лучше, чем OGSS. И это подтверждается в реальных ситуациях. Конечно, мнение о том насколько это лучше смотрится, весьма субъективно. Однако я уверен, что если кто-то, будет сравнивать два метода сборки одновременно, будет утверждать, что RGSS выглядит лучше.

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

На четвертый вопрос на самом деле не было отвечено. Мы видели проблему в том, что некоторые люди называют 4X AA, а другие — 2x2 AA. Это одно и то же, ведь мы знаем, что 2x2=4. И это просто приводит к небольшой путанице. Мы знаем, что замечание о том, что Voodoo5 5500 может использовать только 2x AA — неправда. И 5500 и 6000 в состоянии осуществлять 4x (2x2) AA.

Пятый ответ весьма хорош, но, когда говорится о заднем буфере, появляется путаница. Суперсемплированное изображение (которое увеличено до 2.25x, 4x, 9x или 16x) NVIDIA фактически хранит в дополнительном буфере. Как только это изображение собирается до результирующего разрешения, его помещают в задний буфер. Затем содержимое буфера отображается на экране. Мы видим, что когда они говорят о разрешении экрана 4X, они имеют в виду 2x по горизонтали и 2x по вертикали, а не 4x по каждой. Математически 2x2=4. Для 16x, математически получается 4x4=16. Это похоже на то, что делает 3dfx. Однако может возникнуть путаница, когда люди говорят о 2x AA, и после этого будут говорить о 2x2 AA.

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

На вопрос номер 7 дан неверный ответ. Ни 3dfx, ни NVIDIA не получают потери качества при использовании FSAA, фактически, они увеличивают точность, находясь в 16-битах. Как так? Давайте подробно рассмотрим 4X AA на примере 3dfx и NVIDIA. И те, и другие используют 4 образца (в случае с 3dfx, образцы смещены на нецелую величину пиксела) для получения выходного пиксела. Предположим, что перед началом антиалайсинга, этот пиксел имеет значение 10. Теперь используем антиалайсинг, имея 4 образца для этого пиксела. Скажем, значения образцов будут 10, 10, 10 и 11. Нам нужно усреднить их, для того, чтобы получить конечный пиксел после антиалайсинга. Таким образом (10+10+10+11)/4=10.25, что более точно, чем просто 10. Проделывая это по всей сцене, мы получаем улучшение качества цвета. В случае с 3dfx, сборка происходит непосредственно перед тем, как изображение попадает в DAC, таким образом, они выводят картинку с лучшим качеством, причем точность получается в районе 22 бит. NVIDIA приходится хранить информацию в буфере, как в 16 битах, так и в 32. Для того чтобы сохранить производительность, они пользуются 16 битным буфером, так как использование 32 битного буфера повлечет за собой незамедлительное падение производительности. Таким образом, они производят однопроходный дизеринг и сбрасывают цветность до 16 бит. После этого, они могут выводить изображение с антиалайсингом и большим качеством. Если NVIDIA будут использовать 24/32 битный буфер, то они еще сильнее улучшат качество изображения, примерно до уровня 22 бит от 3dfx.

Вопрос 8 в действительности остался без ответа. Мы и сами знаем, что GTS быстрее, чем GF. Однако, из того, что мы знаем о внутренней работе GF и GTS, мы можем точно сказать, что антиалайсинг работает одинаково.

На девятый вопрос было отвечено мило, с забавными маркетинговыми выкрутасами. Из ответа мы видим, что NVIDIA просто выжимает реализацию антиалайсинга из возможностей API, что от них и ожидалось. То же самое, похоже, будет и с DX8, хотя, у NVIDIA больше не должно быть проблем с доступом к линейному буферу кадра.

Подытожив на десятом вопросе, скажем, что до нас дошли слухи, о том, что DX8 будет поддерживать антиалайсинг по методу похожему на метод 3dfx. Однако, как мы заметили в предыдущем параграфе, большой разницы это не создаст. АА по методу NVIDIA также будет работать.

Dave Barron и Kristof Beets (Beyond 3D)




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

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.