首页 > 解决方案 > 如何在片段着色器中使用带有“返回”的多重采样?

问题描述

我通过深度剥离绘制透明图形,当我渲染到多重采样时结果很难看(出现网格)

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 时完全相同。

标签: openglmultisampling

解决方案


仅在片段语言中可用,gl_FragCoord 是一个输入变量,其中包含片段的窗口相对坐标 (x, y, z, 1/w) 值。如果是多重采样,这个值可以是像素内的任何位置 [ !!! ]

PS 深度剥离使用严格的深度比较,如果我们获得“像素内任何位置”的深度是不可能的。代替

if (gl_FragCoord.z < nearestDepth)

利用

if (gl_FragCoord.z < nearestDepth - 0.0001)

(这是第一个粗略的解决方案)


推荐阅读