Как на самом деле работает мультисэмплинг?

Мне очень интересно понять, как работает мультисэмплинг. Я нашел обширную литературу о том, как включить или использовать его, но очень мало информации о том, что он действительно делает для достижения рендеринга с антиалиасингом. Во многих местах я обнаружил противоречивую информацию, которая только еще больше запутала меня.

Обратите внимание, что я знаю, как включить и использовать мультисэмплинг (на самом деле я уже использую его), но я не знаю, какие данные действительно попадают в мультисэмплерные буферы / текстуры и как эти данные используются в конвейере рендеринга.

Я очень хорошо понимаю, как работает суперсэмплинг, но мультисэмплинг все еще имеет некоторые неясные области, которые я хотел бы понять.

вот что говорится в спецификации: (OpenGL 4.2)

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

...

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

...

Во-вторых, каждый фрагмент включает ОБРАЗЦЫ значения глубины и наборы связанных данные вместо единственного значения глубины и набора связанных данных, которые поддерживаются в режиме рендеринга одного образца.

Итак, каждая выборка содержит отдельный цвет, бит покрытия и глубину. В чем отличие от обычного суперсэмплинга? Мне кажется, что это «взвешенная» суперсэмплинг, где каждое конечное значение пикселя определяется значением покрытия его сэмплов, а не простым средним значением, но я очень не уверен в этом. А как насчет координат текстуры на уровне выборки?

Если я сохраню, скажем, нормали в текстуре с множественной выборкой RGBF, буду ли я читать их обратно со «сглаживанием» (то есть с приближением к 0) на краях многоугольника?

Фрагментный шейдер вызывается один раз для каждого фрагмента, если он не использует gl_SampleID, glSampleIn или не имеет квалификатора хранилища 'sample'. Как можно вызвать фрагментный шейдер один раз для каждого фрагмента и получить сглаженный рендеринг?

9
задан user815129 13 January 2012 в 23:20
поделиться