diff --git a/src/mol-gl/shader/chunks/apply-fog.glsl.ts b/src/mol-gl/shader/chunks/apply-fog.glsl.ts index de2f323eddddde0d96872e7453b5bb8ada0a00ac..f1700d95bee705e85ffe98c029a0ac8cde85325b 100644 --- a/src/mol-gl/shader/chunks/apply-fog.glsl.ts +++ b/src/mol-gl/shader/chunks/apply-fog.glsl.ts @@ -12,8 +12,19 @@ if (!uTransparentBackground) { gl_FragColor.rgb = mix(gl_FragColor.rgb, uFogColor, fogFactor); } } else { - // pre-multiplied alpha expected for transparent background - gl_FragColor.rgb *= fogAlpha; - gl_FragColor.a = fogAlpha; + #if defined(dRenderVariant_colorDpoit) + if (gl_FragColor.a < 1.0) { + // transparent objects are blended with background color + gl_FragColor.a = fogAlpha; + } else { + // opaque objects need to be pre-multiplied alpha + gl_FragColor.rgb *= fogAlpha; + gl_FragColor.a = fogAlpha; + } + #else + // pre-multiplied alpha expected for transparent background + gl_FragColor.rgb *= fogAlpha; + gl_FragColor.a = fogAlpha; + #endif } `; \ No newline at end of file diff --git a/src/mol-gl/shader/chunks/dpoit-write.glsl.ts b/src/mol-gl/shader/chunks/dpoit-write.glsl.ts index 14598119215233e3500e0d98d90845cdc7755da8..289e4948767194363befe4edf94df93b28045ebc 100644 --- a/src/mol-gl/shader/chunks/dpoit-write.glsl.ts +++ b/src/mol-gl/shader/chunks/dpoit-write.glsl.ts @@ -59,9 +59,9 @@ export const dpoit_write = ` if (fragmentDepth == nearestDepth) { gl_FragColor.rgb += fragColor.rgb * fragColor.a * alphaMultiplier; - gl_FragColor.a = (1.0 - alphaMultiplier * (1.0 - fragColor.a)) * (uTransparentBackground ? fragColor.a : 1.0); + gl_FragColor.a = 1.0 - alphaMultiplier * (1.0 - fragColor.a); } else { - gl_FragData[1] += vec4(fragColor.rgb, fragColor.a * (uTransparentBackground ? fragColor.a : 1.0)); + gl_FragData[1] += fragColor; } } else {