Как использовать мультисэмплинг с "возвратом" во фрагментный шейдер?

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

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

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

1 ответ

Решение

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

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

if (gl_FragCoord.z < nearestDepth)

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

if (gl_FragCoord.z < nearestDepth - 0.0001)

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

Другие вопросы по тегам