clouds: use real terrain height for cloud occlusion
This commit is contained in:
1 parent
3cc741e86f
commit
20af6dcdd5
1 file changed
+5
-2
Vendored
+5
-2
@@ -79,6 +79,7 @@ var FRAG_SRC = [
|
|||||||
'uniform sampler2D uElev;', // terrarium RGB height grid, same UV as uGround
|
'uniform sampler2D uElev;', // terrarium RGB height grid, same UV as uGround
|
||||||
'uniform float uElevOn;', // terrain enabled (0/1)
|
'uniform float uElevOn;', // terrain enabled (0/1)
|
||||||
'uniform float uElevScale;', // metres -> world units (incl. exaggeration)
|
'uniform float uElevScale;', // metres -> world units (incl. exaggeration)
|
||||||
|
'uniform float uTerrainExag;', // terrain vertical exaggeration
|
||||||
'uniform vec3 uSunDir;', // unit vector towards the sun (world X,Y,Z)
|
'uniform vec3 uSunDir;', // unit vector towards the sun (world X,Y,Z)
|
||||||
'uniform vec3 uMoonDir;', // unit vector towards the moon (world X,Y,Z)
|
'uniform vec3 uMoonDir;', // unit vector towards the moon (world X,Y,Z)
|
||||||
'uniform sampler2D uSkyTex;', // baked star catalogue + Milky Way (equirect)
|
'uniform sampler2D uSkyTex;', // baked star catalogue + Milky Way (equirect)
|
||||||
@@ -675,7 +676,7 @@ var FRAG_SRC = [
|
|||||||
'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);',
|
||||||
'vec3 pT = uCamPos + rd * dist;',
|
'vec3 pT = uCamPos + rd * dist;',
|
||||||
'float terrainAlt = pT.y + earthDrop(pT.xz);',
|
'float terrainAlt = (pT.y + earthDrop(pT.xz)) / max(1.0, uTerrainExag);',
|
||||||
'if (terrainAlt > uCloudTop + 0.05) { gl_FragColor = vec4(0.0); return; }',
|
'if (terrainAlt > uCloudTop + 0.05) { gl_FragColor = vec4(0.0); return; }',
|
||||||
'}',
|
'}',
|
||||||
'}',
|
'}',
|
||||||
@@ -1103,6 +1104,7 @@ function init(canvas) {
|
|||||||
var uElev = gl.getUniformLocation(prog, 'uElev');
|
var uElev = gl.getUniformLocation(prog, 'uElev');
|
||||||
var uElevOn = gl.getUniformLocation(prog, 'uElevOn');
|
var uElevOn = gl.getUniformLocation(prog, 'uElevOn');
|
||||||
var uElevScale = gl.getUniformLocation(prog, 'uElevScale');
|
var uElevScale = gl.getUniformLocation(prog, 'uElevScale');
|
||||||
|
var uTerrainExag = gl.getUniformLocation(prog, 'uTerrainExag');
|
||||||
var uSunDir = gl.getUniformLocation(prog, 'uSunDir');
|
var uSunDir = gl.getUniformLocation(prog, 'uSunDir');
|
||||||
var uMoonDir = gl.getUniformLocation(prog, 'uMoonDir');
|
var uMoonDir = gl.getUniformLocation(prog, 'uMoonDir');
|
||||||
var uMode = gl.getUniformLocation(prog, 'uMode');
|
var uMode = gl.getUniformLocation(prog, 'uMode');
|
||||||
@@ -1255,7 +1257,7 @@ function init(canvas) {
|
|||||||
uSpeed: uSpeed, uDensity: uDensity, uDayProgress: uDayProgress,
|
uSpeed: uSpeed, uDensity: uDensity, uDayProgress: uDayProgress,
|
||||||
uSunAlt: uSunAlt,
|
uSunAlt: uSunAlt,
|
||||||
uCloudTop: uCloudTop, uCloudBot: uCloudBot,
|
uCloudTop: uCloudTop, uCloudBot: uCloudBot,
|
||||||
uElev: uElev, uElevOn: uElevOn, uElevScale: uElevScale,
|
uElev: uElev, uElevOn: uElevOn, uElevScale: uElevScale, uTerrainExag: uTerrainExag,
|
||||||
uSunDir: uSunDir, uMoonDir: uMoonDir, uMode: uMode,
|
uSunDir: uSunDir, uMoonDir: uMoonDir, uMode: uMode,
|
||||||
uAtmoModelOn: uAtmoModelOn, uAtmoHeightUnits: uAtmoHeightUnits,
|
uAtmoModelOn: uAtmoModelOn, uAtmoHeightUnits: uAtmoHeightUnits,
|
||||||
uAtmoScaleHeightUnits: uAtmoScaleHeightUnits, uAtmoDensity: uAtmoDensity,
|
uAtmoScaleHeightUnits: uAtmoScaleHeightUnits, uAtmoDensity: uAtmoDensity,
|
||||||
@@ -5834,6 +5836,7 @@ window.clouds3dRender = function(target) {
|
|||||||
gl.uniform1i(s.uElev, 2);
|
gl.uniform1i(s.uElev, 2);
|
||||||
gl.uniform1f(s.uElevOn, (elevTexture && TERRAIN_ON > 0.5) ? 1.0 : 0.0);
|
gl.uniform1f(s.uElevOn, (elevTexture && TERRAIN_ON > 0.5) ? 1.0 : 0.0);
|
||||||
gl.uniform1f(s.uElevScale, ELEV_SCALE_UNITS);
|
gl.uniform1f(s.uElevScale, ELEV_SCALE_UNITS);
|
||||||
|
gl.uniform1f(s.uTerrainExag, TERRAIN_EXAG);
|
||||||
var sd = window.__currentSunDir || [0, 0.7, 0.7];
|
var sd = window.__currentSunDir || [0, 0.7, 0.7];
|
||||||
gl.uniform3f(s.uSunDir, sd[0], sd[1], sd[2]);
|
gl.uniform3f(s.uSunDir, sd[0], sd[1], sd[2]);
|
||||||
var md = window.__currentMoonDir || sd;
|
var md = window.__currentMoonDir || sd;
|
||||||
|
|||||||
Reference in new issue
Block a user