clouds: fix cloud pass brace and make clouds denser

This commit is contained in:
Richard Zink committed 2026-10-12 18:04:02 +02:00
1 parent 52ececa917
commit 778c25859e
1 file changed
+14 -9
+14 -9
View File
@@ -118,6 +118,7 @@ var FRAG_SRC = [
'uniform vec3 uAirHazeColor;',
'uniform sampler2D uTerrainDistTex;',
'uniform float uCloudsOn;',
'uniform float uTerrainDistOk;',
'uniform float uFrontHazeOn;',
'uniform float uFrontHazeDensity;',
'uniform float uFrontHazeScaleHeightUnits;',
@@ -650,16 +651,18 @@ var FRAG_SRC = [
'}',
'if (tEnter > 1e8 || tExit <= tEnter) { gl_FragColor = vec4(0.0); return; }',
'vec2 uv = gl_FragCoord.xy / uResolution;',
'vec4 distTex = texture2D(uTerrainDistTex, uv);',
'if (distTex.a > 0.5) {',
'float distNorm = (distTex.r * 65536.0 + distTex.g * 256.0 + distTex.b) / 16777215.0;',
'tExit = min(tExit, distNorm * max(1.0, uFarPlane));',
'if (uTerrainDistOk > 0.5) {',
'vec4 distTex = texture2D(uTerrainDistTex, uv);',
'if (distTex.a > 0.5) {',
'float distNorm = (distTex.r * 65536.0 + distTex.g * 256.0 + distTex.b) / 16777215.0;',
'tExit = min(tExit, distNorm * max(1.0, uFarPlane));',
'}',
'}',
'tExit = min(tExit, tEnter + 30.0);',
'if (tExit <= tEnter) { gl_FragColor = vec4(0.0); return; }',
'float stepSize = (tExit - tEnter) / 24.0;',
'float t = tEnter + stepSize * 0.5;',
'float baseThresh = mix(0.72, 0.40, uDensity);',
'float baseThresh = mix(0.55, 0.25, uDensity);',
'float sunUp = smoothstep(-0.20, 0.05, uSunAlt);',
'float cosT = dot(rd, uSunDir);',
'float phase = 0.30 + 0.70 * pow(max(0.0, cosT), 2.5);',
@@ -680,7 +683,7 @@ var FRAG_SRC = [
'vec3 ambC = albC * max(vec3(uSkyAmb), uStarAmb * vec3(0.7, 0.85, 1.0)) * 1.7;',
'vec3 moonC = albC * uMoonColor * (0.35 + 0.65 * max(0.0, dot(rd, uMoonDir))) * uMoonInt * 3.0;',
'vec3 cloudCol = direct + ambC + moonC;',
'float alpha = clamp(d * stepSize * 1.30, 0.0, 1.0);',
'float alpha = clamp(d * stepSize * 2.20, 0.0, 1.0);',
'cloudSum += cloudCol * alpha * trans;',
'trans *= (1.0 - alpha);',
'if (trans < 0.04) break;',
@@ -1129,6 +1132,7 @@ function init(canvas) {
var uAirHazeColor = gl.getUniformLocation(prog, 'uAirHazeColor');
var uTerrainDistTex = gl.getUniformLocation(prog, 'uTerrainDistTex');
var uCloudsOn = gl.getUniformLocation(prog, 'uCloudsOn');
var uTerrainDistOk = gl.getUniformLocation(prog, 'uTerrainDistOk');
var uFrontHazeOn = gl.getUniformLocation(prog, 'uFrontHazeOn');
var uFrontHazeDensity = gl.getUniformLocation(prog, 'uFrontHazeDensity');
var uFrontHazeScaleHeightUnits = gl.getUniformLocation(prog, 'uFrontHazeScaleHeightUnits');
@@ -1249,7 +1253,7 @@ function init(canvas) {
uAirHazeGain: uAirHazeGain, uAirHazeMaxAlpha: uAirHazeMaxAlpha,
uAirHazeColor: uAirHazeColor,
uTerrainDistTex: uTerrainDistTex,
uCloudsOn: uCloudsOn,
uCloudsOn: uCloudsOn, uTerrainDistOk: uTerrainDistOk,
uFrontHazeOn: uFrontHazeOn, uFrontHazeDensity: uFrontHazeDensity,
uFrontHazeScaleHeightUnits: uFrontHazeScaleHeightUnits,
uFrontHazeGain: uFrontHazeGain, uFrontHazeMaxAlpha: uFrontHazeMaxAlpha,
@@ -6807,14 +6811,15 @@ window.clouds3dRender = function(target) {
gl.drawArrays(gl.TRIANGLES, 0, 3);
}
if (CLOUDS_ON && terrainDistOk && terrainDistTex) {
if (CLOUDS_ON) {
gl.useProgram(s.prog);
gl.bindBuffer(gl.ARRAY_BUFFER, s.buf);
gl.enableVertexAttribArray(s.aPos);
gl.vertexAttribPointer(s.aPos, 2, gl.FLOAT, false, 0, 0);
gl.activeTexture(gl.TEXTURE7);
gl.bindTexture(gl.TEXTURE_2D, terrainDistTex);
gl.bindTexture(gl.TEXTURE_2D, terrainDistTex || null);
gl.uniform1i(s.uTerrainDistTex, 7);
gl.uniform1f(s.uTerrainDistOk, (terrainDistOk && terrainDistTex) ? 1.0 : 0.0);
gl.disable(gl.DEPTH_TEST);
gl.depthMask(false);
gl.enable(gl.BLEND);