clouds: occlude clouds only for terrain above cloud deck

This commit is contained in:
Richard Zink committed 2026-10-12 18:25:27 +02:00
1 parent 8d4ea42e2f
commit 3cc741e86f
1 file changed
+4 -3
+4 -3
View File
@@ -674,8 +674,9 @@ var FRAG_SRC = [
'if (distTex.a > 0.5) {', 'if (distTex.a > 0.5) {',
'float distNorm = (distTex.r * 65536.0 + distTex.g * 256.0 + distTex.b) / 16777215.0;', 'float distNorm = (distTex.r * 65536.0 + distTex.g * 256.0 + distTex.b) / 16777215.0;',
'float dist = distNorm * max(1.0, uFarPlane);', 'float dist = distNorm * max(1.0, uFarPlane);',
'if (dist < tEnter - 0.05) { gl_FragColor = vec4(0.0); return; }', 'vec3 pT = uCamPos + rd * dist;',
'tExit = min(tExit, max(tEnter, dist));', 'float terrainAlt = pT.y + earthDrop(pT.xz);',
'if (terrainAlt > uCloudTop + 0.05) { gl_FragColor = vec4(0.0); return; }',
'}', '}',
'}', '}',
'tExit = min(tExit, tEnter + 30.0);', 'tExit = min(tExit, tEnter + 30.0);',
@@ -6855,7 +6856,7 @@ window.clouds3dRender = function(target) {
gl.activeTexture(gl.TEXTURE7); gl.activeTexture(gl.TEXTURE7);
gl.bindTexture(gl.TEXTURE_2D, terrainDistTex || null); gl.bindTexture(gl.TEXTURE_2D, terrainDistTex || null);
gl.uniform1i(s.uTerrainDistTex, 7); gl.uniform1i(s.uTerrainDistTex, 7);
gl.uniform1f(s.uTerrainDistOk, 0.0); // test: clouds ignore terrain occlusion gl.uniform1f(s.uTerrainDistOk, (terrainDistOk && terrainDistTex) ? 1.0 : 0.0);
gl.disable(gl.DEPTH_TEST); gl.disable(gl.DEPTH_TEST);
gl.depthMask(false); gl.depthMask(false);
gl.enable(gl.BLEND); gl.enable(gl.BLEND);