Путаница по поводу MSAA - PullRequest
       37

Путаница по поводу MSAA

0 голосов
/ 12 апреля 2020

Я изучал MSAA и как он работает. Я понимаю концепцию, как это работает и что за этим стоит. В основном, если центр треугольника покрывает центр пикселя, это обрабатывается (в случае не-msaa). Однако, если мсаа участвует. Скажем, 4xmsaa, тогда он выберет 4 другие точки в качестве подвыборки. Пиксельный шейдер будет выполняться за пиксель. Однако окклюзия и тест покрытия будут применяться для каждого субпикселя. Я запутался в том, что представляю пиксель в виде маленьких квадратов на экране, и я не мог понять, как точки подвыборки определяются внутри прямоугольника выборки. Как компьютер знает, что один образец пикселей суб-выборки. И если есть только один квадрат, то как определяются цвета для выборки (если есть один квадрат, то должен быть только один цвет). Наконец, как каждый подвыборка может иметь различное значение глубины, если это был в основном один и тот же пиксель. Спасибо!

1 Ответ

0 голосов
/ 12 апреля 2020

В основном, если центр треугольника покрывает центр пикселя, это обрабатывается (в случае не-msaa).

Нет, это не имеет смысла. Центр треугольника - это просто точка, и эта точка, попадающая в центр пикселя, ничего не значит. Стандартное правило растеризации: если центр пикселя находится внутри треугольника, создается фрагмент (со специальными правилами для случаев, когда центр пикселя лежит точно на границе треугольника).

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

Понятия не имею, что вы подразумеваете под «образцом прямоугольника», но оставим это в стороне: если вы используете некоторую координатную систему отсчета, где пиксель составляет 1x1 единицу площади, вы можете просто использовать дробные части описание местоположения в пикселе.

Пространство окна OpenGL по умолчанию использует соглашение, где (0,0) - левый нижний угол нижнего левого пикселя, а (width,height) - верхний правый угол верхнего правый пиксель, и все центры пикселей имеют половину целых чисел .5.

Растеризатор реального графического процессора работает с представлениями с фиксированной точкой , а D3D spe c требует что он имеет по меньшей мере 8 битов дробной точности для положений субпикселя (GL оставляет точную точность до разработчика).

Обратите внимание, что в этот момент растр пикселей вообще не имеет значения. Образец покрытия просто проверяет, лежит ли какая-либо 2D-точка внутри или снаружи 2D-треугольника, и точка всегда является математически бесконечно малой сущностью с площадью 0. Соглашения для систем координат, в которых можно выполнить этот расчет, могут быть произвольно определены .

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

Когда вы используете мультисэмплинг, вы всегда используете мультисэмплированный кадровый буфер, что означает, что для каждого пикселя не существует одного цвета, глубины, ... значения, но есть n (ваш мультисэмплинг, обычно от 2 до 16 включительно). Вам понадобится дополнительный проход для вычисления значений для каждого пикселя, необходимых для отображения сглаженных результатов (API grpahics может скрыть это от вас, когда вы выполняете в frambebuffer по умолчанию, но когда вы работаете с пользовательскими целями рендеринга, вы должны сделать это вручную).

...