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 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;',
|
||||
'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);
|
||||
|
||||
Reference in new issue
Block a user