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 {