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,
|
enabled: true,
|
||||||
heightKm: 60,
|
heightKm: 60,
|
||||||
scaleHeightKm: 8.5,
|
scaleHeightKm: 8.5,
|
||||||
density: 0.25,
|
density: 0.18,
|
||||||
grayTau: 1.2,
|
grayTau: 1.2,
|
||||||
gain: 1.0
|
gain: 1.0,
|
||||||
|
maxAlpha: 0.55
|
||||||
},
|
},
|
||||||
model: {
|
model: {
|
||||||
enabled: false // legacy full atmosphere model remains off
|
enabled: false // legacy full atmosphere model remains off
|
||||||
|
|||||||
Vendored
+11
-2
@@ -92,6 +92,7 @@ var FRAG_SRC = [
|
|||||||
'uniform float uAtmoDensity;',
|
'uniform float uAtmoDensity;',
|
||||||
'uniform float uAtmoGrayTau;',
|
'uniform float uAtmoGrayTau;',
|
||||||
'uniform float uAtmoGain;',
|
'uniform float uAtmoGain;',
|
||||||
|
'uniform float uAtmoMaxAlpha;',
|
||||||
'uniform float uEarthRadius;',
|
'uniform float uEarthRadius;',
|
||||||
'uniform float uCurvatureOn;',
|
'uniform float uCurvatureOn;',
|
||||||
'uniform vec3 uCamPos;',
|
'uniform vec3 uCamPos;',
|
||||||
@@ -374,8 +375,9 @@ var FRAG_SRC = [
|
|||||||
'tau += dtau;',
|
'tau += dtau;',
|
||||||
't += step;',
|
't += step;',
|
||||||
'}',
|
'}',
|
||||||
'float alpha = clamp(1.0 - exp(-tau), 0.0, 1.0);',
|
'float rawAlpha = clamp(1.0 - exp(-tau), 0.0, 1.0);',
|
||||||
'vec3 col = scatter / max(alpha, 1e-4) * uAtmoGain;',
|
'float alpha = clamp(rawAlpha * uAtmoGain, 0.0, uAtmoMaxAlpha);',
|
||||||
|
'vec3 col = scatter / max(rawAlpha, 1e-4);',
|
||||||
'gl_FragColor = vec4(col, alpha);',
|
'gl_FragColor = vec4(col, alpha);',
|
||||||
'return;',
|
'return;',
|
||||||
'}',
|
'}',
|
||||||
@@ -859,6 +861,7 @@ function init(canvas) {
|
|||||||
var uAtmoDensity = gl.getUniformLocation(prog, 'uAtmoDensity');
|
var uAtmoDensity = gl.getUniformLocation(prog, 'uAtmoDensity');
|
||||||
var uAtmoGrayTau = gl.getUniformLocation(prog, 'uAtmoGrayTau');
|
var uAtmoGrayTau = gl.getUniformLocation(prog, 'uAtmoGrayTau');
|
||||||
var uAtmoGain = gl.getUniformLocation(prog, 'uAtmoGain');
|
var uAtmoGain = gl.getUniformLocation(prog, 'uAtmoGain');
|
||||||
|
var uAtmoMaxAlpha = gl.getUniformLocation(prog, 'uAtmoMaxAlpha');
|
||||||
var uEarthRadius = gl.getUniformLocation(prog, 'uEarthRadius');
|
var uEarthRadius = gl.getUniformLocation(prog, 'uEarthRadius');
|
||||||
var uCurvatureOn = gl.getUniformLocation(prog, 'uCurvatureOn');
|
var uCurvatureOn = gl.getUniformLocation(prog, 'uCurvatureOn');
|
||||||
var uCamPos = gl.getUniformLocation(prog, 'uCamPos');
|
var uCamPos = gl.getUniformLocation(prog, 'uCamPos');
|
||||||
@@ -982,6 +985,7 @@ function init(canvas) {
|
|||||||
uAtmoModelOn: uAtmoModelOn, uAtmoHeightUnits: uAtmoHeightUnits,
|
uAtmoModelOn: uAtmoModelOn, uAtmoHeightUnits: uAtmoHeightUnits,
|
||||||
uAtmoScaleHeightUnits: uAtmoScaleHeightUnits, uAtmoDensity: uAtmoDensity,
|
uAtmoScaleHeightUnits: uAtmoScaleHeightUnits, uAtmoDensity: uAtmoDensity,
|
||||||
uAtmoGrayTau: uAtmoGrayTau, uAtmoGain: uAtmoGain,
|
uAtmoGrayTau: uAtmoGrayTau, uAtmoGain: uAtmoGain,
|
||||||
|
uAtmoMaxAlpha: uAtmoMaxAlpha,
|
||||||
uEarthRadius: uEarthRadius,
|
uEarthRadius: uEarthRadius,
|
||||||
uCurvatureOn: uCurvatureOn, uCamPos: uCamPos,
|
uCurvatureOn: uCurvatureOn, uCamPos: uCamPos,
|
||||||
uAtmoBlueColor: uAtmoBlueColor, uAtmoGrayColor: uAtmoGrayColor,
|
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))
|
? Math.max(0.1, Math.min(5.0, HAZE_CFG.gain))
|
||||||
: ((typeof ATMO_MODEL.gain === 'number')
|
: ((typeof ATMO_MODEL.gain === 'number')
|
||||||
? Math.max(0.1, Math.min(5.0, ATMO_MODEL.gain)) : 1.0);
|
? 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 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')
|
||||||
@@ -5556,6 +5564,7 @@ window.clouds3dRender = function(target) {
|
|||||||
gl.uniform1f(s.uAtmoDensity, ATMO_MODEL_DENSITY);
|
gl.uniform1f(s.uAtmoDensity, ATMO_MODEL_DENSITY);
|
||||||
gl.uniform1f(s.uAtmoGrayTau, ATMO_MODEL_GRAY_TAU);
|
gl.uniform1f(s.uAtmoGrayTau, ATMO_MODEL_GRAY_TAU);
|
||||||
gl.uniform1f(s.uAtmoGain, ATMO_MODEL_GAIN);
|
gl.uniform1f(s.uAtmoGain, ATMO_MODEL_GAIN);
|
||||||
|
gl.uniform1f(s.uAtmoMaxAlpha, ATMO_MODEL_MAX_ALPHA);
|
||||||
gl.uniform1f(s.uEarthRadius, EARTH_RADIUS_UNITS);
|
gl.uniform1f(s.uEarthRadius, EARTH_RADIUS_UNITS);
|
||||||
gl.uniform3fv(s.uAtmoBlueColor, ATMO_MODEL_BLUE_COLOR);
|
gl.uniform3fv(s.uAtmoBlueColor, ATMO_MODEL_BLUE_COLOR);
|
||||||
gl.uniform3fv(s.uAtmoGrayColor, ATMO_MODEL_GRAY_COLOR);
|
gl.uniform3fv(s.uAtmoGrayColor, ATMO_MODEL_GRAY_COLOR);
|
||||||
|
|||||||
Reference in new issue
Block a user