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
|
||||
rayleighGain: 8.0, // exposure for the physical sky term
|
||||
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: {
|
||||
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
|
||||
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++) {',
|
||||
'vec3 p = ro + rd * t;',
|
||||
'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 transBefore = exp(-tau);',
|
||||
'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;
|
||||
var ATMO_DISTANCE_FOG = ATMO.distanceFog !== false;
|
||||
var ATMO_MODEL = ATMO.model || {};
|
||||
var ATMO_MODEL_ON = ATMO_MODEL.enabled === true;
|
||||
var ATMO_MODEL_HEIGHT_KM = (typeof ATMO_MODEL.heightKm === 'number')
|
||||
? Math.max(1.0, Math.min(80.0, ATMO_MODEL.heightKm)) : 35.0;
|
||||
var HAZE_CFG = ATMO.haze || {};
|
||||
var ATMO_MODEL_ON = (typeof HAZE_CFG.enabled === 'boolean')
|
||||
? 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_SCALE_HEIGHT_KM = (typeof ATMO_MODEL.scaleHeightKm === 'number')
|
||||
? Math.max(1.0, Math.min(30.0, ATMO_MODEL.scaleHeightKm)) : 8.5;
|
||||
var ATMO_MODEL_SCALE_HEIGHT_KM = (typeof HAZE_CFG.scaleHeightKm === 'number')
|
||||
? 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_DENSITY = (typeof ATMO_MODEL.density === 'number')
|
||||
? Math.max(0.01, Math.min(5.0, ATMO_MODEL.density)) : 0.12;
|
||||
var ATMO_MODEL_GRAY_TAU = (typeof ATMO_MODEL.grayTau === 'number')
|
||||
? Math.max(0.1, Math.min(10.0, ATMO_MODEL.grayTau)) : 1.5;
|
||||
var ATMO_MODEL_GAIN = (typeof ATMO_MODEL.gain === 'number')
|
||||
? Math.max(0.1, Math.min(5.0, ATMO_MODEL.gain)) : 2.0;
|
||||
var ATMO_MODEL_DENSITY = (typeof HAZE_CFG.density === 'number')
|
||||
? Math.max(0.01, Math.min(5.0, HAZE_CFG.density))
|
||||
: ((typeof ATMO_MODEL.density === 'number')
|
||||
? Math.max(0.01, Math.min(5.0, ATMO_MODEL.density)) : 0.25);
|
||||
var ATMO_MODEL_GRAY_TAU = (typeof HAZE_CFG.grayTau === 'number')
|
||||
? 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 CURVATURE_ON = CURV_CFG.enabled !== false;
|
||||
var CURV_EXAG = (typeof CURV_CFG.exaggeration === 'number')
|
||||
@@ -6364,6 +6377,14 @@ window.clouds3dRender = function(target) {
|
||||
}
|
||||
|
||||
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.drawArrays(gl.TRIANGLES, 0, 3);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user