atmosphere: add altitude-thinning distance haze
This commit is contained in:
1 parent
7d75707e74
commit
69a00b479b
2 files changed
+42
-13
No files matched your search
@@ -316,8 +316,16 @@ window.CONFIG = {
|
|||||||
physicalSky: true, // Rayleigh sky scattering instead of pure theme gradient
|
physicalSky: true, // Rayleigh sky scattering instead of pure theme gradient
|
||||||
rayleighGain: 8.0, // exposure for the physical sky term
|
rayleighGain: 8.0, // exposure for the physical sky term
|
||||||
distanceFog: false, // legacy aerial perspective is off
|
distanceFog: false, // legacy aerial perspective is off
|
||||||
|
haze: {
|
||||||
|
enabled: true,
|
||||||
|
heightKm: 60,
|
||||||
|
scaleHeightKm: 8.5,
|
||||||
|
density: 0.25,
|
||||||
|
grayTau: 1.2,
|
||||||
|
gain: 1.0
|
||||||
|
},
|
||||||
model: {
|
model: {
|
||||||
enabled: false // volumetric atmosphere/fog removed
|
enabled: false // legacy full atmosphere model remains off
|
||||||
},
|
},
|
||||||
hazeResidual: 0.30, // surface colour surviving at the full fog distance
|
hazeResidual: 0.30, // surface colour surviving at the full fog distance
|
||||||
cloudBrightness: 1.0, // cloud albedo (theme hue, brightness from the model)
|
cloudBrightness: 1.0, // cloud albedo (theme hue, brightness from the model)
|
||||||
|
|||||||
Vendored
+33
-12
@@ -364,7 +364,7 @@ var FRAG_SRC = [
|
|||||||
'for (int i = 0; i < 32; i++) {',
|
'for (int i = 0; i < 32; i++) {',
|
||||||
'vec3 p = ro + rd * t;',
|
'vec3 p = ro + rd * t;',
|
||||||
'float alt = max(0.0, length(p - C) - R);',
|
'float alt = max(0.0, length(p - C) - R);',
|
||||||
'float dens = exp(-alt / Hs);',
|
'float dens = exp(-alt / Hs) / Hs;',
|
||||||
'float dtau = uAtmoDensity * dens * step;',
|
'float dtau = uAtmoDensity * dens * step;',
|
||||||
'float transBefore = exp(-tau);',
|
'float transBefore = exp(-tau);',
|
||||||
'float grayMix = clamp(tau / max(0.01, uAtmoGrayTau), 0.0, 1.0);',
|
'float grayMix = clamp(tau / max(0.01, uAtmoGrayTau), 0.0, 1.0);',
|
||||||
@@ -2427,19 +2427,32 @@ var ATMO_HAZE_RESIDUAL = (typeof ATMO.hazeResidual === 'number')
|
|||||||
? Math.max(0.02, Math.min(0.95, ATMO.hazeResidual)) : 0.30;
|
? Math.max(0.02, Math.min(0.95, ATMO.hazeResidual)) : 0.30;
|
||||||
var ATMO_DISTANCE_FOG = ATMO.distanceFog !== false;
|
var ATMO_DISTANCE_FOG = ATMO.distanceFog !== false;
|
||||||
var ATMO_MODEL = ATMO.model || {};
|
var ATMO_MODEL = ATMO.model || {};
|
||||||
var ATMO_MODEL_ON = ATMO_MODEL.enabled === true;
|
var HAZE_CFG = ATMO.haze || {};
|
||||||
var ATMO_MODEL_HEIGHT_KM = (typeof ATMO_MODEL.heightKm === 'number')
|
var ATMO_MODEL_ON = (typeof HAZE_CFG.enabled === 'boolean')
|
||||||
? Math.max(1.0, Math.min(80.0, ATMO_MODEL.heightKm)) : 35.0;
|
? HAZE_CFG.enabled
|
||||||
|
: (ATMO_MODEL.enabled === true);
|
||||||
|
var ATMO_MODEL_HEIGHT_KM = (typeof HAZE_CFG.heightKm === 'number')
|
||||||
|
? Math.max(1.0, Math.min(120.0, HAZE_CFG.heightKm))
|
||||||
|
: ((typeof ATMO_MODEL.heightKm === 'number')
|
||||||
|
? Math.max(1.0, Math.min(80.0, ATMO_MODEL.heightKm)) : 60.0);
|
||||||
var ATMO_MODEL_HEIGHT_UNITS = ATMO_MODEL_HEIGHT_KM / KM_PER_TILE;
|
var ATMO_MODEL_HEIGHT_UNITS = ATMO_MODEL_HEIGHT_KM / KM_PER_TILE;
|
||||||
var ATMO_MODEL_SCALE_HEIGHT_KM = (typeof ATMO_MODEL.scaleHeightKm === 'number')
|
var ATMO_MODEL_SCALE_HEIGHT_KM = (typeof HAZE_CFG.scaleHeightKm === 'number')
|
||||||
? Math.max(1.0, Math.min(30.0, ATMO_MODEL.scaleHeightKm)) : 8.5;
|
? Math.max(1.0, Math.min(30.0, HAZE_CFG.scaleHeightKm))
|
||||||
|
: ((typeof ATMO_MODEL.scaleHeightKm === 'number')
|
||||||
|
? Math.max(1.0, Math.min(30.0, ATMO_MODEL.scaleHeightKm)) : 8.5);
|
||||||
var ATMO_MODEL_SCALE_HEIGHT_UNITS = ATMO_MODEL_SCALE_HEIGHT_KM / KM_PER_TILE;
|
var ATMO_MODEL_SCALE_HEIGHT_UNITS = ATMO_MODEL_SCALE_HEIGHT_KM / KM_PER_TILE;
|
||||||
var ATMO_MODEL_DENSITY = (typeof ATMO_MODEL.density === 'number')
|
var ATMO_MODEL_DENSITY = (typeof HAZE_CFG.density === 'number')
|
||||||
? Math.max(0.01, Math.min(5.0, ATMO_MODEL.density)) : 0.12;
|
? Math.max(0.01, Math.min(5.0, HAZE_CFG.density))
|
||||||
var ATMO_MODEL_GRAY_TAU = (typeof ATMO_MODEL.grayTau === 'number')
|
: ((typeof ATMO_MODEL.density === 'number')
|
||||||
? Math.max(0.1, Math.min(10.0, ATMO_MODEL.grayTau)) : 1.5;
|
? Math.max(0.01, Math.min(5.0, ATMO_MODEL.density)) : 0.25);
|
||||||
var ATMO_MODEL_GAIN = (typeof ATMO_MODEL.gain === 'number')
|
var ATMO_MODEL_GRAY_TAU = (typeof HAZE_CFG.grayTau === 'number')
|
||||||
? Math.max(0.1, Math.min(5.0, ATMO_MODEL.gain)) : 2.0;
|
? Math.max(0.1, Math.min(10.0, HAZE_CFG.grayTau))
|
||||||
|
: ((typeof ATMO_MODEL.grayTau === 'number')
|
||||||
|
? Math.max(0.1, Math.min(10.0, ATMO_MODEL.grayTau)) : 1.2);
|
||||||
|
var ATMO_MODEL_GAIN = (typeof HAZE_CFG.gain === 'number')
|
||||||
|
? Math.max(0.1, Math.min(5.0, HAZE_CFG.gain))
|
||||||
|
: ((typeof ATMO_MODEL.gain === 'number')
|
||||||
|
? Math.max(0.1, Math.min(5.0, ATMO_MODEL.gain)) : 1.0);
|
||||||
var CURV_CFG = (window.CONFIG && window.CONFIG.curvature) || {};
|
var CURV_CFG = (window.CONFIG && window.CONFIG.curvature) || {};
|
||||||
var CURVATURE_ON = CURV_CFG.enabled !== false;
|
var CURVATURE_ON = CURV_CFG.enabled !== false;
|
||||||
var CURV_EXAG = (typeof CURV_CFG.exaggeration === 'number')
|
var CURV_EXAG = (typeof CURV_CFG.exaggeration === 'number')
|
||||||
@@ -6364,6 +6377,14 @@ window.clouds3dRender = function(target) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ATMO_MODEL_ON) {
|
if (ATMO_MODEL_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.disable(gl.DEPTH_TEST);
|
||||||
|
gl.depthMask(false);
|
||||||
|
gl.enable(gl.BLEND);
|
||||||
|
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
||||||
gl.uniform1i(s.uMode, 2);
|
gl.uniform1i(s.uMode, 2);
|
||||||
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user