atmosphere: cap haze alpha to avoid hard horizon cut
This commit is contained in:
1 parent
69a00b479b
commit
98e69da3b2
2 files changed
+14
-4
No files matched your search
@@ -320,9 +320,10 @@ window.CONFIG = {
|
||||
enabled: true,
|
||||
heightKm: 60,
|
||||
scaleHeightKm: 8.5,
|
||||
density: 0.25,
|
||||
density: 0.18,
|
||||
grayTau: 1.2,
|
||||
gain: 1.0
|
||||
gain: 1.0,
|
||||
maxAlpha: 0.55
|
||||
},
|
||||
model: {
|
||||
enabled: false // legacy full atmosphere model remains off
|
||||
|
||||
Vendored
+11
-2
@@ -92,6 +92,7 @@ var FRAG_SRC = [
|
||||
'uniform float uAtmoDensity;',
|
||||
'uniform float uAtmoGrayTau;',
|
||||
'uniform float uAtmoGain;',
|
||||
'uniform float uAtmoMaxAlpha;',
|
||||
'uniform float uEarthRadius;',
|
||||
'uniform float uCurvatureOn;',
|
||||
'uniform vec3 uCamPos;',
|
||||
@@ -374,8 +375,9 @@ var FRAG_SRC = [
|
||||
'tau += dtau;',
|
||||
't += step;',
|
||||
'}',
|
||||
'float alpha = clamp(1.0 - exp(-tau), 0.0, 1.0);',
|
||||
'vec3 col = scatter / max(alpha, 1e-4) * uAtmoGain;',
|
||||
'float rawAlpha = clamp(1.0 - exp(-tau), 0.0, 1.0);',
|
||||
'float alpha = clamp(rawAlpha * uAtmoGain, 0.0, uAtmoMaxAlpha);',
|
||||
'vec3 col = scatter / max(rawAlpha, 1e-4);',
|
||||
'gl_FragColor = vec4(col, alpha);',
|
||||
'return;',
|
||||
'}',
|
||||
@@ -859,6 +861,7 @@ function init(canvas) {
|
||||
var uAtmoDensity = gl.getUniformLocation(prog, 'uAtmoDensity');
|
||||
var uAtmoGrayTau = gl.getUniformLocation(prog, 'uAtmoGrayTau');
|
||||
var uAtmoGain = gl.getUniformLocation(prog, 'uAtmoGain');
|
||||
var uAtmoMaxAlpha = gl.getUniformLocation(prog, 'uAtmoMaxAlpha');
|
||||
var uEarthRadius = gl.getUniformLocation(prog, 'uEarthRadius');
|
||||
var uCurvatureOn = gl.getUniformLocation(prog, 'uCurvatureOn');
|
||||
var uCamPos = gl.getUniformLocation(prog, 'uCamPos');
|
||||
@@ -982,6 +985,7 @@ function init(canvas) {
|
||||
uAtmoModelOn: uAtmoModelOn, uAtmoHeightUnits: uAtmoHeightUnits,
|
||||
uAtmoScaleHeightUnits: uAtmoScaleHeightUnits, uAtmoDensity: uAtmoDensity,
|
||||
uAtmoGrayTau: uAtmoGrayTau, uAtmoGain: uAtmoGain,
|
||||
uAtmoMaxAlpha: uAtmoMaxAlpha,
|
||||
uEarthRadius: uEarthRadius,
|
||||
uCurvatureOn: uCurvatureOn, uCamPos: uCamPos,
|
||||
uAtmoBlueColor: uAtmoBlueColor, uAtmoGrayColor: uAtmoGrayColor,
|
||||
@@ -2453,6 +2457,10 @@ 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 ATMO_MODEL_MAX_ALPHA = (typeof HAZE_CFG.maxAlpha === 'number')
|
||||
? Math.max(0.05, Math.min(1.0, HAZE_CFG.maxAlpha))
|
||||
: ((typeof ATMO_MODEL.maxAlpha === 'number')
|
||||
? Math.max(0.05, Math.min(1.0, ATMO_MODEL.maxAlpha)) : 0.55);
|
||||
var CURV_CFG = (window.CONFIG && window.CONFIG.curvature) || {};
|
||||
var CURVATURE_ON = CURV_CFG.enabled !== false;
|
||||
var CURV_EXAG = (typeof CURV_CFG.exaggeration === 'number')
|
||||
@@ -5556,6 +5564,7 @@ window.clouds3dRender = function(target) {
|
||||
gl.uniform1f(s.uAtmoDensity, ATMO_MODEL_DENSITY);
|
||||
gl.uniform1f(s.uAtmoGrayTau, ATMO_MODEL_GRAY_TAU);
|
||||
gl.uniform1f(s.uAtmoGain, ATMO_MODEL_GAIN);
|
||||
gl.uniform1f(s.uAtmoMaxAlpha, ATMO_MODEL_MAX_ALPHA);
|
||||
gl.uniform1f(s.uEarthRadius, EARTH_RADIUS_UNITS);
|
||||
gl.uniform3fv(s.uAtmoBlueColor, ATMO_MODEL_BLUE_COLOR);
|
||||
gl.uniform3fv(s.uAtmoGrayColor, ATMO_MODEL_GRAY_COLOR);
|
||||
|
||||
Reference in new issue
Block a user