Как использовать мультисэмплинг с «возвратом» во фрагментный шейдер? - PullRequest
0 голосов
/ 22 января 2019

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

vec4 fragColor = texelFetch(frontTexture, ivec2(gl_FragCoord.xy), 0); 
if (gl_FragCoord.z < nearestDepth) {
// Skip this depth in the peeling algorithm
return;
}
fragColor += someColor;

Без «if return» все в порядке (но мне нужно это «if»).Сетка точно такая же, как когда я использую mipmapping с неравномерным управлением потоком.

1 Ответ

0 голосов
/ 26 января 2019

Доступно только на языке фрагмента. Gl_FragCoord - это входная переменная, которая содержит значения относительной координаты окна (x, y, z, 1 / w) для фрагмента. При многократной выборке это значение может быть для любого местоположения в пикселе [ !!! ]

P.S. Глубинный пилинг использует строгое сравнение глубины, это невозможно, если мы получим глубину «для любого места в пикселе». Вместо

if (gl_FragCoord.z < nearestDepth)

использование

if (gl_FragCoord.z < nearestDepth - 0.0001)

(это первое грубое решение)

...