clouds: fix cloud pass brace and make clouds denser
This commit is contained in:
1 parent
52ececa917
commit
778c25859e
1 file changed
+10
-5
Vendored
+10
-5
@@ -118,6 +118,7 @@ var FRAG_SRC = [
|
|||||||
'uniform vec3 uAirHazeColor;',
|
'uniform vec3 uAirHazeColor;',
|
||||||
'uniform sampler2D uTerrainDistTex;',
|
'uniform sampler2D uTerrainDistTex;',
|
||||||
'uniform float uCloudsOn;',
|
'uniform float uCloudsOn;',
|
||||||
|
'uniform float uTerrainDistOk;',
|
||||||
'uniform float uFrontHazeOn;',
|
'uniform float uFrontHazeOn;',
|
||||||
'uniform float uFrontHazeDensity;',
|
'uniform float uFrontHazeDensity;',
|
||||||
'uniform float uFrontHazeScaleHeightUnits;',
|
'uniform float uFrontHazeScaleHeightUnits;',
|
||||||
@@ -650,16 +651,18 @@ var FRAG_SRC = [
|
|||||||
'}',
|
'}',
|
||||||
'if (tEnter > 1e8 || tExit <= tEnter) { gl_FragColor = vec4(0.0); return; }',
|
'if (tEnter > 1e8 || tExit <= tEnter) { gl_FragColor = vec4(0.0); return; }',
|
||||||
'vec2 uv = gl_FragCoord.xy / uResolution;',
|
'vec2 uv = gl_FragCoord.xy / uResolution;',
|
||||||
|
'if (uTerrainDistOk > 0.5) {',
|
||||||
'vec4 distTex = texture2D(uTerrainDistTex, uv);',
|
'vec4 distTex = texture2D(uTerrainDistTex, uv);',
|
||||||
'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;',
|
||||||
'tExit = min(tExit, distNorm * max(1.0, uFarPlane));',
|
'tExit = min(tExit, distNorm * max(1.0, uFarPlane));',
|
||||||
'}',
|
'}',
|
||||||
|
'}',
|
||||||
'tExit = min(tExit, tEnter + 30.0);',
|
'tExit = min(tExit, tEnter + 30.0);',
|
||||||
'if (tExit <= tEnter) { gl_FragColor = vec4(0.0); return; }',
|
'if (tExit <= tEnter) { gl_FragColor = vec4(0.0); return; }',
|
||||||
'float stepSize = (tExit - tEnter) / 24.0;',
|
'float stepSize = (tExit - tEnter) / 24.0;',
|
||||||
'float t = tEnter + stepSize * 0.5;',
|
'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 sunUp = smoothstep(-0.20, 0.05, uSunAlt);',
|
||||||
'float cosT = dot(rd, uSunDir);',
|
'float cosT = dot(rd, uSunDir);',
|
||||||
'float phase = 0.30 + 0.70 * pow(max(0.0, cosT), 2.5);',
|
'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 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 moonC = albC * uMoonColor * (0.35 + 0.65 * max(0.0, dot(rd, uMoonDir))) * uMoonInt * 3.0;',
|
||||||
'vec3 cloudCol = direct + ambC + moonC;',
|
'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;',
|
'cloudSum += cloudCol * alpha * trans;',
|
||||||
'trans *= (1.0 - alpha);',
|
'trans *= (1.0 - alpha);',
|
||||||
'if (trans < 0.04) break;',
|
'if (trans < 0.04) break;',
|
||||||
@@ -1129,6 +1132,7 @@ function init(canvas) {
|
|||||||
var uAirHazeColor = gl.getUniformLocation(prog, 'uAirHazeColor');
|
var uAirHazeColor = gl.getUniformLocation(prog, 'uAirHazeColor');
|
||||||
var uTerrainDistTex = gl.getUniformLocation(prog, 'uTerrainDistTex');
|
var uTerrainDistTex = gl.getUniformLocation(prog, 'uTerrainDistTex');
|
||||||
var uCloudsOn = gl.getUniformLocation(prog, 'uCloudsOn');
|
var uCloudsOn = gl.getUniformLocation(prog, 'uCloudsOn');
|
||||||
|
var uTerrainDistOk = gl.getUniformLocation(prog, 'uTerrainDistOk');
|
||||||
var uFrontHazeOn = gl.getUniformLocation(prog, 'uFrontHazeOn');
|
var uFrontHazeOn = gl.getUniformLocation(prog, 'uFrontHazeOn');
|
||||||
var uFrontHazeDensity = gl.getUniformLocation(prog, 'uFrontHazeDensity');
|
var uFrontHazeDensity = gl.getUniformLocation(prog, 'uFrontHazeDensity');
|
||||||
var uFrontHazeScaleHeightUnits = gl.getUniformLocation(prog, 'uFrontHazeScaleHeightUnits');
|
var uFrontHazeScaleHeightUnits = gl.getUniformLocation(prog, 'uFrontHazeScaleHeightUnits');
|
||||||
@@ -1249,7 +1253,7 @@ function init(canvas) {
|
|||||||
uAirHazeGain: uAirHazeGain, uAirHazeMaxAlpha: uAirHazeMaxAlpha,
|
uAirHazeGain: uAirHazeGain, uAirHazeMaxAlpha: uAirHazeMaxAlpha,
|
||||||
uAirHazeColor: uAirHazeColor,
|
uAirHazeColor: uAirHazeColor,
|
||||||
uTerrainDistTex: uTerrainDistTex,
|
uTerrainDistTex: uTerrainDistTex,
|
||||||
uCloudsOn: uCloudsOn,
|
uCloudsOn: uCloudsOn, uTerrainDistOk: uTerrainDistOk,
|
||||||
uFrontHazeOn: uFrontHazeOn, uFrontHazeDensity: uFrontHazeDensity,
|
uFrontHazeOn: uFrontHazeOn, uFrontHazeDensity: uFrontHazeDensity,
|
||||||
uFrontHazeScaleHeightUnits: uFrontHazeScaleHeightUnits,
|
uFrontHazeScaleHeightUnits: uFrontHazeScaleHeightUnits,
|
||||||
uFrontHazeGain: uFrontHazeGain, uFrontHazeMaxAlpha: uFrontHazeMaxAlpha,
|
uFrontHazeGain: uFrontHazeGain, uFrontHazeMaxAlpha: uFrontHazeMaxAlpha,
|
||||||
@@ -6807,14 +6811,15 @@ window.clouds3dRender = function(target) {
|
|||||||
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CLOUDS_ON && terrainDistOk && terrainDistTex) {
|
if (CLOUDS_ON) {
|
||||||
gl.useProgram(s.prog);
|
gl.useProgram(s.prog);
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, s.buf);
|
gl.bindBuffer(gl.ARRAY_BUFFER, s.buf);
|
||||||
gl.enableVertexAttribArray(s.aPos);
|
gl.enableVertexAttribArray(s.aPos);
|
||||||
gl.vertexAttribPointer(s.aPos, 2, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(s.aPos, 2, gl.FLOAT, false, 0, 0);
|
||||||
gl.activeTexture(gl.TEXTURE7);
|
gl.activeTexture(gl.TEXTURE7);
|
||||||
gl.bindTexture(gl.TEXTURE_2D, terrainDistTex);
|
gl.bindTexture(gl.TEXTURE_2D, terrainDistTex || null);
|
||||||
gl.uniform1i(s.uTerrainDistTex, 7);
|
gl.uniform1i(s.uTerrainDistTex, 7);
|
||||||
|
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);
|
||||||
|
|||||||
Reference in new issue
Block a user