Мне очень интересно понять, как работает мультисэмплинг.Я нашел большую литературу о том, как включить или использовать его, но очень мало информации о том, что он действительно делает для достижения сглаженного рендеринга.Во многих местах я обнаружил противоречивую информацию, которая только смутила меня больше.
Обратите внимание, что Я знаю, как включить и использовать мультисэмплинг (я его уже использую), чтоЯ не знаю, какие данные действительно попадают в мультисэмплерные рендеринг-буферы / текстуры и как эти данные используются в конвейере рендеринга.
Я очень хорошо понимаю, как работает суперсэмплинг, но у мультисэмплинга все еще есть некоторыенепонятные области, которые я хотел бы понять.
вот что говорят спецификации: (OpenGL 4.2)
Значения выборки пикселей, включая значения цвета, глубины и трафарета, хранятся в этом буфере (буфере мультисэмплов).Образцы содержат отдельные значения цвета для каждого цвета фрагмента.
...
Во время мультисэмплирования рендеринг содержимое фрагмента пикселя изменяется двумя способами.Во-первых, каждый фрагмент включает значение покрытия с битами SAMPLES.
...
Во-вторых, каждый фрагмент включает значения глубины SAMPLES и наборы связанных данных вместо одного значения глубины и наборасвязанные данные, которые поддерживаются в режиме рендеринга одной выборки.
Таким образом, каждая выборка содержит отдельный цвет, бит покрытия и глубину.В чем отличие от обычного суперсэмплинга?Для меня это выглядит как «взвешенный» суперсэмплинг, где каждое конечное значение пикселя определяется значением покрытия его выборок, а не простым средним значением, но я очень не уверен в этом.А как насчет координат текстуры на уровне семпла?
Если я сохраню, скажем, нормали в многосэмплированной текстуре RGBF, я буду читать их обратно "сглаженными" (то есть приближающимися к 0) по краям многоугольника?
Фрагментный шейдер вызывается один раз для каждого фрагмента, если только он не использует gl_SampleID, glSampleIn или не имеет спецификатора хранения «sample».Как фрагментный шейдер можно вызвать один раз для каждого фрагмента и получить сглаженный рендеринг?