From 30bbdc107c978fbeaa6798d0432880b241867721 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Mon, 27 Jan 2025 07:53:57 +0100 Subject: [PATCH 01/61] implement some ideas from Nubis --- .../shaders/csp-atmosphere.frag | 69 ++++++++++++++++--- 1 file changed, 60 insertions(+), 9 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index b376f33a6..44f41fde1 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -320,15 +320,62 @@ vec4 getOceanShade(float d) { // ------------------------------------------------------------------------------------------------- +float remap(float v, float min_old, float max_old, float min_new, float max_new){ + float v_in_0_1 = (v - min_old) / (max_old - min_old); + return clamp(v_in_0_1 * (max_new - min_new) + min_new, min_new, max_new); +} + + +float baseCloudNoise(vec3 position){ + const float BASE_FREQ = 1. / 100000; + float freq = BASE_FREQ; + float noise = simplex3D(position * BASE_FREQ); + const float OCTAVE_STEP = 1.2; + const int NUM_OCTAVES = 10; + for(int i = 0; i < NUM_OCTAVES; i++){ + freq *= OCTAVE_STEP; + noise = remap(simplex3D(position * freq), 0, noise, 0, 1); + } + //return simplex3DFractal(position / 10000); + return noise; +} + +// varies randomly only in lat/long direction +float getCloudCoverage(vec3 position){ + float topAltitude = PLANET_RADIUS + uCloudAltitude; + float thickness = uCloudAltitude * 0.5; + // "progress" in cloud from bottom to top in range 0 to 1 + float height_in_cloud = remap(length(position), topAltitude - thickness, topAltitude, 0, 1); + float height_component = remap(height_in_cloud, 0, .3, 0, 1) * remap(height_in_cloud, 0.7, 1, 1, 0); + vec2 lngLat = getLngLat(position); + vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); + float texture_contrib = texture(uCloudTexture, texCoords).r; + + return texture_contrib * height_component; + + const float TOTAL_COVERAGE = .3; + const float DENSE_REGION_FRACTION = .3; + // relatively low frequency noise + float map_contribution = simplex3DFractal(vec3(lngLat * 10, 0)); + return remap(texture_contrib, TOTAL_COVERAGE, 1. - (1. - TOTAL_COVERAGE) * DENSE_REGION_FRACTION, 0, 1) /* height_component*/; +} + // Returns the value of the cloud texture at the position described by the three parameters. float getCloudDensity(vec3 rayOrigin, vec3 rayDir, float tIntersection) { vec3 position = rayOrigin + rayDir * tIntersection; vec2 lngLat = getLngLat(position); vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); + float texture_contrib = texture(uCloudTexture, texCoords).r; + float noise_contrib = clamp(simplex3DFractal(vec3(texCoords * 100, length(position) / 100)), 0., 1.); + float cloud_density = texture_contrib * noise_contrib; + // only use cloud coverage for now + float cloud_coverage = getCloudCoverage(position); + cloud_density = remap(baseCloudNoise(position), 0, 1, 0, 1); + //cloud_density = texture_contrib; #if ENABLE_HDR - return sRGBtoLinear(texture(uCloudTexture, texCoords).r); + return cloud_density; #else - return texture(uCloudTexture, texCoords).r; + return cloud_density; #endif } @@ -353,7 +400,7 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan float topAltitude = PLANET_RADIUS + uCloudAltitude; // The number of cloud layers. - int samples = 10; + int samples = 20; vec2 intersections = intersectSphere(rayOrigin, rayDir, topAltitude); @@ -383,12 +430,12 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan float fac = 1.0; // Reduce cloud opacity when end point is very close to planet surface. - fac *= clamp(abs(surfaceDistance - intersections.x) / fadeWidth, 0, 1); - fac *= clamp(abs(surfaceDistance - intersections.y) / fadeWidth, 0, 1); + //fac *= clamp(abs(surfaceDistance - intersections.x) / fadeWidth, 0, 1); + //fac *= clamp(abs(surfaceDistance - intersections.y) / fadeWidth, 0, 1); // Reduce cloud opacity when start point is very close to cloud surface. - fac *= clamp(abs(intersections.x) / thickness, 0, 1); - fac *= clamp(abs(intersections.y) / thickness, 0, 1); + //fac *= clamp(abs(intersections.x) / thickness, 0, 1); + //fac *= clamp(abs(intersections.y) / thickness, 0, 1); // If we intersect the cloud sphere... if (intersections.y > 0 && intersections.x < intersections.y) { @@ -403,10 +450,14 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan } } } - + density /= samples; // Compute the final color based on the cloud density. + /* + return vec4( + density, 1- density, 0, 1 + ) * 100;*/ return vec4( - transmittance * (sunIlluminance + skyIlluminance) / PI + inScatter, density / samples); + transmittance * (sunIlluminance + skyIlluminance) / PI + inScatter, density); } // This returns the density of the clouds when seen from rayOrigin looking into rayDir. This is used From d30525fae6c127178acbf9605c14ceffdb2e0981 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Mon, 27 Jan 2025 10:41:22 +0100 Subject: [PATCH 02/61] wieghting clouds with simple 3d noise --- .../shaders/csp-atmosphere.frag | 137 ++++++++++++++---- 1 file changed, 110 insertions(+), 27 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 44f41fde1..978a5c454 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -331,7 +331,7 @@ float baseCloudNoise(vec3 position){ float freq = BASE_FREQ; float noise = simplex3D(position * BASE_FREQ); const float OCTAVE_STEP = 1.2; - const int NUM_OCTAVES = 10; + const int NUM_OCTAVES = 15; for(int i = 0; i < NUM_OCTAVES; i++){ freq *= OCTAVE_STEP; noise = remap(simplex3D(position * freq), 0, noise, 0, 1); @@ -341,36 +341,39 @@ float baseCloudNoise(vec3 position){ } // varies randomly only in lat/long direction -float getCloudCoverage(vec3 position){ - float topAltitude = PLANET_RADIUS + uCloudAltitude; - float thickness = uCloudAltitude * 0.5; - // "progress" in cloud from bottom to top in range 0 to 1 - float height_in_cloud = remap(length(position), topAltitude - thickness, topAltitude, 0, 1); - float height_component = remap(height_in_cloud, 0, .3, 0, 1) * remap(height_in_cloud, 0.7, 1, 1, 0); +float getCloudCoverageHorizontal(vec3 position){ vec2 lngLat = getLngLat(position); vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); float texture_contrib = texture(uCloudTexture, texCoords).r; - return texture_contrib * height_component; + return texture_contrib; - const float TOTAL_COVERAGE = .3; - const float DENSE_REGION_FRACTION = .3; - // relatively low frequency noise - float map_contribution = simplex3DFractal(vec3(lngLat * 10, 0)); - return remap(texture_contrib, TOTAL_COVERAGE, 1. - (1. - TOTAL_COVERAGE) * DENSE_REGION_FRACTION, 0, 1) /* height_component*/; + //const float TOTAL_COVERAGE = .3; + //const float DENSE_REGION_FRACTION = .3; + //// relatively low frequency noise + //float map_contribution = simplex3DFractal(vec3(lngLat * 10, 0)); + //return remap(texture_contrib, TOTAL_COVERAGE, 1. - (1. - TOTAL_COVERAGE) * DENSE_REGION_FRACTION, 0, 1) /* height_component*/; } +float GetCloudCoverageHeight(vec3 position){ + float topAltitude = PLANET_RADIUS + uCloudAltitude; + float thickness = uCloudAltitude * 0.5; + // "progress" in cloud from bottom to top in range 0 to 1 + float height_in_cloud = remap(length(position), topAltitude - thickness, topAltitude, 0, 1); + float height_component = remap(height_in_cloud, 0, .3, 0, 1) * remap(height_in_cloud, 0.7, 1, 1, 0); + return height_component; +} + + + // Returns the value of the cloud texture at the position described by the three parameters. -float getCloudDensity(vec3 rayOrigin, vec3 rayDir, float tIntersection) { - vec3 position = rayOrigin + rayDir * tIntersection; - vec2 lngLat = getLngLat(position); - vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); - float texture_contrib = texture(uCloudTexture, texCoords).r; - float noise_contrib = clamp(simplex3DFractal(vec3(texCoords * 100, length(position) / 100)), 0., 1.); - float cloud_density = texture_contrib * noise_contrib; +float getCloudDensity(vec3 position){ // only use cloud coverage for now - float cloud_coverage = getCloudCoverage(position); - cloud_density = remap(baseCloudNoise(position), 0, 1, 0, 1); + float cloud_coverage_h = getCloudCoverageHorizontal(position); + float cloud_coverage_v = GetCloudCoverageHeight(position); + float cloud_coverage = cloud_coverage_v * pow(cloud_coverage_h, 1); + float cloud_density = remap(baseCloudNoise(position), 0, 1, pow(cloud_coverage, 2), cloud_coverage); + //cloud_density = remap(baseCloudNoise(position), 0, cloud_coverage, 0, 1); //cloud_density = texture_contrib; #if ENABLE_HDR return cloud_density; @@ -379,6 +382,18 @@ float getCloudDensity(vec3 rayOrigin, vec3 rayDir, float tIntersection) { #endif } + +float getCloudDensityOld(vec3 rayOrigin, vec3 rayDir, float tIntersection){ + vec3 position = rayOrigin + rayDir * tIntersection; + vec2 lngLat = getLngLat(position); + vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); + #if ENABLE_HDR + return sRGBtoLinear(texture(uCloudTexture, texCoords).r); + #else + return texture(uCloudTexture, texCoords).r; + #endif +} + // Computes the color of the clouds along the ray described by the input parameters. The cloud color // is computed by intersecting 10 nested cloud layers. Each layer contributes a tenth of the final // cloud density in order to create a fake volumetric appearance. The density is faded to zero close @@ -439,14 +454,15 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan // If we intersect the cloud sphere... if (intersections.y > 0 && intersections.x < intersections.y) { - // Check whether the cloud sphere is intersected from above... if (intersections.x > 0 && intersections.x < surfaceDistance) { // hits from above, - density += getCloudDensity(rayOrigin, rayDir, intersections.x) * fac; + vec3 position = rayOrigin + rayDir * intersections.x; + density += getCloudDensity(position) * fac; } else if (intersections.y < surfaceDistance) { // ... or from from below. - density += getCloudDensity(rayOrigin, rayDir, intersections.y) * fac; + vec3 position = rayOrigin + rayDir * intersections.y; + density += getCloudDensity(position) * fac; } } } @@ -460,6 +476,73 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan transmittance * (sunIlluminance + skyIlluminance) / PI + inScatter, density); } +vec4 getCloudColorOld(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistance){ +// The distance between the top and bottom cloud layers. + float thickness = uCloudAltitude * 0.5; + + // The distance to the planet surface where the fade-out starts. + float fadeWidth = thickness * 2.0; + + // The altitude of the upper-most cloud layer. + float topAltitude = PLANET_RADIUS + uCloudAltitude; + + // The number of cloud layers. + int samples = 10; + + vec2 intersections = intersectSphere(rayOrigin, rayDir, topAltitude); + + // If we do not intersect the cloud sphere, we can return early. + if (intersections.y < 0 || intersections.x > intersections.y) { + return vec4(0.0); + } + + // If we are below the clouds and the ray intersects the ground, we can also return early. + if (intersections.x < 0 && surfaceDistance < intersections.y) { + return vec4(0.0); + } + + // Compute intersection point of view ray with clouds. Use this to compute the illuminance at this + // point as well as the transmittance of the atmosphere towards the observer. + vec3 p = rayOrigin + rayDir * (intersections.x < 0 ? intersections.y : intersections.x); + vec3 skyIlluminance, transmittance; + vec3 inScatter = GetSkyLuminanceToPoint(rayOrigin, p, uSunDir, transmittance); + vec3 sunIlluminance = GetSunAndSkyIlluminance(p, uSunDir, skyIlluminance); + + // We will accumulate the cloud density in this variable. + float density = 0.0; + + for (int i = 0; i < samples; ++i) { + float altitude = topAltitude - i * thickness / samples; + vec2 intersections = intersectSphere(rayOrigin, rayDir, altitude); + float fac = 1.0; + + // Reduce cloud opacity when end point is very close to planet surface. + fac *= clamp(abs(surfaceDistance - intersections.x) / fadeWidth, 0, 1); + fac *= clamp(abs(surfaceDistance - intersections.y) / fadeWidth, 0, 1); + + // Reduce cloud opacity when start point is very close to cloud surface. + fac *= clamp(abs(intersections.x) / thickness, 0, 1); + fac *= clamp(abs(intersections.y) / thickness, 0, 1); + + // If we intersect the cloud sphere... + if (intersections.y > 0 && intersections.x < intersections.y) { + + // Check whether the cloud sphere is intersected from above... + if (intersections.x > 0 && intersections.x < surfaceDistance) { + // hits from above, + density += getCloudDensityOld(rayOrigin, rayDir, intersections.x) * fac; + } else if (intersections.y < surfaceDistance) { + // ... or from from below. + density += getCloudDensityOld(rayOrigin, rayDir, intersections.y) * fac; + } + } + } + + // Compute the final color based on the cloud density. + return vec4( + transmittance * (sunIlluminance + skyIlluminance) / PI + inScatter, density / samples); +} + // This returns the density of the clouds when seen from rayOrigin looking into rayDir. This is used // to compute the shadow of the clouds. To simplify the computation, only one cloud layer is // assumed. If the ray's origin is close to the cloud layer (e.g. on a mountain), the density is @@ -480,8 +563,8 @@ float getCloudShadow(vec3 rayOrigin, vec3 rayDir) { // Reduce cloud opacity when end point is very close to planet surface. float fac = clamp(abs(intersections.y) / fadeWidth, 0, 1); - - return 1.0 - getCloudDensity(rayOrigin, rayDir, intersections.y) * fac; + vec3 position = rayOrigin + rayDir * intersections.y; + return 1.0 - getCloudDensity(position) * fac; } // ------------------------------------------------------------------------------------------------- From 91a4ad9f6b1de3c81f586de4fca45b81901fd5a6 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Tue, 28 Jan 2025 09:23:10 +0100 Subject: [PATCH 03/61] toggle between old and new cloud models --- .../gui/atmospheres_settings.html | 11 ++++++++++ .../shaders/csp-atmosphere.frag | 20 ++++++++++++++++++- plugins/csp-atmospheres/src/Atmosphere.cpp | 5 ++++- plugins/csp-atmospheres/src/Plugin.cpp | 15 ++++++++++++++ plugins/csp-atmospheres/src/Plugin.hpp | 1 + 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/plugins/csp-atmospheres/gui/atmospheres_settings.html b/plugins/csp-atmospheres/gui/atmospheres_settings.html index 8a3700b8e..4476431a5 100644 --- a/plugins/csp-atmospheres/gui/atmospheres_settings.html +++ b/plugins/csp-atmospheres/gui/atmospheres_settings.html @@ -40,6 +40,17 @@ Clouds +
+ +
diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 46c45ce8f..74acc2c64 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -44,7 +44,6 @@ uniform vec3 uShadowCoordinates; uniform sampler3D uNoiseTexture; uniform sampler2D uNoiseTexture2D; uniform sampler2D uCloudTop; -uniform sampler2D uCloudBottom; uniform float uTestUniform; // outputs diff --git a/plugins/csp-atmospheres/src/Atmosphere.cpp b/plugins/csp-atmospheres/src/Atmosphere.cpp index b624981a6..13710d567 100644 --- a/plugins/csp-atmospheres/src/Atmosphere.cpp +++ b/plugins/csp-atmospheres/src/Atmosphere.cpp @@ -156,6 +156,7 @@ void Atmosphere::configure(Plugin::Settings::Atmosphere const& settings) { auto start_time = std::chrono::high_resolution_clock::now(); int resx, resy, resz, channels; + // higher 3d texture resolutions are more expensive and are not guaranteed to be supported on all systems resx = 32; resy = 32; resz = 32; @@ -219,17 +220,6 @@ void Atmosphere::configure(Plugin::Settings::Atmosphere const& settings) { mShaderDirty = true; } - if(mSettings.mBottomTexture != settings.mBottomTexture){ - if (settings.mBottomTexture.has_value() && !settings.mBottomTexture.value().empty()) { - mBottomTexture = cs::graphics::TextureLoader::loadFromFile(settings.mBottomTexture.value()); - mBottomTexture->SetWrapS(GL_CLAMP); - mBottomTexture->SetWrapT(GL_CLAMP); - }else{ - mBottomTexture.reset(); - } - mShaderDirty = true; - } - if(mSettings.mTopTexture != settings.mTopTexture){ if (settings.mTopTexture.has_value() && !settings.mTopTexture.value().empty()) { mTopTexture = cs::graphics::TextureLoader::loadFromFile(settings.mTopTexture.value()); @@ -240,9 +230,7 @@ void Atmosphere::configure(Plugin::Settings::Atmosphere const& settings) { } mShaderDirty = true; } - logger().info("read top texture at " + settings.mTopTexture.value()); - logger().info("read bottom texture at " + settings.mBottomTexture.value()); - + logger().info("read top texture at " + settings.mTopTexture.value()); // Reload the limb luminance texture if required. if (mSettings.mLimbLuminanceTexture != settings.mLimbLuminanceTexture) { @@ -268,7 +256,7 @@ void Atmosphere::configure(Plugin::Settings::Atmosphere const& settings) { mSettings.mEnableWaves != settings.mEnableWaves || mSettings.mEnableClouds != settings.mEnableClouds || mSettings.mEnableLimbLuminance != settings.mEnableLimbLuminance || - mSettings.mOldClouds != settings.mOldClouds) { + mSettings.mAdvancedClouds != settings.mAdvancedClouds) { mShaderDirty = true; } @@ -296,9 +284,9 @@ void Atmosphere::createShader(ShaderType type, VistaGLSLShader& shader, Uniforms cs::utils::replaceString( sFrag, "ATMOSPHERE_RADIUS", std::to_string(mRadii[0] + mSettings.mTopAltitude)); cs::utils::replaceString( - sFrag, "ENABLE_CLOUDS", std::to_string(mSettings.mEnableClouds.get() && mCloudTexture && mTopTexture && mBottomTexture)); + sFrag, "ENABLE_CLOUDS", std::to_string(mSettings.mEnableClouds.get() && mCloudTexture && mTopTexture)); cs::utils::replaceString( - sFrag, "OLD_CLOUDS", std::to_string(mSettings.mOldClouds.get())); + sFrag, "OLD_CLOUDS", std::to_string(!mSettings.mAdvancedClouds.get())); cs::utils::replaceString(sFrag, "ENABLE_LIMB_LUMINANCE", std::to_string(mSettings.mEnableLimbLuminance.get() && mLimbLuminanceTexture)); cs::utils::replaceString(sFrag, "ENABLE_WATER", std::to_string(mSettings.mEnableWater.get())); @@ -336,7 +324,6 @@ void Atmosphere::createShader(ShaderType type, VistaGLSLShader& shader, Uniforms uniforms.shadowCoordinates = shader.GetUniformLocation("uShadowCoordinates"); uniforms.noiseTexture = shader.GetUniformLocation("uNoiseTexture"); uniforms.noiseTexture2D = shader.GetUniformLocation("uNoiseTexture2D"); - uniforms.cloudBottom = shader.GetUniformLocation("uCloudBottom"); uniforms.cloudTop = shader.GetUniformLocation("uCloudTop"); @@ -572,12 +559,6 @@ bool Atmosphere::Do() { mAtmoShader.SetUniform(mAtmoUniforms.cloudTop, 5); } - if (mSettings.mEnableClouds.get() && mBottomTexture) { - mBottomTexture->Bind(GL_TEXTURE6); - mAtmoShader.SetUniform(mAtmoUniforms.cloudBottom, 6); - } - - if (mSettings.mEnableClouds.get() && mNoiseTexture2D) { glActiveTexture(GL_TEXTURE7); glBindTexture(GL_TEXTURE_2D, mNoiseTexture2D); diff --git a/plugins/csp-atmospheres/src/Atmosphere.hpp b/plugins/csp-atmospheres/src/Atmosphere.hpp index 7d37e83b7..1c8cdfb1e 100644 --- a/plugins/csp-atmospheres/src/Atmosphere.hpp +++ b/plugins/csp-atmospheres/src/Atmosphere.hpp @@ -59,7 +59,6 @@ class Atmosphere : public IVistaOpenGLDraw { uint32_t waterLevel = 0; uint32_t cloudTexture = 0; uint32_t cloudTop = 0; - uint32_t cloudBottom = 0; uint32_t noiseTexture2D = 0; uint32_t cloudAltitude = 0; uint32_t limbLuminanceTexture = 0; @@ -95,7 +94,6 @@ class Atmosphere : public IVistaOpenGLDraw { std::shared_ptr mEclipseShadowReceiver; std::unique_ptr mCloudTexture; std::unique_ptr mTopTexture; - std::unique_ptr mBottomTexture; GLuint mNoiseTexture = 0; GLuint mNoiseTexture2D = 0; GLuint mLimbLuminanceTexture = 0; diff --git a/plugins/csp-atmospheres/src/Plugin.cpp b/plugins/csp-atmospheres/src/Plugin.cpp index 98b3a59c7..6304b5bd6 100644 --- a/plugins/csp-atmospheres/src/Plugin.cpp +++ b/plugins/csp-atmospheres/src/Plugin.cpp @@ -67,9 +67,8 @@ void from_json(nlohmann::json const& j, Plugin::Settings::Atmosphere& o) { cs::core::Settings::deserialize(j, "enableWaves", o.mEnableWaves); cs::core::Settings::deserialize(j, "waterLevel", o.mWaterLevel); cs::core::Settings::deserialize(j, "enableClouds", o.mEnableClouds); - cs::core::Settings::deserialize(j, "oldClouds", o.mOldClouds); + cs::core::Settings::deserialize(j, "oldClouds", o.mAdvancedClouds); cs::core::Settings::deserialize(j, "cloudTexture", o.mCloudTexture); - cs::core::Settings::deserialize(j, "cloudBottom", o.mBottomTexture); cs::core::Settings::deserialize(j, "cloudTop", o.mTopTexture); cs::core::Settings::deserialize(j, "cloudAltitude", o.mCloudAltitude); cs::core::Settings::deserialize(j, "enableLimbLuminance", o.mEnableLimbLuminance); @@ -86,9 +85,8 @@ void to_json(nlohmann::json& j, Plugin::Settings::Atmosphere const& o) { cs::core::Settings::serialize(j, "enableWaves", o.mEnableWaves); cs::core::Settings::serialize(j, "waterLevel", o.mWaterLevel); cs::core::Settings::serialize(j, "enableClouds", o.mEnableClouds); - cs::core::Settings::serialize(j, "oldClouds", o.mOldClouds); + cs::core::Settings::serialize(j, "oldClouds", o.mAdvancedClouds); cs::core::Settings::serialize(j, "cloudTexture", o.mCloudTexture); - cs::core::Settings::serialize(j, "cloudBottom", o.mBottomTexture); cs::core::Settings::serialize(j, "cloudTop", o.mTopTexture); cs::core::Settings::serialize(j, "cloudAltitude", o.mCloudAltitude); cs::core::Settings::serialize(j, "enableLimbLuminance", o.mEnableLimbLuminance); @@ -138,7 +136,7 @@ void Plugin::init() { mGuiManager->setCheckboxValue( "atmosphere.setEnableClouds", settings.mEnableClouds.get()); mGuiManager->setCheckboxValue( - "atmosphere.setOldClouds", settings.mOldClouds.get()); + "atmosphere.setOldClouds", settings.mAdvancedClouds.get()); mGuiManager->setSliderValue( "atmosphere.setCloudAltitude", settings.mCloudAltitude.get()); } @@ -186,7 +184,7 @@ void Plugin::init() { "Enables or disables old cloud system. New cloud system is used if set to false", std::function([this](bool enable) { if (!mActiveAtmosphere.empty()) { auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); - settings.mOldClouds = enable; + settings.mAdvancedClouds = enable; mAtmospheres.at(mActiveAtmosphere)->configure(settings); } }) diff --git a/plugins/csp-atmospheres/src/Plugin.hpp b/plugins/csp-atmospheres/src/Plugin.hpp index e060d4918..9a3c28e3e 100644 --- a/plugins/csp-atmospheres/src/Plugin.hpp +++ b/plugins/csp-atmospheres/src/Plugin.hpp @@ -50,11 +50,10 @@ class Plugin : public cs::core::PluginBase { cs::utils::DefaultProperty mWaterLevel{0.F}; ///< In meters. cs::utils::DefaultProperty mEnableClouds{true}; std::optional mCloudTexture; ///< Path to the cloud texture. - std::optional mBottomTexture; std::optional mTopTexture; cs::utils::DefaultProperty mCloudAltitude{3000.F}; ///< In meters. cs::utils::DefaultProperty mEnableLimbLuminance{true}; - cs::utils::DefaultProperty mOldClouds{true}; + cs::utils::DefaultProperty mAdvancedClouds{false}; std::optional mLimbLuminanceTexture; ///< Path to the limb luminance texture. /// If this is set to true, the plugin will save a fish-eye view of the sky to a file one diff --git a/plugins/csp-atmospheres/textures/cloudBottom.jpg b/plugins/csp-atmospheres/textures/cloudBottom.jpg deleted file mode 100644 index 71ecf385ce92db97f8217f2929032852452cb1bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6114 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 O7ks;Al2u#gZvPKKNU4qh From e3b8566cf43b107de4609fa9a322aafb0b90f620 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Wed, 2 Apr 2025 15:54:32 +0200 Subject: [PATCH 47/61] rename cloudTop texture to cloudType and change setting.json templates to use the default cloud type texture --- config/base/scene/simple_desktop.json | 1 + config/base/scene/simple_hmd.json | 1 + plugins/csp-atmospheres/README.md | 1 + .../shaders/csp-atmosphere.frag | 4 ++-- plugins/csp-atmospheres/src/Atmosphere.cpp | 24 +++++++++---------- plugins/csp-atmospheres/src/Atmosphere.hpp | 4 ++-- plugins/csp-atmospheres/src/Plugin.cpp | 4 ++-- plugins/csp-atmospheres/src/Plugin.hpp | 2 +- 8 files changed, 22 insertions(+), 19 deletions(-) diff --git a/config/base/scene/simple_desktop.json b/config/base/scene/simple_desktop.json index e21fac056..15f203d09 100644 --- a/config/base/scene/simple_desktop.json +++ b/config/base/scene/simple_desktop.json @@ -744,6 +744,7 @@ "Earth": { "cloudTexture": "../share/resources/textures/earth-clouds.jpg", "limbLuminanceTexture": "../share/resources/textures/earthLimbLuminance.tif", + "cloudTypeTexture": "../share/resources/textures/cloudTop.jpg", "topAltitude": 80000, "bottomAltitude": -100, "model": "Bruneton", diff --git a/config/base/scene/simple_hmd.json b/config/base/scene/simple_hmd.json index 47b892547..76971cdc6 100644 --- a/config/base/scene/simple_hmd.json +++ b/config/base/scene/simple_hmd.json @@ -752,6 +752,7 @@ "atmospheres": { "Earth": { "cloudTexture": "../share/resources/textures/earth-clouds.jpg", + "cloudTypeTexture": "../share/resources/textures/cloudTop.jpg", "topAltitude": 80000, "bottomAltitude": -100, "model": "Bruneton", diff --git a/plugins/csp-atmospheres/README.md b/plugins/csp-atmospheres/README.md index 051b8c08c..c80be0ec8 100644 --- a/plugins/csp-atmospheres/README.md +++ b/plugins/csp-atmospheres/README.md @@ -78,6 +78,7 @@ They are not physically based but provide some plausible results. "topAltitude": 80000, "bottomAltitude": 0, "cloudTexture": "../share/resources/textures/earth-clouds.jpg", + "cloudTypeTexture": "../share/resources/textures/cloudTop.jpg", "model": "CosmoScoutVR", "modelSettings": { "mieAnisotropy": 0.76, diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 74acc2c64..7e70e1d4f 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -43,7 +43,7 @@ uniform sampler3D uLimbLuminanceTexture; uniform vec3 uShadowCoordinates; uniform sampler3D uNoiseTexture; uniform sampler2D uNoiseTexture2D; -uniform sampler2D uCloudTop; +uniform sampler2D uCloudTypeTexture; uniform float uTestUniform; // outputs @@ -426,7 +426,7 @@ vec3 GetCloudCoverageHeight(vec3 position){ vec2 hcomp_grad = vec2(GetHorizontalComponent(texCoords + x_offset).r, GetHorizontalComponent(texCoords + y_offset).r) / OFFSET_EPS; float rate_of_change = length(hcomp_grad); - vec4 top_sample = textureLod(uCloudTop, vec2(horizontal_component, 1-height_in_cloud), 0); + vec4 top_sample = textureLod(uCloudTypeTexture, vec2(horizontal_component, 1-height_in_cloud), 0); return vec3(horizontal_component > 0 ? pow(top_sample.r, 1.5) : 0., top_sample.g, top_sample.b); } diff --git a/plugins/csp-atmospheres/src/Atmosphere.cpp b/plugins/csp-atmospheres/src/Atmosphere.cpp index 13710d567..9d130f3f2 100644 --- a/plugins/csp-atmospheres/src/Atmosphere.cpp +++ b/plugins/csp-atmospheres/src/Atmosphere.cpp @@ -220,17 +220,17 @@ void Atmosphere::configure(Plugin::Settings::Atmosphere const& settings) { mShaderDirty = true; } - if(mSettings.mTopTexture != settings.mTopTexture){ - if (settings.mTopTexture.has_value() && !settings.mTopTexture.value().empty()) { - mTopTexture = cs::graphics::TextureLoader::loadFromFile(settings.mTopTexture.value()); - mTopTexture->SetWrapS(GL_CLAMP); - mTopTexture->SetWrapT(GL_CLAMP); + if(mSettings.mCloudTypeTexture != settings.mCloudTypeTexture){ + if (settings.mCloudTypeTexture.has_value() && !settings.mCloudTypeTexture.value().empty()) { + mCloudTypeTexture = cs::graphics::TextureLoader::loadFromFile(settings.mCloudTypeTexture.value()); + mCloudTypeTexture->SetWrapS(GL_CLAMP); + mCloudTypeTexture->SetWrapT(GL_CLAMP); }else{ - mTopTexture.reset(); + mCloudTypeTexture.reset(); } mShaderDirty = true; } - logger().info("read top texture at " + settings.mTopTexture.value()); + logger().info("read top texture at " + settings.mCloudTypeTexture.value()); // Reload the limb luminance texture if required. if (mSettings.mLimbLuminanceTexture != settings.mLimbLuminanceTexture) { @@ -284,7 +284,7 @@ void Atmosphere::createShader(ShaderType type, VistaGLSLShader& shader, Uniforms cs::utils::replaceString( sFrag, "ATMOSPHERE_RADIUS", std::to_string(mRadii[0] + mSettings.mTopAltitude)); cs::utils::replaceString( - sFrag, "ENABLE_CLOUDS", std::to_string(mSettings.mEnableClouds.get() && mCloudTexture && mTopTexture)); + sFrag, "ENABLE_CLOUDS", std::to_string(mSettings.mEnableClouds.get() && mCloudTexture && mCloudTypeTexture)); cs::utils::replaceString( sFrag, "OLD_CLOUDS", std::to_string(!mSettings.mAdvancedClouds.get())); cs::utils::replaceString(sFrag, "ENABLE_LIMB_LUMINANCE", @@ -324,7 +324,7 @@ void Atmosphere::createShader(ShaderType type, VistaGLSLShader& shader, Uniforms uniforms.shadowCoordinates = shader.GetUniformLocation("uShadowCoordinates"); uniforms.noiseTexture = shader.GetUniformLocation("uNoiseTexture"); uniforms.noiseTexture2D = shader.GetUniformLocation("uNoiseTexture2D"); - uniforms.cloudTop = shader.GetUniformLocation("uCloudTop"); + uniforms.cloudTypeTexture = shader.GetUniformLocation("uCloudTypeTexture"); // printing the names of the uniforms @@ -554,9 +554,9 @@ bool Atmosphere::Do() { mAtmoShader.SetUniform(mAtmoUniforms.noiseTexture, 4); } - if (mSettings.mEnableClouds.get() && mTopTexture) { - mTopTexture->Bind(GL_TEXTURE5); - mAtmoShader.SetUniform(mAtmoUniforms.cloudTop, 5); + if (mSettings.mEnableClouds.get() && mCloudTypeTexture) { + mCloudTypeTexture->Bind(GL_TEXTURE5); + mAtmoShader.SetUniform(mAtmoUniforms.cloudTypeTexture, 5); } if (mSettings.mEnableClouds.get() && mNoiseTexture2D) { diff --git a/plugins/csp-atmospheres/src/Atmosphere.hpp b/plugins/csp-atmospheres/src/Atmosphere.hpp index 1c8cdfb1e..54a3fb3ad 100644 --- a/plugins/csp-atmospheres/src/Atmosphere.hpp +++ b/plugins/csp-atmospheres/src/Atmosphere.hpp @@ -58,7 +58,7 @@ class Atmosphere : public IVistaOpenGLDraw { uint32_t colorBuffer = 0; uint32_t waterLevel = 0; uint32_t cloudTexture = 0; - uint32_t cloudTop = 0; + uint32_t cloudTypeTexture = 0; uint32_t noiseTexture2D = 0; uint32_t cloudAltitude = 0; uint32_t limbLuminanceTexture = 0; @@ -93,7 +93,7 @@ class Atmosphere : public IVistaOpenGLDraw { std::shared_ptr mHDRBuffer; std::shared_ptr mEclipseShadowReceiver; std::unique_ptr mCloudTexture; - std::unique_ptr mTopTexture; + std::unique_ptr mCloudTypeTexture; GLuint mNoiseTexture = 0; GLuint mNoiseTexture2D = 0; GLuint mLimbLuminanceTexture = 0; diff --git a/plugins/csp-atmospheres/src/Plugin.cpp b/plugins/csp-atmospheres/src/Plugin.cpp index 6304b5bd6..2a7957cc6 100644 --- a/plugins/csp-atmospheres/src/Plugin.cpp +++ b/plugins/csp-atmospheres/src/Plugin.cpp @@ -69,7 +69,7 @@ void from_json(nlohmann::json const& j, Plugin::Settings::Atmosphere& o) { cs::core::Settings::deserialize(j, "enableClouds", o.mEnableClouds); cs::core::Settings::deserialize(j, "oldClouds", o.mAdvancedClouds); cs::core::Settings::deserialize(j, "cloudTexture", o.mCloudTexture); - cs::core::Settings::deserialize(j, "cloudTop", o.mTopTexture); + cs::core::Settings::deserialize(j, "cloudTypeTexture", o.mCloudTypeTexture); cs::core::Settings::deserialize(j, "cloudAltitude", o.mCloudAltitude); cs::core::Settings::deserialize(j, "enableLimbLuminance", o.mEnableLimbLuminance); cs::core::Settings::deserialize(j, "limbLuminanceTexture", o.mLimbLuminanceTexture); @@ -87,7 +87,7 @@ void to_json(nlohmann::json& j, Plugin::Settings::Atmosphere const& o) { cs::core::Settings::serialize(j, "enableClouds", o.mEnableClouds); cs::core::Settings::serialize(j, "oldClouds", o.mAdvancedClouds); cs::core::Settings::serialize(j, "cloudTexture", o.mCloudTexture); - cs::core::Settings::serialize(j, "cloudTop", o.mTopTexture); + cs::core::Settings::serialize(j, "cloudTypeTexture", o.mCloudTypeTexture); cs::core::Settings::serialize(j, "cloudAltitude", o.mCloudAltitude); cs::core::Settings::serialize(j, "enableLimbLuminance", o.mEnableLimbLuminance); cs::core::Settings::serialize(j, "limbLuminanceTexture", o.mLimbLuminanceTexture); diff --git a/plugins/csp-atmospheres/src/Plugin.hpp b/plugins/csp-atmospheres/src/Plugin.hpp index 9a3c28e3e..a16dff92e 100644 --- a/plugins/csp-atmospheres/src/Plugin.hpp +++ b/plugins/csp-atmospheres/src/Plugin.hpp @@ -50,7 +50,7 @@ class Plugin : public cs::core::PluginBase { cs::utils::DefaultProperty mWaterLevel{0.F}; ///< In meters. cs::utils::DefaultProperty mEnableClouds{true}; std::optional mCloudTexture; ///< Path to the cloud texture. - std::optional mTopTexture; + std::optional mCloudTypeTexture; cs::utils::DefaultProperty mCloudAltitude{3000.F}; ///< In meters. cs::utils::DefaultProperty mEnableLimbLuminance{true}; cs::utils::DefaultProperty mAdvancedClouds{false}; From 58a4838cb7b461728395468fc0989a8cc09f5bcd Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Tue, 8 Apr 2025 08:12:07 +0200 Subject: [PATCH 48/61] add shader comments and high-quality phase function --- .../shaders/csp-atmosphere.frag | 288 +++++++++--------- 1 file changed, 150 insertions(+), 138 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 7e70e1d4f..5b500d759 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -381,176 +381,198 @@ float remap(float v, float min_old, float max_old, float min_new, float max_new) return clamp(v_in_0_1 * (max_new - min_new) + min_new, min(min_new, max_new), max(max_new, min_new)); } -float sigmoid(float v){ - return 1 / (1 + exp(-v)); -} +float INFINITY = 1 / 0.; +// heights between which clouds appear float CUMULONIMBUS_START_HEIGHT = 1500; float CUMULONIMBUS_END_HEIGHT = 5000; float COVERAGE_MULTIPLIER = 2; float CLOUD_BASE_FRACTION = 0.; + +// cloud types are remapped from [0,1] so that all values above this become 1 float CLOUD_COVER_MAX = .8; -float OFFSET_EPS = 1e-3; -vec4 GetHorizontalComponent(vec2 texCoords){ +// fraction of the cloud layer thickness by which the thickness is locally varying at high frequency +float CLOUD_HEIGHT_VARIATION = .1; + +// high frequency noises begin to fade at this distance +float HF_FADE_DISTANCE = 10000; +// high frequency noises have faded to .5 at this distance +float HF_END_DISTANCE = 100000; + +// low frequency noises begin to fade at this distance +float LF_FADE_DISTANCE = 500000; +// low frequency noises have faded to .5 at this distance +float LF_END_DISTANCE = 2000000; + +// parameter for converting cloud density in [0, 1] to density along path in 1/meter +// Source: I made it up +float DENSITY_MULTIPLIER = 2e-3; +// how much light gets absorbed relative to being scattered +float ABSORBED_FRACTION = 0.; + +float MS_INTENSITY = .2; + +vec3 CLOUD_COLOR = vec3(1.); + +// get the cloud type at these texture coordinates +// adds high frequency noises to the values from the cloud texture to replace coarse +// bilinear interpolation artifacts with smaller artifacts that are harder to notice +// returns the noises alongside the result +vec4 GetLocalCloudType(vec2 texCoords){ float density = remap(textureLod(uCloudTexture, texCoords, 0).r, 0, CLOUD_COVER_MAX, 0, 1); vec4 noiseSample = textureLod(uNoiseTexture2D, texCoords * 100, 0); + // map noises from [0, 1] to [-.5, .5] float worleyNoise = noiseSample.b - .5; float perlinNoise = noiseSample.r - .5; + // only the fringes of the clouds should be broken up, the cores should not become noisy float noiseWeight = remap(density, .7, 0, 0, 1); float allWeight = remap(density, .2, .1, 1, 0); - float horizontal_component = clamp(allWeight * remap(density + noiseWeight * (worleyNoise + perlinNoise), 0., 1., -.5, 1.), 0., 0.99); - return vec4(horizontal_component, noiseSample);//horizontal_component; + float cloudType = clamp(allWeight * remap(density + noiseWeight * (worleyNoise + perlinNoise), 0., 1., -.5, 1.), 0., 0.99); + return vec4(cloudType, noiseSample); } -float CLOUD_HEIGHT_VARIATION = .1; - -vec3 GetCloudCoverageHeight(vec3 position){ +// get the low-fidelity cloud prior like in the Nubis cloud system +// see the 2022 SIGGRAPH talk by Andrew Schneider for what the vertical profile is for +// this implementation differs from Nubis by taking only one texture for cloud type instead of combining a top and bottom type +// returns cloud prior, low and high frequency modes +vec3 GetVerticalProfile(vec3 position){ vec2 lngLat = getLngLat(position); vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); - vec4 hcomp_with_noise = GetHorizontalComponent(texCoords); - float horizontal_component = hcomp_with_noise.r; + vec4 hcomp_with_noise = GetLocalCloudType(texCoords); + float cloudType = hcomp_with_noise.r; vec3 noiseSample = hcomp_with_noise.gba; - - float end_height = CUMULONIMBUS_END_HEIGHT * (1 - CLOUD_HEIGHT_VARIATION * noiseSample.g);//localMaxHeight(position); - float topAltitude = PLANET_RADIUS + end_height; - float thickness = end_height - CUMULONIMBUS_START_HEIGHT; + float endHeight = CUMULONIMBUS_END_HEIGHT * (1 - CLOUD_HEIGHT_VARIATION * noiseSample.g); + float topAltitude = PLANET_RADIUS + endHeight; + float thickness = endHeight - CUMULONIMBUS_START_HEIGHT; // "progress" in cloud from bottom to top in range 0 to 1 float height_in_cloud = remap(length(position), PLANET_RADIUS + CUMULONIMBUS_START_HEIGHT, topAltitude, 0, 1); - float height_component = remap(height_in_cloud, 0, CLOUD_BASE_FRACTION, 0, 1) * pow(remap(height_in_cloud, CLOUD_BASE_FRACTION, 1, 1, 0), 2); - - // texture space estimation of the spatial rate of change of the cloud coverage - // used for boosting erosion where cloud coverage increases - vec2 x_offset = vec2(OFFSET_EPS, 0); - vec2 y_offset = vec2(0, OFFSET_EPS); - vec2 hcomp_grad = vec2(GetHorizontalComponent(texCoords + x_offset).r, GetHorizontalComponent(texCoords + y_offset).r) / OFFSET_EPS; - float rate_of_change = length(hcomp_grad); - - vec4 top_sample = textureLod(uCloudTypeTexture, vec2(horizontal_component, 1-height_in_cloud), 0); - return vec3(horizontal_component > 0 ? pow(top_sample.r, 1.5) : 0., top_sample.g, top_sample.b); + vec4 cloudConfig = textureLod(uCloudTypeTexture, vec2(cloudType, 1-height_in_cloud), 0); + return vec3(cloudType > 0 ? pow(cloudConfig.r, 1.5) : 0., cloudConfig.g, cloudConfig.b); } -float HF_FADE_DISTANCE = 10000; -float HF_END_DISTANCE = 100000; - -float LF_FADE_DISTANCE = 500000; -float LF_END_DISTANCE = 2000000; - -// Returns the value of the cloud texture at the position described by the three parameters. +// get the density of clouds at a position in 3d space float getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ - // only use cloud coverage for now - //float cloud_coverage_h = getCloudCoverageHorizontal(position); - vec3 cloudConfig = GetCloudCoverageHeight(position); - float cloud_base = cloudConfig.r; + vec3 cloudConfig = GetVerticalProfile(position); + float cloudBase = cloudConfig.r; float erosionStrength = cloudConfig.g; float hfStrength = cloudConfig.b; float cameraDist = length(cam_pos - position); - vec4 noise2D = textureLod(uNoiseTexture2D, getLngLat(position) * 50, 0); + vec4 noise2D = textureLod(uNoiseTexture2D, getLngLat(position) * 5, 0); - float local_coverage = 2; - float cloud_density = remap(pow(1 - exp(-local_coverage * cloud_base), .4), .1, 1, 0, 1); + float cloudDensity = remap(pow(1 - exp(-COVERAGE_MULTIPLIER * cloudBase), .4), .1, 1, 0, 1); - float lf_influence = remap(erosionStrength, 0, .8, 0, 1.4); - float hf_influence = .6 * hfStrength; + float lfInfluence = remap(erosionStrength, 0, .8, 0, 1.4); + float hfInfluence = .6 * hfStrength; if(cameraDist < LF_END_DISTANCE){ - vec4 lf_noises = textureLod(uNoiseTexture, position / 15000, 0); - float blended_lf_noise = mix(lf_noises.r, 1 - lf_noises.b, noise2D.r); + vec4 lfNoises = textureLod(uNoiseTexture, position / 15000, 0); + // blend between worley and perlin noises using a noise at a different frequency to reduce repetition + float blended_lf_noise = mix(lfNoises.r, 1 - lfNoises.b, noise2D.r); + // when camDist is in the fade out range, the noise is mixed with 0.5 blended_lf_noise = mix(blended_lf_noise, .5, remap(cameraDist, LF_FADE_DISTANCE, LF_END_DISTANCE, 0, 1)); - cloud_density = clamp(lf_influence * blended_lf_noise - (lf_influence - cloud_density), 0, 1); + // using the formula from Andrew Schneider's SIGGRAPH presentations on Nubis + cloudDensity = clamp(lfInfluence * blended_lf_noise - (lfInfluence - cloudDensity), 0, 1); if(high_res && cameraDist < HF_END_DISTANCE){ vec4 hf_noises = textureLod(uNoiseTexture, position / 3000, 0); float blended_hf_noise = mix(hf_noises.r, hf_noises.b, noise2D.b); blended_hf_noise = mix(blended_hf_noise, .5, remap(cameraDist, HF_FADE_DISTANCE, HF_END_DISTANCE, 0, 1)); - cloud_density = clamp(hf_influence * blended_hf_noise - (hf_influence - cloud_density), 0, 1); + cloudDensity = clamp(hfInfluence * blended_hf_noise - (hfInfluence - cloudDensity), 0, 1); }else{ - cloud_density = clamp(hf_influence * .5 - (hf_influence - cloud_density), 0, 1); + cloudDensity = clamp(hfInfluence * .5 - (hfInfluence - cloudDensity), 0, 1); } }else{ - cloud_density = clamp(lf_influence * .5 - (lf_influence - cloud_density), 0, 1); - cloud_density = clamp(hf_influence * .5 - (hf_influence - cloud_density), 0, 1); + // reduce density by assuming noise=0.5 + // without this operation, the cloud would become more dense at the LOD region border + // MUST BE PERFORMED FOR ALL FUTURE NOISE SCALES TO AVOID DISCONTINUITIES + cloudDensity = clamp(lfInfluence * .5 - (lfInfluence - cloudDensity), 0, 1); + cloudDensity = clamp(hfInfluence * .5 - (hfInfluence - cloudDensity), 0, 1); } - if(isnan(cloud_density)){ - cloud_density = 0; + if(isnan(cloudDensity)){ + cloudDensity = 0; } - return remap(cloud_density, .1, 1, 0, 1); + return remap(cloudDensity, .1, 1, 0, 1); } +// cheap check if a location is guaranteed to not contain any clouds +// very similar to GetVerticalProfile but avoids the second texture look-up bool CumuloNimbusGuaranteedFree(vec3 position){ vec2 lngLat = getLngLat(position); vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); - vec4 hcomp_with_noise = GetHorizontalComponent(texCoords); - float horizontal_component = hcomp_with_noise.r; + vec4 hcomp_with_noise = GetLocalCloudType(texCoords); + float cloudType = hcomp_with_noise.r; vec3 noiseSample = hcomp_with_noise.gba; - float end_height = CUMULONIMBUS_END_HEIGHT * (1 - CLOUD_HEIGHT_VARIATION * noiseSample.g);//localMaxHeight(position); - float topAltitude = PLANET_RADIUS + end_height; - float thickness = end_height - CUMULONIMBUS_START_HEIGHT; + float endHeight = CUMULONIMBUS_END_HEIGHT * (1 - CLOUD_HEIGHT_VARIATION * noiseSample.g);//localMaxHeight(position); + float topAltitude = PLANET_RADIUS + endHeight; + float thickness = endHeight - CUMULONIMBUS_START_HEIGHT; // "progress" in cloud from bottom to top in range 0 to 1 float height_in_cloud = remap(length(position), PLANET_RADIUS + CUMULONIMBUS_START_HEIGHT, topAltitude, 0, 1); - return height_in_cloud > pow(horizontal_component, .1); -} - -bool pathFree(vec3 start, vec3 end, int samples = 13){ - bool acc = true; - for(int i = 1; i <= samples && acc; i++){ - float progress = float(i) / float(samples); - vec3 position = mix(start, end, progress); - acc = acc && CumuloNimbusGuaranteedFree(position); - } - return acc; + // when the position is above this function of the cloud type, it is assumed cloud-free + // you might have to change this when modifying the cloud type texture + return height_in_cloud > pow(cloudType, .2) * 1.2; } +// calculate a cheap approximation of the maximum distance that can be safely skipped float CumuloNimbusFreeDistance(vec3 position, vec3 dir, float dist_from_camera, float interval_end){ - if(!CumuloNimbusGuaranteedFree(position) || interval_end - dist_from_camera < 20000){ + if(!CumuloNimbusGuaranteedFree(position)){ return 0; }else{ int num_samples = 10; float dist_to_cover = interval_end - dist_from_camera; - float base_step = remap(dist_from_camera, 0, 200000, 400, 2000); + // further away from the camera, slight flickering of small clouds matters less + float base_step = remap(dist_from_camera, 0, 200000, 100, 2000); if(num_samples * base_step > dist_to_cover){ base_step = dist_to_cover / num_samples; } float distance = base_step; - bool free = true;//pathFree(position, position + dir * distance); + float last_distance = 0; + bool free = true; int samples_taken = 0; while(samples_taken < num_samples && free){ distance += base_step * remap(float(samples_taken) / 10, 0, 1, 1, 3); free = CumuloNimbusGuaranteedFree(position + dir * distance); samples_taken = samples_taken + 1; - } - if(!free){ - return 0; + if(!free){ + return last_distance; + } + last_distance = distance; } if(!CumuloNimbusGuaranteedFree(position + dir * distance)){ - return 0; + return last_distance; } return distance; } } -float INFINITY = 1 / 0.; +// mixture of HG, CS and Draine's phase proposed in "An Approximate Mie Scattering Function for Fog and Cloud Rendering" +float phaseComponent(float alpha, float g, float cos){ + return 1. / 4. / PI * (1 - pow(g, 2)) / pow(1 + pow(g, 2) - 2 * g * cos, 3/2.) * (1 + alpha * pow(cos, 2)) / (1 + alpha * (1 + 2 * pow(g, 2)) / 3.); +} + +// phase function from "An Approximate Mie Scattering Function for Fog and Cloud Rendering" +float cloudPhase(vec3 r1, vec3 r2){ + float cos = dot(normalize(r1), normalize(-r2)); + // particle size parameter + float d = 10e-6; + float g_HG = exp(-0.0990567 / (d - 1.67154)); + float g_D = exp(-2.20679 / (d + 3.91029) - 0.428934); + float alpha = exp(3.62489) - 8.29288 / (d + 5.52825); + float omega_D = exp(-.599085 / (d - .641583)) - .665888; + return (1 - omega_D) * phaseComponent(0, g_HG, cos) + omega_D * phaseComponent(alpha, g_D, cos); +} + +// currently just a wrapper for one cloud density function +// this is the place for adding additional cloud bands float getCloudDensity(vec3 position, vec3 cam_pos, bool hf = true){ float acc = 0; float height = length(position) - PLANET_RADIUS; if(height > CUMULONIMBUS_START_HEIGHT && height < CUMULONIMBUS_END_HEIGHT){ acc += getCumuloNimbusDensity(position, cam_pos, hf); } - return acc; } -float getCloudDensityOld(vec3 rayOrigin, vec3 rayDir, float tIntersection){ - vec3 position = rayOrigin + rayDir * tIntersection; - vec2 lngLat = getLngLat(position); - vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); - #if ENABLE_HDR - return sRGBtoLinear(textureLod(uCloudTexture, texCoords, 0).r); - #else - return textureLod(uCloudTexture, texCoords, 0).r; - #endif -} - float henyeyGreenstein(vec3 r1, vec3 r2, float g){ float cosTheta = dot(normalize(r1), normalize(r2)); float temp = 1 + pow(g, .5) + 2 * g * cosTheta; @@ -558,17 +580,7 @@ float henyeyGreenstein(vec3 r1, vec3 r2, float g){ return 1 / 4 / PI * (1 - g * g) / pow(1 + g * g + 2 * g * cosTheta, 1.5); } -float cloudPhase(vec3 r1, vec3 r2){ - return .2 * henyeyGreenstein(r1, r2, .95) + .6 * henyeyGreenstein(r1, r2, .6) + .2 * henyeyGreenstein(r1, -r2, .8); -} - -// parameter for converting cloud density in [0, 1] to density along path in 1/meter -// Source: I made it up -float DENSITY_MULTIPLIER = 2e-3; -// how much light gets absorbed relative to being scattered -float ABSORBED_FRACTION = 0.; -float HD_DISTANCE = 100000; - +// ray marching the transmittance through the cloud field. No adaptive step size used here float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam_pos, int samples=10){ if(interval.y < 0){ return 1.; @@ -577,12 +589,11 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam float path_transmittance = 1; float maximum_dist_between_samples = 1000; float interval_length = interval.y - interval.x; - float last_density = 0; float last_extinction = getCloudDensity(rayOrigin, cam_pos) * DENSITY_MULTIPLIER * (1+ABSORBED_FRACTION); for(int i = 1; i <= samples; ++i){ - // could be adapted for importance sampling + // more samples in the close vicinity of the point to capture self-shadowing of smaller clouds with fewer samples float progress = pow(float(i) / float(samples), 2); float t_now = remap(progress, 0, 1, interval.x, interval.y); @@ -597,46 +608,42 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam path_transmittance *= extinction_along_segment; last_extinction = extinction; } - return path_transmittance; } -float MS_INTENSITY = .2; - -// helper function for ray marching through an interval +// The function where all the integration happens +// uses adaptive step sizes to bring performance to an acceptable level vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, out vec3 path_transmittance, int samples_ref=10, bool secondary_rays = false){ - // do not march through purely negative intervals - if(interval.y < 0){ path_transmittance = vec3(1); return vec4(0, 0, 0, 1); } - vec3 CLOUD_COLOR = vec3(1.); - + // t values are parameters for rayOrigin + t * rayDir float t_last = interval.x; + // progress is in [0, 1] float progress = 0; vec3 inscattering_acc = vec3(0.); path_transmittance = vec3(1); + // longer segments are cut to this length in scattering calculations to not get erroneously high + // amounts of inscattering over very long segments float maximum_dist_between_samples = 250; - float minimum_dist_between_samples = 10; float interval_length = interval.y - interval.x; + // tracked for debugging float skipped_distance = 0; - //return vec4(samples, samples_ref, 0, 0) * 100; - - //return(mix(vec4(1, 0, 0, 0), vec4(0, 1, 0, 0),samples/100.) * 1000); + // assuming the sun is infinitely far away, one phase calculation is enough because only single scattering is used float phase = cloudPhase(sunDir, -rayDir); - float last_density; - + vec3 atmo_transmittance; vec3 atmo_inscattering; - //return vec4(samples, ) + // minimum normed progress that is made iteration to avoid crashes when changing step size logic float minimum_progress = 10. / interval_length; // track the start of the current cloud-free part of the interval. - // Inscattering from the atmosphere is added when a cloud is encountered. + // Inscattering from the atmosphere is added only when a cloud is encountered to reduce atmo model evaluations + // DO NOT evaluate the atmosphere model for very short intervals float t_cloudfree_start = interval.x; float start_density = getCloudDensity(rayOrigin + rayDir * interval.x, rayOrigin); bool in_cloud = start_density > 0; @@ -709,7 +716,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o t_cloudfree_start = t_now; float sdist = dist; - // clamp to keep it reasonable for very far away clouds + // clamp to keep segment lengths reasonable for very far away clouds sdist = clamp(sdist, 0, maximum_dist_between_samples); float sigma_t = (scatter_coefficient + last_scatter_coefficient) / 2 * (1 + ABSORBED_FRACTION); float transmittance_along_segment = exp(-sigma_t * sdist); @@ -717,18 +724,12 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o float ms_volume = remap(scatter_coefficient * dist, .1, 1.0, 0.0, 1.0); ms_volume *= pow(last_incoming_transmittance[0], 5); ms_volume *= MS_INTENSITY; - //ms_volume = isnan(ms_volume) ? 0 : ms_volume; - - if (secondary_rays && samples_taken % 2 == 0 || true){ - vec2 top_intersection = intersectSphere(position, sunDir, PLANET_RADIUS + CUMULONIMBUS_END_HEIGHT); - int transmittance_samples = int(remap(path_transmittance.r, 0, 1, 10, 2)); - float in_transmittance = raymarchTransmittance(position, sunDir, vec2(0, top_intersection.y), rayOrigin, transmittance_samples); - direct_incoming *= in_transmittance; - last_incoming_transmittance[1] = last_incoming_transmittance[0]; - last_incoming_transmittance[0] = in_transmittance; - } else { - direct_incoming *= clamp(2 * last_incoming_transmittance[0] - last_incoming_transmittance[1], 0, 1); - } + + vec2 top_intersection = intersectSphere(position, sunDir, PLANET_RADIUS + CUMULONIMBUS_END_HEIGHT); + int transmittance_samples = int(remap(path_transmittance.r, 0, 1, 10, 2)); + float in_transmittance = raymarchTransmittance(position, sunDir, vec2(0, top_intersection.y), rayOrigin, transmittance_samples); + direct_incoming *= in_transmittance; + vec3 msContrib = local_incoming * ms_volume; vec3 S = scatter_coefficient * direct_incoming * phase * 4 * PI * CLOUD_COLOR + msContrib / sdist; inscattering_acc += path_transmittance * (S - S * transmittance_along_segment) / sigma_t; @@ -743,7 +744,6 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o t_last = t_now; last_scatter_coefficient = scatter_coefficient; - last_density = local_density; if (path_transmittance.r < .001){ if(length(inscattering_acc) < 100 && path_transmittance.x < 1){ //surroundingColor = vec3(0, 10000, 0); @@ -955,6 +955,18 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan } +// cloud density function for the standard cosmoscout cloud system +float getCloudDensityDefault(vec3 rayOrigin, vec3 rayDir, float tIntersection){ + vec3 position = rayOrigin + rayDir * tIntersection; + vec2 lngLat = getLngLat(position); + vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); + #if ENABLE_HDR + return sRGBtoLinear(textureLod(uCloudTexture, texCoords, 0).r); + #else + return textureLod(uCloudTexture, texCoords, 0).r; + #endif +} + // Computes the color of the clouds along the ray described by the input parameters. The cloud color // is computed by intersecting 10 nested cloud layers. Each layer contributes a tenth of the final // cloud density in order to create a fake volumetric appearance. The density is faded to zero close @@ -964,7 +976,7 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan // observer and the cloud. // This method contains a couple of hard-coded values which could be made configurable in the // future. -vec4 getCloudColorOld(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistance){ +vec4 getCloudColorDefault(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistance){ // The distance between the top and bottom cloud layers. float thickness = uCloudAltitude * 0.5; @@ -1018,10 +1030,10 @@ vec4 getCloudColorOld(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDis // Check whether the cloud sphere is intersected from above... if (intersections.x > 0 && intersections.x < surfaceDistance) { // hits from above, - density += getCloudDensityOld(rayOrigin, rayDir, intersections.x) * fac; + density += getCloudDensityDefault(rayOrigin, rayDir, intersections.x) * fac; } else if (intersections.y < surfaceDistance) { // ... or from from below. - density += getCloudDensityOld(rayOrigin, rayDir, intersections.y) * fac; + density += getCloudDensityDefault(rayOrigin, rayDir, intersections.y) * fac; } } } @@ -1053,7 +1065,7 @@ float getCloudShadow(vec3 rayOrigin, vec3 rayDir) { float fac = clamp(abs(intersections.y) / fadeWidth, 0, 1); vec3 position = rayOrigin + rayDir * intersections.y; #if OLD_CLOUDS - return 1.0 - getCloudDensityOld(rayOrigin, rayDir, intersections.y) * fac; + return 1.0 - getCloudDensityDefault(rayOrigin, rayDir, intersections.y) * fac; #else topAltitude = PLANET_RADIUS + CUMULONIMBUS_END_HEIGHT; thickness = CUMULONIMBUS_END_HEIGHT - CUMULONIMBUS_START_HEIGHT; @@ -1505,9 +1517,9 @@ void main() { #if ENABLE_CLOUDS #if OLD_CLOUDS -// Old cloud model, not truly physically based +// Default cloud model, not truly physically based if (!underWater) { - vec4 cloudColor = getCloudColorOld(vsIn.rayOrigin, rayDir, uSunDir, surfaceDistance); + vec4 cloudColor = getCloudColorDefault(vsIn.rayOrigin, rayDir, uSunDir, surfaceDistance); cloudColor.rgb *= eclipseShadow; #if !ENABLE_HDR From e2a3c501f4100400be343b7582020f9ccb5a21ec Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Tue, 8 Apr 2025 08:51:17 +0200 Subject: [PATCH 49/61] add comments to the main integration loop --- .../shaders/csp-atmosphere.frag | 137 ++++++++++-------- 1 file changed, 80 insertions(+), 57 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 5b500d759..bac38105a 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -411,10 +411,23 @@ float DENSITY_MULTIPLIER = 2e-3; // how much light gets absorbed relative to being scattered float ABSORBED_FRACTION = 0.; +// parameter for tuning the intensity of the (not physically based) multiscattering approximation float MS_INTENSITY = .2; +// parameter for setting the clouds to a fancy color vec3 CLOUD_COLOR = vec3(1.); +// longer segments are cut to this length in scattering calculations to not get erroneously high +// amounts of inscattering over very long segments +float MAXIMUM_DIST_BETWEEN_SAMPLES = 250; + +// adaptive step size parameters +float CLOSE_STEP = 50; +float MID_STEP = 100; +float FAR_STEP = 200; +float MID_DISTANCE = 70000; +float FAR_DISTANCE = 200000; +int MAXIMUM_SAMPLES = 800; // get the cloud type at these texture coordinates // adds high frequency noises to the values from the cloud texture to replace coarse // bilinear interpolation artifacts with smaller artifacts that are harder to notice @@ -587,7 +600,7 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam } float t_last = interval.x; float path_transmittance = 1; - float maximum_dist_between_samples = 1000; + float MAXIMUM_DIST_BETWEEN_SAMPLES = 1000; float interval_length = interval.y - interval.x; float last_extinction = getCloudDensity(rayOrigin, cam_pos) * DENSITY_MULTIPLIER * (1+ABSORBED_FRACTION); @@ -603,7 +616,7 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam float scatter_coefficient = local_density * DENSITY_MULTIPLIER; float extinction = scatter_coefficient * (1+ABSORBED_FRACTION); - float clamped_dist = clamp(dist, 0, maximum_dist_between_samples); + float clamped_dist = clamp(dist, 0, MAXIMUM_DIST_BETWEEN_SAMPLES); float extinction_along_segment = exp(-(extinction + last_extinction) * .5 * clamped_dist); path_transmittance *= extinction_along_segment; last_extinction = extinction; @@ -625,9 +638,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o float progress = 0; vec3 inscattering_acc = vec3(0.); path_transmittance = vec3(1); - // longer segments are cut to this length in scattering calculations to not get erroneously high - // amounts of inscattering over very long segments - float maximum_dist_between_samples = 250; + float interval_length = interval.y - interval.x; // tracked for debugging float skipped_distance = 0; @@ -652,61 +663,68 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o int samples_taken = 0; float maximum_density = 0; - int maximum_samples = 1000; - float last_incoming_transmittance[2]; - last_incoming_transmittance[0] = 1; - last_incoming_transmittance[1] = 1; - while(progress < 1 && samples_taken < maximum_samples){ + //===== BEGIN OF RAY MARCHING LOOP ====== + + while(progress < 1 && samples_taken < MAXIMUM_SAMPLES){ samples_taken += 1; float t_now = remap(progress, 0, 1, interval.x, interval.y); vec3 position = rayOrigin + rayDir * t_now; + + //===== BEGIN OF STEP SIZE CONTROL ===== + + // Skipping regions that are guaranteed to be free of clouds bool skipped = false; if(!in_cloud){ float freeDistance = CumuloNimbusFreeDistance(position, rayDir, t_now, interval.y); if(freeDistance > 0){ - //return vec4(10000, 0, 0, 1); skipped_distance += freeDistance; progress += freeDistance / interval_length; skipped = true; } } - if(!skipped){ - float low_transmittance_multiplier = remap(path_transmittance.r, .5, 0, 1, 3); - float samples_taken_multiplier = remap(float(samples_taken) / maximum_samples, 0, 1, 1, 10); - float domain_length_multiplier = remap(interval_length, 10000, 30000, .5, 1); - //float random_multiplier = 1 + .8 * (texture(uNoiseTexture, position).r - .5) * remap(t_now, 0, 100000, 1, 0); - float random_multiplier= 1; - float close_step = 50; - float mid_step = 100; - float far_step = 200; - float mid_distance = 70000; - float far_distance = 200000; - float step = close_step; - if(t_now < mid_distance){ - step = remap(t_now, 0, mid_distance, close_step, mid_step); - }else{ - step = remap(t_now, mid_distance, far_distance, mid_step, far_step); - } - step /= interval_length; - progress += step * low_transmittance_multiplier * random_multiplier * samples_taken_multiplier * domain_length_multiplier; + // step size is increased when transmittance is low + float low_transmittance_multiplier = remap(path_transmittance.r, .5, 0, 1, 3); + // step size is increased when many samples have been taken already + float samples_taken_multiplier = remap(float(samples_taken) / MAXIMUM_SAMPLES, 0, 1, 1, 10); + // step size is decreased when the interval is short anyways + float domain_length_multiplier = remap(interval_length, 10000, 30000, .5, 1); + + // there are two parameterized intervals with different functions for the step size as a function of distance from camera + // Note that discontinuities in this function are a VERY BAD idea and give weird artifacts + float step = CLOSE_STEP; + if(t_now < MID_DISTANCE){ + step = remap(t_now, 0, MID_DISTANCE, CLOSE_STEP, MID_STEP); + }else{ + step = remap(t_now, MID_DISTANCE, FAR_DISTANCE, MID_STEP, FAR_STEP); } - + step /= interval_length; + progress += step * low_transmittance_multiplier * samples_taken_multiplier * domain_length_multiplier; + progress = clamp(progress, 0, 1); t_now = remap(progress, 0, 1, interval.x, interval.y); float dist = t_now - t_last; position = rayOrigin + rayDir * t_now; + //===== END OF STEP SIZE CONTROL ===== + //===== BEGIN OF SCATTERING INTEGRATION ===== + float local_density = getCloudDensity(position, rayOrigin); maximum_density = clamp(max(maximum_density, local_density), 0, 1); float scatter_coefficient = local_density * DENSITY_MULTIPLIER; - vec3 transmittance = vec3(1); - vec3 local_incoming = GetSkyLuminance(position, sunDir, sunDir, transmittance); + // the light available at that point + vec3 incoming_transmittance = vec3(1); + vec3 local_incoming = GetSkyLuminance(position, sunDir, sunDir, incoming_transmittance); + // using the luminance provided by the atmosphere model gives unstable results and artifacts + // the transmittance from the atmosphere model seems fine though + local_incoming = vec3(144809.5,129443.421875,127098.6484375) * incoming_transmittance; + - local_incoming = vec3(144809.5,129443.421875,127098.6484375) * transmittance; - if(local_density > 0){ + //===== INSIDE CLOUD ===== + if(!in_cloud){ + // if entering cloud, integrate the inscattering from the regular atmosphere for the cloud-free interval atmo_inscattering = GetSkyLuminanceToPoint(rayOrigin + rayDir * t_cloudfree_start, position, sunDir, atmo_transmittance); inscattering_acc += path_transmittance * atmo_inscattering; path_transmittance *= atmo_transmittance; @@ -715,55 +733,60 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o in_cloud_counter +=1; t_cloudfree_start = t_now; - float sdist = dist; - // clamp to keep segment lengths reasonable for very far away clouds - sdist = clamp(sdist, 0, maximum_dist_between_samples); - float sigma_t = (scatter_coefficient + last_scatter_coefficient) / 2 * (1 + ABSORBED_FRACTION); - float transmittance_along_segment = exp(-sigma_t * sdist); + // clamp to keep segment lengths reasonable to not break the lighting model + float sdist = clamp(dist, 0, MAXIMUM_DIST_BETWEEN_SAMPLES); + // extinction coefficient. + // Important to use midpoint for accurate Hillaire integration trick to work + float sigma_e = (scatter_coefficient + last_scatter_coefficient) / 2 * (1 + ABSORBED_FRACTION); + float transmittance_along_segment = exp(-sigma_e * sdist); vec3 direct_incoming = local_incoming; - float ms_volume = remap(scatter_coefficient * dist, .1, 1.0, 0.0, 1.0); - ms_volume *= pow(last_incoming_transmittance[0], 5); - ms_volume *= MS_INTENSITY; + // get transmittance through clouds vec2 top_intersection = intersectSphere(position, sunDir, PLANET_RADIUS + CUMULONIMBUS_END_HEIGHT); int transmittance_samples = int(remap(path_transmittance.r, 0, 1, 10, 2)); float in_transmittance = raymarchTransmittance(position, sunDir, vec2(0, top_intersection.y), rayOrigin, transmittance_samples); direct_incoming *= in_transmittance; + // multiscattering approximation like in Nubis + float ms_volume = remap(scatter_coefficient * dist, .1, 1.0, 0.0, 1.0); + ms_volume *= pow(incoming_transmittance.r, 5); + ms_volume *= MS_INTENSITY; vec3 msContrib = local_incoming * ms_volume; + + // Hillaire integration trick for more consistent appearance for different step sizes + // considers the transmittance along the segment while integrating the scattering inside that segment + // breaks when not using midpoint extinction coefficient vec3 S = scatter_coefficient * direct_incoming * phase * 4 * PI * CLOUD_COLOR + msContrib / sdist; - inscattering_acc += path_transmittance * (S - S * transmittance_along_segment) / sigma_t; + inscattering_acc += path_transmittance * (S - S * transmittance_along_segment) / sigma_e; + // reduce transmittance along the path path_transmittance *= vec3(transmittance_along_segment); }else{ + //===== NOT INSIDE CLOUD ===== in_cloud = false; in_cloud_counter = 0; - last_incoming_transmittance[0] = 1; - last_incoming_transmittance[1] = 1; } + //===== END OF SCATTERING INTEGRATION ===== + t_last = t_now; last_scatter_coefficient = scatter_coefficient; + // terminate ray early when there is almost no transmittance left if (path_transmittance.r < .001){ - if(length(inscattering_acc) < 100 && path_transmittance.x < 1){ - //surroundingColor = vec3(0, 10000, 0); - path_transmittance = mix(vec3(1), path_transmittance, length(inscattering_acc) / 100); - } - float skipped_fraction = skipped_distance / interval_length; - float sample_ratio = float(samples_taken) / float(maximum_samples); - //return vec4(maximum_density, 1-maximum_density, 0, 1)*10000; - //return vec4(skipped_fraction, 1-skipped_fraction, 0, 1)*10000; - //return vec4(sample_ratio, 1-sample_ratio, 0, 1)*10000; return vec4(inscattering_acc, path_transmittance.r); } + // useful when working on adaptive step sizes to ensure that a step is always taken => fewer crashes during development progress += minimum_progress; } + + //===== END OF RAY MARCHING LOOP ===== + float skipped_fraction = skipped_distance / interval_length; //return vec4(skipped_fraction, 1-skipped_fraction, 0, 1)*10000; - float sample_ratio = float(samples_taken) / float(maximum_samples); + float sample_ratio = float(samples_taken) / float(MAXIMUM_SAMPLES); //return vec4(sample_ratio, 1-sample_ratio, 0, 1)*10000; //return vec4(maximum_density, 1-maximum_density, 0, 1)*10000; - if(samples_taken == maximum_samples){ + if(samples_taken == MAXIMUM_SAMPLES){ return vec4(0, 0, 10000, 1); } From bbd39a8dda720de5bd92e07842770c3b7471ac25 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Tue, 8 Apr 2025 09:03:19 +0200 Subject: [PATCH 50/61] clean up interval length calculation --- .../shaders/csp-atmosphere.frag | 54 ++++--------------- 1 file changed, 11 insertions(+), 43 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index bac38105a..cb6d96196 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -804,38 +804,21 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o } return vec4(inscattering_acc, path_transmittance.r);// + mix(vec4(1, 0, 0, 0), vec4(0, 1, 0, 0), float(samples) / 100) * 100000; } + // computes the cloud inscattered luminance in xyz and transmittance in alpha -// assumptions of the ray marching: Cloud albedo is 100 percent, extinction = outscattering vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistance, out vec3 transmittance) { - // The distance between the top and bottom cloud layers. - float thickness = 8000; - // The distance to the planet surface where the fade-out starts. - float fadeWidth = thickness * 2.0; + float thickness = CUMULONIMBUS_END_HEIGHT - CUMULONIMBUS_START_HEIGHT; - // The altitude of the upper-most cloud layer. + // The sphere radius of the upper-most and lowest cloud layers float topAltitude = PLANET_RADIUS + CUMULONIMBUS_END_HEIGHT; float lowAltitude = PLANET_RADIUS + CUMULONIMBUS_START_HEIGHT; - vec2 intersections = intersectSphere(rayOrigin, rayDir, topAltitude); + vec2 topIntersections = intersectSphere(rayOrigin, rayDir, topAltitude); + vec2 lowIntersections = intersectSphere(rayOrigin, rayDir, lowAltitude); vec2 atmo_intersections = intersectAtmosphere(rayOrigin, rayDir); float originHeight = length(rayOrigin); bool hitsSurface = surfaceDistance < atmo_intersections.y || intersectSphere(rayOrigin, rayDir, PLANET_RADIUS).y > 0; - - // Compute intersection point of view ray with clouds. Use this to compute the illuminance at this - // point as well as the transmittance of the atmosphere towards the observer. - vec3 p = rayOrigin + rayDir * (intersections.x < 0 ? intersections.y : intersections.x); - vec3 skyIlluminance; - - vec3 sunIlluminance = GetSunAndSkyIlluminance(p, uSunDir, skyIlluminance); - - // We will accumulate the cloud density in this variable. - float density = 0.0; - - - vec2 topIntersections = intersections; - vec2 lowIntersections = intersectSphere(rayOrigin, rayDir, lowAltitude); - bool originInClouds = originHeight > lowAltitude && originHeight < topAltitude; bool hitTop = topIntersections.y > 0; @@ -847,6 +830,7 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan vec2 interval1 = vec2(0, -1); vec2 interval2 = vec2(0, -1); + // use infintiy for no intersection to allow selecting other variables through min operation float lowXcorrected = lowIntersections.x < lowIntersections.y ? lowIntersections.x : INFINITY; if(above){ @@ -857,30 +841,22 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan // ray exits the cloud layer at the bottom and reintersects it, creating a second interval interval2.x = lowIntersections.y; interval2.y = topIntersections.y; - //return vec4(0, 100000, 0, 1); }else{ // ray leaves the cloud layer on the upper side interval1.y = topIntersections.y; - //return vec4(100000, 0, 0, 1); } }else{ if(hitBottom){ - //return vec4(10000, 0, 0, 1); interval1.y = min(surfaceDistance, lowXcorrected); - //return vec4(10000, 0, 0, 1); }else{ - //float topYcorrected = topIntersections.y > topIntersections.x ? topIntersections.y : INFINITY; interval1.y = surfaceDistance; - //return vec4(0, 10000, 0, 1); } if(!hitTop || surfaceDistance < topIntersections.x){ interval1.y = -1; } - //return vec4(0, 0, 100000, 1); } }else{ if(below){ - //return vec4(0, 10000, 0, 1); if(lowIntersections.y > 0){ interval1.x = lowIntersections.y; interval1.y = topIntersections.y; @@ -897,7 +873,6 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan }else{ interval1.y = topIntersections.y; } - } } @@ -924,13 +899,11 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan vec3 transmittance_int1 = vec3(1); vec3 transmittance_int2 = vec3(1); vec4 scatter_data1 = raymarchInterval(rayOrigin, rayDir, sunDir, interval1, transmittance_int1, 50, true); - vec4 scatter_data2 = raymarchInterval(rayOrigin, rayDir, sunDir, interval2, transmittance_int2, 50, true); - - - - //return scatter_data1; + vec4 scatter_data2 = vec4(0,0,0,1); + if(scatter_data1.a > .0001){ + scatter_data2 = raymarchInterval(rayOrigin, rayDir, sunDir, interval2, transmittance_int2, 50, true); + } if(scatter_data1.x < 1e-6 && scatter_data2.x < 1e-6){ - //return vec4(0, 10000, 0, 1); // no significant inscattering from clouds. just return standard inscattering if(hitsSurface){ return vec4(GetSkyLuminanceToPoint(rayOrigin, rayOrigin + surfaceDistance * rayDir, sunDir, transmittance), transmittance); @@ -938,12 +911,11 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan return vec4(GetSkyLuminance(rayOrigin, rayDir, sunDir, transmittance), transmittance.r); } } - + //return vec4(interval1.x, 1, 0, 1); vec3 transmittance_before_int1; vec3 inscattering_before_int1 = GetSkyLuminanceToPoint(rayOrigin, rayOrigin + rayDir * interval1.x, sunDir, transmittance_before_int1); - if(scatter_data2.x < 1e-6){ // no significant inscattering from second interval. return first interval inscattering with transmittance behind vec3 transmittance_behind_int1 = vec3(1); @@ -970,11 +942,7 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan return vec4(inScatter, transmittance.x); } - - - return vec4(0, 100000, 0, 1); - } From ba25c43452b062447ee33c4d2e157636505b01ab Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Tue, 8 Apr 2025 09:15:10 +0200 Subject: [PATCH 51/61] final clean-up --- .../shaders/csp-atmosphere.frag | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index cb6d96196..5ce7e0aa7 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -475,8 +475,8 @@ float getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ float cloudDensity = remap(pow(1 - exp(-COVERAGE_MULTIPLIER * cloudBase), .4), .1, 1, 0, 1); - float lfInfluence = remap(erosionStrength, 0, .8, 0, 1.4); - float hfInfluence = .6 * hfStrength; + float lfInfluence = remap(erosionStrength, 0, .8, .05, 1.4); + float hfInfluence = .1 + .6 * hfStrength; if(cameraDist < LF_END_DISTANCE){ vec4 lfNoises = textureLod(uNoiseTexture, position / 15000, 0); // blend between worley and perlin noises using a noise at a different frequency to reduce repetition @@ -487,8 +487,8 @@ float getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ cloudDensity = clamp(lfInfluence * blended_lf_noise - (lfInfluence - cloudDensity), 0, 1); if(high_res && cameraDist < HF_END_DISTANCE){ - vec4 hf_noises = textureLod(uNoiseTexture, position / 3000, 0); - float blended_hf_noise = mix(hf_noises.r, hf_noises.b, noise2D.b); + vec4 hf_noises = textureLod(uNoiseTexture, position / 3521, 0); + float blended_hf_noise = mix(hf_noises.r, 1 - hf_noises.b, noise2D.b); blended_hf_noise = mix(blended_hf_noise, .5, remap(cameraDist, HF_FADE_DISTANCE, HF_END_DISTANCE, 0, 1)); cloudDensity = clamp(hfInfluence * blended_hf_noise - (hfInfluence - cloudDensity), 0, 1); }else{ @@ -612,7 +612,7 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam float dist = t_now - t_last; vec3 position = rayOrigin + rayDir * t_now; - float local_density = getCloudDensity(position, cam_pos); + float local_density = getCloudDensity(position, cam_pos, false); float scatter_coefficient = local_density * DENSITY_MULTIPLIER; float extinction = scatter_coefficient * (1+ABSORBED_FRACTION); @@ -626,7 +626,7 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam // The function where all the integration happens // uses adaptive step sizes to bring performance to an acceptable level -vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, out vec3 path_transmittance, int samples_ref=10, bool secondary_rays = false){ +vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, out vec3 path_transmittance, bool secondary_rays = false){ if(interval.y < 0){ path_transmittance = vec3(1); return vec4(0, 0, 0, 1); @@ -898,10 +898,10 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan vec3 transmittance_int1 = vec3(1); vec3 transmittance_int2 = vec3(1); - vec4 scatter_data1 = raymarchInterval(rayOrigin, rayDir, sunDir, interval1, transmittance_int1, 50, true); + vec4 scatter_data1 = raymarchInterval(rayOrigin, rayDir, sunDir, interval1, transmittance_int1, true); vec4 scatter_data2 = vec4(0,0,0,1); if(scatter_data1.a > .0001){ - scatter_data2 = raymarchInterval(rayOrigin, rayDir, sunDir, interval2, transmittance_int2, 50, true); + scatter_data2 = raymarchInterval(rayOrigin, rayDir, sunDir, interval2, transmittance_int2, true); } if(scatter_data1.x < 1e-6 && scatter_data2.x < 1e-6){ // no significant inscattering from clouds. just return standard inscattering @@ -911,7 +911,7 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan return vec4(GetSkyLuminance(rayOrigin, rayDir, sunDir, transmittance), transmittance.r); } } - + //return vec4(interval1.x, 1, 0, 1); vec3 transmittance_before_int1; vec3 inscattering_before_int1 = GetSkyLuminanceToPoint(rayOrigin, rayOrigin + rayDir * interval1.x, sunDir, transmittance_before_int1); From ef5b438948f86cb5c1b1f825e6552e8775318b47 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Mon, 14 Apr 2025 08:42:43 +0200 Subject: [PATCH 52/61] remove debug printing and make default cloud model activation independent of cloud type texture in settings --- plugins/csp-atmospheres/src/Atmosphere.cpp | 35 +++++++--------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/plugins/csp-atmospheres/src/Atmosphere.cpp b/plugins/csp-atmospheres/src/Atmosphere.cpp index 2ac339e04..dc670f93a 100644 --- a/plugins/csp-atmospheres/src/Atmosphere.cpp +++ b/plugins/csp-atmospheres/src/Atmosphere.cpp @@ -206,7 +206,6 @@ void Atmosphere::configure(Plugin::Settings::Atmosphere const& settings) { } mShaderDirty = true; } - logger().info("read top texture at " + settings.mCloudTypeTexture.value()); // Reload the limb luminance texture if required. if (mSettings.mLimbLuminanceTexture != settings.mLimbLuminanceTexture) { @@ -260,9 +259,18 @@ void Atmosphere::createShader(ShaderType type, VistaGLSLShader& shader, Uniforms cs::utils::replaceString( sFrag, "ATMOSPHERE_RADIUS", std::to_string(mRadii[0] + mSettings.mTopAltitude)); cs::utils::replaceString( - sFrag, "ENABLE_CLOUDS", std::to_string(mSettings.mEnableClouds.get() && mCloudTexture && mCloudTypeTexture)); + sFrag, "ENABLE_CLOUDS", std::to_string(mSettings.mEnableClouds.get() && mCloudTexture)); + if(mSettings.mEnableClouds.get() && !mCloudTexture){ + logger().warn("No cloud texture in config but clouds are enabled"); + } cs::utils::replaceString( - sFrag, "OLD_CLOUDS", std::to_string(!mSettings.mAdvancedClouds.get())); + sFrag, "OLD_CLOUDS", std::to_string(!mSettings.mAdvancedClouds.get() || !(mCloudTypeTexture) || !(mCloudTexture))); + if(mSettings.mAdvancedClouds.get() && !mCloudTypeTexture){ + logger().warn("No cloud type texture in config but advanced clouds activated"); + } + if(mSettings.mAdvancedClouds.get() && !mCloudTexture){ + logger().warn("No cloud texture in config file but advanced clouds activated"); + } cs::utils::replaceString(sFrag, "ENABLE_LIMB_LUMINANCE", std::to_string(mSettings.mEnableLimbLuminance.get() && mLimbLuminanceTexture)); cs::utils::replaceString(sFrag, "ENABLE_WATER", std::to_string(mSettings.mEnableWater.get())); @@ -302,27 +310,6 @@ void Atmosphere::createShader(ShaderType type, VistaGLSLShader& shader, Uniforms uniforms.noiseTexture2D = shader.GetUniformLocation("uNoiseTexture2D"); uniforms.cloudTypeTexture = shader.GetUniformLocation("uCloudTypeTexture"); - - // printing the names of the uniforms - GLuint program = shader.GetProgram(); - int iNumUniforms, iMaxNameLength; - - glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &iNumUniforms); - glGetProgramiv(program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &iMaxNameLength); - logger().info("number of uniforms: " + std::to_string(iNumUniforms) + " max length of uniform name: " + std::to_string(iMaxNameLength)); - char name[100]; - GLsizei iLength; - GLint iSize; - GLenum iType; - for(int i = 0; i < iNumUniforms; i++){ - glGetActiveUniform( - program, static_cast(i), iMaxNameLength, &iLength, &iSize, &iType, name); - const GLint iLocation = glGetUniformLocation(program, name); - logger().info("uniform with name \"" + std::string(name) + "\" @ " + std::to_string(iLocation)); - } - - logger().info("sunDir @ " + std::to_string(uniforms.sunDir) + " noiseTexture @ " + std::to_string(uniforms.noiseTexture)); - // We bind the eclipse shadow map to texture unit 3. The color and depth buffer are bound to 0 and // 1, 2 is used for the cloud map, 3 is used for the limb luminance texture. if (type == ShaderType::eAtmosphere) { From 6054600b5b77c526ccecedf90e12e6734128c4a4 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Mon, 14 Apr 2025 09:59:24 +0200 Subject: [PATCH 53/61] advanced cloud model documentation --- docs/advanced_cloud_model.md | 44 ++++++++++++++++++ docs/img/banner-advanced-clouds.jpg | Bin 0 -> 94109 bytes docs/img/cloudType.jpg | Bin 0 -> 4660 bytes docs/img/cloudType_density_prior.jpg | Bin 0 -> 3409 bytes ...loudType_high_frequency_noise_strength.jpg | Bin 0 -> 3090 bytes ...cloudType_low_frequency_noise_strength.jpg | Bin 0 -> 3864 bytes plugins/csp-atmospheres/textures/cloudTop.jpg | Bin 4620 -> 4660 bytes .../csp-atmospheres/textures/cloudTop2.xcf | Bin 35234 -> 35839 bytes 8 files changed, 44 insertions(+) create mode 100644 docs/advanced_cloud_model.md create mode 100644 docs/img/banner-advanced-clouds.jpg create mode 100644 docs/img/cloudType.jpg create mode 100644 docs/img/cloudType_density_prior.jpg create mode 100644 docs/img/cloudType_high_frequency_noise_strength.jpg create mode 100644 docs/img/cloudType_low_frequency_noise_strength.jpg diff --git a/docs/advanced_cloud_model.md b/docs/advanced_cloud_model.md new file mode 100644 index 000000000..aa5342a92 --- /dev/null +++ b/docs/advanced_cloud_model.md @@ -0,0 +1,44 @@ + + +

+ +

+ +# Advanced Cloud model + +The advanced cloud model is a new addition to the atmospheres plug-in drawing heavy inspiration from Andrew Schneider's talks about the Nubis cloud model in Decima Engine. There is one new type of texture that has to be provided in the config file, `cloudTypeTexture`. + +
+ cloud type texture + density prior + low frequency noise influence + high frequency noise influence +
+ +The texture is sampled depending on cloud type (U) and height in the cloud layer (V). The cloud type by default is calculated from the conventional cloud texture (+ some 2D noise and scaling), but you could also easily modify the shader code to read the cloud type directly from some texture. + +The channels of the texture represent +1. The base density of the cloud. Unlike in Andrew Schneider's work, a single texture has to suffice for this because the cloud bottoms aren't as relevant for this system's main use case, generating views from space. In the shader code, the cloud type is remapped so that all values greater than `CLOUD_COVER_MAX` get assigned the maximum cloud type. This helps produce nice clean cloud tops for very large cloud formations. +2. Influence strength of low-frequency noises. +3. High-frequency noise influence. Keep this low for cloud bottoms. + +All channels can be fine-tuned for specific scenarios. Currently the system is configured for large scale cloud scapes seen from space by default. + +All noises are subject to a LOD system so that high-frequency noises are only sampled when they need to be. If you are changing the noise blending, you might also consider changing the LOD interval constants. + +## References +### talks by Andrew Schneider at the SIGGRAPH advances in real-time rendering workshop +[2015](https://advances.realtimerendering.com/s2015/The%20Real-time%20Volumetric%20Cloudscapes%20of%20Horizon%20-%20Zero%20Dawn%20-%20ARTR.pdf) + +[2017](https://advances.realtimerendering.com/s2017/Nubis%20-%20Authoring%20Realtime%20Volumetric%20Cloudscapes%20with%20the%20Decima%20Engine%20-%20Final%20.pdf) + +[2022](https://advances.realtimerendering.com/s2022/SIGGRAPH2022-Advances-NubisEvolved-NoVideos.pdf) + +[2023](https://advances.realtimerendering.com/s2023/Nubis%20Cubed%20(Advances%202023).pdf) + +### Phase function used + +Jendersie, Johannes, and Eugene d'Eon. "An Approximate Mie Scattering Function for Fog and Cloud Rendering." ACM SIGGRAPH 2023 Talks. 2023. 1-2. \ No newline at end of file diff --git a/docs/img/banner-advanced-clouds.jpg b/docs/img/banner-advanced-clouds.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c890258de86b006ec803849e81c4112cc7bd3385 GIT binary patch literal 94109 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
  • WFUI{hV^8l^pijWgk#E0yWyy|**d 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 literal 0 HcmV?d00001 diff --git a/docs/img/cloudType_density_prior.jpg b/docs/img/cloudType_density_prior.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32313fc28e83e0938cd955d611be68fc5902c741 GIT binary patch literal 3409 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 literal 0 HcmV?d00001 diff --git a/docs/img/cloudType_low_frequency_noise_strength.jpg b/docs/img/cloudType_low_frequency_noise_strength.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98bb8e78f12aebb432497ea5526aae5b286a5c4a GIT binary patch literal 3864 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 P%pU_B;rmOSyjTAL@4%lz literal 0 HcmV?d00001 diff --git a/plugins/csp-atmospheres/textures/cloudTop.jpg b/plugins/csp-atmospheres/textures/cloudTop.jpg index 221d870aae83b34eef9b42f7496205b586c6f1ac..073311b0d28b813cb29e808cdc19316a298fcc77 100644 GIT binary patch delta 3636 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 QAoaKW0+gSU2)`)*0m0j3761SM delta 3605 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 delta 8362 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 VsfXjAYd?v99_G9enEHeNe*u{9Rnh Date: Tue, 22 Jul 2025 14:05:01 +0200 Subject: [PATCH 54/61] better cloud blending --- .../shaders/csp-atmosphere.frag | 44 +++++++++++------- .../csp-atmospheres/textures/cloudTop2.xcf | Bin 35839 -> 34796 bytes plugins/csp-web-api/src/Plugin.cpp | 4 +- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 5ce7e0aa7..c76e03312 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -386,7 +386,7 @@ float INFINITY = 1 / 0.; // heights between which clouds appear float CUMULONIMBUS_START_HEIGHT = 1500; float CUMULONIMBUS_END_HEIGHT = 5000; -float COVERAGE_MULTIPLIER = 2; +float COVERAGE_EXPONENT = .5; float CLOUD_BASE_FRACTION = 0.; // cloud types are remapped from [0,1] so that all values above this become 1 @@ -422,10 +422,10 @@ vec3 CLOUD_COLOR = vec3(1.); float MAXIMUM_DIST_BETWEEN_SAMPLES = 250; // adaptive step size parameters -float CLOSE_STEP = 50; +float CLOSE_STEP = 30; float MID_STEP = 100; float FAR_STEP = 200; -float MID_DISTANCE = 70000; +float MID_DISTANCE = 35000; float FAR_DISTANCE = 200000; int MAXIMUM_SAMPLES = 800; // get the cloud type at these texture coordinates @@ -461,7 +461,7 @@ vec3 GetVerticalProfile(vec3 position){ // "progress" in cloud from bottom to top in range 0 to 1 float height_in_cloud = remap(length(position), PLANET_RADIUS + CUMULONIMBUS_START_HEIGHT, topAltitude, 0, 1); vec4 cloudConfig = textureLod(uCloudTypeTexture, vec2(cloudType, 1-height_in_cloud), 0); - return vec3(cloudType > 0 ? pow(cloudConfig.r, 1.5) : 0., cloudConfig.g, cloudConfig.b); + return vec3(remap(cloudConfig.r, .1, 1, 0, 1), cloudConfig.g, cloudConfig.b); } // get the density of clouds at a position in 3d space @@ -471,24 +471,29 @@ float getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ float erosionStrength = cloudConfig.g; float hfStrength = cloudConfig.b; float cameraDist = length(cam_pos - position); + vec4 noise2Dl = textureLod(uNoiseTexture2D, getLngLat(position) * 1, 0); vec4 noise2D = textureLod(uNoiseTexture2D, getLngLat(position) * 5, 0); - float cloudDensity = remap(pow(1 - exp(-COVERAGE_MULTIPLIER * cloudBase), .4), .1, 1, 0, 1); + float cloudDensity = pow(cloudBase, COVERAGE_EXPONENT); - float lfInfluence = remap(erosionStrength, 0, .8, .05, 1.4); - float hfInfluence = .1 + .6 * hfStrength; + float lfInfluence = cloudConfig.g; + float hfInfluence = hfStrength; if(cameraDist < LF_END_DISTANCE){ - vec4 lfNoises = textureLod(uNoiseTexture, position / 15000, 0); + vec4 lfNoises = textureLod(uNoiseTexture, position / 5000, 0); // blend between worley and perlin noises using a noise at a different frequency to reduce repetition - float blended_lf_noise = mix(lfNoises.r, 1 - lfNoises.b, noise2D.r); + float lr_worley_noise = (1 - lfNoises.b) * .8 + lfNoises.r * .2; + float lr_whispy_noise = lfNoises.r * .2 + lfNoises.g * .8; + float blended_lf_noise = mix(lr_worley_noise, lr_whispy_noise, noise2Dl.r); // when camDist is in the fade out range, the noise is mixed with 0.5 - blended_lf_noise = mix(blended_lf_noise, .5, remap(cameraDist, LF_FADE_DISTANCE, LF_END_DISTANCE, 0, 1)); + blended_lf_noise = mix(blended_lf_noise, .5, remap(cameraDist, LF_FADE_DISTANCE, LF_END_DISTANCE, 0, 1)) * .5 + .5 * noise2D.r; // using the formula from Andrew Schneider's SIGGRAPH presentations on Nubis cloudDensity = clamp(lfInfluence * blended_lf_noise - (lfInfluence - cloudDensity), 0, 1); if(high_res && cameraDist < HF_END_DISTANCE){ - vec4 hf_noises = textureLod(uNoiseTexture, position / 3521, 0); - float blended_hf_noise = mix(hf_noises.r, 1 - hf_noises.b, noise2D.b); + vec4 hf_noises = textureLod(uNoiseTexture, position / 1000, 0); + float hr_worley_noise = (1 - hf_noises.b) * .5 + lfNoises.r * .5; + float hr_whispy_noise = hf_noises.b * .3 + lfNoises.g * .7; + float blended_hf_noise = mix(hr_worley_noise, hr_whispy_noise, lfNoises.r); blended_hf_noise = mix(blended_hf_noise, .5, remap(cameraDist, HF_FADE_DISTANCE, HF_END_DISTANCE, 0, 1)); cloudDensity = clamp(hfInfluence * blended_hf_noise - (hfInfluence - cloudDensity), 0, 1); }else{ @@ -504,7 +509,10 @@ float getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ if(isnan(cloudDensity)){ cloudDensity = 0; } - return remap(cloudDensity, .1, 1, 0, 1); + + float h = length(position) - PLANET_RADIUS; + float height_factor = exp(-h / 4000); + return cloudDensity * height_factor; } // cheap check if a location is guaranteed to not contain any clouds @@ -522,7 +530,7 @@ bool CumuloNimbusGuaranteedFree(vec3 position){ float height_in_cloud = remap(length(position), PLANET_RADIUS + CUMULONIMBUS_START_HEIGHT, topAltitude, 0, 1); // when the position is above this function of the cloud type, it is assumed cloud-free // you might have to change this when modifying the cloud type texture - return height_in_cloud > pow(cloudType, .2) * 1.2; + return cloudType == 0;//pow(cloudType, .2) * 1.2; } // calculate a cheap approximation of the maximum distance that can be safely skipped @@ -558,20 +566,20 @@ float CumuloNimbusFreeDistance(vec3 position, vec3 dir, float dist_from_camera, } // mixture of HG, CS and Draine's phase proposed in "An Approximate Mie Scattering Function for Fog and Cloud Rendering" -float phaseComponent(float alpha, float g, float cos){ - return 1. / 4. / PI * (1 - pow(g, 2)) / pow(1 + pow(g, 2) - 2 * g * cos, 3/2.) * (1 + alpha * pow(cos, 2)) / (1 + alpha * (1 + 2 * pow(g, 2)) / 3.); +float phaseComponent(float alpha, float g, float c){ + return 1. / 4. / PI * (1 - pow(g, 2)) / pow(1 + pow(g, 2) - 2 * g * c, 3/2.) * (1 + alpha * pow(c, 2)) / (1 + alpha * (1 + 2 * pow(g, 2)) / 3.); } // phase function from "An Approximate Mie Scattering Function for Fog and Cloud Rendering" float cloudPhase(vec3 r1, vec3 r2){ - float cos = dot(normalize(r1), normalize(-r2)); + float c = dot(normalize(r1), normalize(-r2)); // particle size parameter float d = 10e-6; float g_HG = exp(-0.0990567 / (d - 1.67154)); float g_D = exp(-2.20679 / (d + 3.91029) - 0.428934); float alpha = exp(3.62489) - 8.29288 / (d + 5.52825); float omega_D = exp(-.599085 / (d - .641583)) - .665888; - return (1 - omega_D) * phaseComponent(0, g_HG, cos) + omega_D * phaseComponent(alpha, g_D, cos); + return (1 - omega_D) * phaseComponent(0, g_HG, c) + omega_D * phaseComponent(alpha, g_D, c); } diff --git a/plugins/csp-atmospheres/textures/cloudTop2.xcf b/plugins/csp-atmospheres/textures/cloudTop2.xcf index 4fa0c4e93d248a89267b483a5c7707c900216165..e5c0cbb94ed0d072dc0c51939f237d54f72415b2 100644 GIT binary patch delta 20490 zcmbunbzD{5w?4YpT$>ItKsqI)BrU)I0~8U&00EKikVazB-J7zzvAYYqyBoUzDGPqj z+`RAko^$`W=XXC>daX6)7<0@yM?7OJ`x?lXN>XJn@5JNr6!68z7lSW(9#15`dfsHh zcvY`d;3PHi&mbTsGA2$_dzSuGeS7_hnt?Hi{*gi2nwA!t+TLdWKRzr+nt6{JrLAc; ze7K~6e~6IH|KJ$#zq0Hf;(y5S|K$>RSHBPDOs0lK#k$7D1Ox>p#sxXVLT~j#0AC2hb7?(C%hC8l^UTL9YZM-{Y~QiqGBT{ zvG#xe%fvjzTpLgL`^5+0?!Tj9qy)dX1WogixEC0Zps5`eoe&ff6i1&8iw=lP3=F~) z!h-w9|MyB*Y(fCN!u{u=l&IMM`HXN;Odu}R#s9pO5Skd}AMF2-W0E0eP*PY>@_$(S#f2q=Mg=8=1(*cH1X6Vhc~hzW)mi`iL$CqxNWbLT4sk(# z2|NLX@dZf!fMEF=(lwU}Y2}bn`^h@yjcRQ5Zj!%h-)JzJBiw}#5w$nE^ zHPhD&itcA?r$1-*6qC{V=#~*Pu9e zx(9-^$Bov+hwTVF`yZPBCy9{IIVd_LAyj*uxyAq0(;>*KS6;$tEc6ELwk z(P0VN<1GFcX*~Wzpgqpg%xr}D{~G~^DSQ6kQ@Do4B*d6HP^07?>lXk8{X4qti2o>; zuFHS>C-STR4~wt;KLdvT=cXWm(GnDyY6|pytr$art8cO(j0_-RL=euX2+E0=q?q16 z)UO09iGs4&-2Oks-THqHP3ixsSF!gxd2IBbaR##eH~#%@+4)~XS}FBk43H8IX+AT@>ckxo8TD<=>hU8gLsmRJg#&RK3`N^N=`vlo0H@5@YP3u_A!JI zR-Dg>ycHFfkd%^@8#G9MsG_p!Jar8nT|GU0gW*QTrl!Q~r-ilksIg;gi0!X&HnwBO zj$;3zyA7!*o!p=yLzR?ORW-D9hEXy@6H_yD%aNl;+t`htFwuU>q$!gf9PB3w^er`9 z4UKTq(t7Mz+X)jVPnj~!*~P_mri-(4zbrRIM5!zobb#ET!3v5PRZT-fYnYC{fsx4w z3#-w#wi6ttPMhK4HhZpz=X_6(d4hUN4Ub`Z!%fUAtVY?6pXli9I%}?nx36D7fSyyCG%>RrId;7LRA<-O9zF{L!y`!4pU4PGC&9lhkg-x! z($O1kY-TmuX8dHQS+hNTgTf+X;*(NIG9wsorKYT@t!rRtYB|bwg5wM~5AVS6nD~@* zE+;oPN04Nt&S`25(=)tk$xsS0CYp-6%>SIx(3E0 zEXLS5Oq)4xVR)=$YF<%Q!}8T+4I|L7R-FZL^o7GZIL-11h=|WBs%%)fe#_RaP5t69 zqQ8Zjq5?gTk(C<=c@&hCRMfR}bcdT-jX+kD~TC7})&kzZ5? z{e!-c9WZ!^{7`H|HFYg*9fRSf7Nf>bn-dV1UA21qp_At?T_IN)(g)QMu|9EDvJaYL zWS(QsLvcfgDyyofVfSK}S&kVuV}3|-@siEl{!wkT(|+Hq-A8VT!Sf3 zMM?@<9W06Y*vakz2?Y(C_MNzR<@$|lSFc7MZr1>&kIBElh=U$Dde^b-Y)Y8_aESIJr=f+_)YUUGA2Z24Ah~q){F*>jh!3t~pAtAMSMnU(F7IYEg< z%XS>Uc;n8U>ld5B`06de=F#e$j-G*$nYHa?7oV7{nss|lUAlGa=2eJx{^Ip}EXx-W z=@k_t5`EHqS!O_|9QGKFxvHwVCeeALKOB^H4lY>O(&gI@HDA4P`^MFa=bA5Ex&448 zd{(4~F0G`rvsKzEJ9p{Y z-6wpgq#M-GCDxXu#IT~UFY5Hn=<1tVjI^8L>J<{lRV;5haQf1vbLTJLeDItF zEfMXLBvQT7Abm-NR)9WL)UhdsW9N?2nrFBylBmt2XaGbo}HQ(#(-FJ?Adn zxc|I`D!ZrOpvuS+xtoxB2&@*}%CG_!IL$NX1w<$3menrb*tGY^@l&TypFDB$)amBS zw;sKG$3ku*_KO-XSx_?r?+#H=#G%#IGc++DY2z^6-8*DaT48nl@^xEx9X@{i?vvN=3H((jT`eq^EL;y6bZfAJ5}h+8x3zb2_3)2O$u6l`x_bSV-TRN7 zI(hQM(IbbC96x>G`n_kb-_!NFN9iRbVc!M~qE^6f`2-+tm_{>{{GNe`e~R7Dep)!KHFlj}Sm z|L~ZU?4p__Yq#v&yMO3G7n?QS_`5Y|8nG?s39y>-(wjDc!*`GLfg}d|U zMa#!82qhkiOGwGeE2S#G8YQVEU8(se(Nr5v-6j(-ne-Kr{nBta_rmjW1t54 zX~_Qc)w@q$LES7aDKluOs*dqU*k|9cxQxQ;<(qaLJa*>7)mwM(KYH}w-kn=GA#~Y~ z96q@J;NfFuFWq|h;tluV^EVMuR;-yaSJ5&WWe+BHMs&mY~tedEfxlSdDOoX-93-U~e_TO9ES+OkM3UTQH3L3*lPJ(aDDyv(yWzW%ODqzdU&tF?x+uAU~r}uB3 zJ-&P6;@RWJ4j(^t?#iu)&)<9i|JJr2)Qv%ZL$yq8r+I}X<=}{K*?YWS!cSknx3;zS zj{q$`ymjT=sS_toHebGZ|H-R&AHRNYYySb8BOy6JURl>_;!MBj#h_ogdH)%Du(3HX z!8W$Nx%K;(5AR++!3@rxK6CE!^}E=2m>dW89h6>LZm62UsL6AK;?wiW>sG;>-+1^E zdtp(e@nzynJ%+*7fT*ZewG;dEd{zvkT`Q%de(yJ!wu*LUwuG zicPyuT)O|_-RJL+oZsH}gS4M-{r>sGn`aO2-oAb3KDO06>>OyWlk4gNvFzZX8pfli zc}1iZ*RI&G>u~eU$FDzrYy0t|;|Dm4v|nq3_TD^y{P6z$hmW7VdW%CNl)I}Nau1YO z8)h-V%`YLhdgbPwhfZF)`@H4T_jb0U?}upn)gSGxUq8Nm_3X)`M^B!=YGFjzrV$H>aTZDCw)?V9ZePM*7V_bFxFLFxHFm=17n!^UfQ{p#h**Kgl_ zq+<8e_6$~3)iSai&rSD^%q(BNW#6%LS8qRlMVWVyuD(w3jw?_&w#?g>H!W|$6)S;- z0@t1%MRi@{(G#5KM=UOB*tq-1X}VFtwvCP~{Gila>$n=ti4X`lWh3j{pyn6q+^+zY$#dP*{@FDt7DDB(lPoK!g&d)f1{}8i1 z?+q>NoaP3_WtT4lU&N8vgs(q*ZKJeeojo0$l(C0k-v$EagqaJ_6#L?ii|Ap2P3>DDLX`2bGWrQPnD74wKLSMi}ss0D|<0e z_7N3Eg4ZT|nC65-RQ0g_BFHWoqRNQV6p#;RN=?czQ#+T1e9*8&jS=OwGAz&dE ziW)|v9p^`}9PbZ<(2&|bHcOg z7)FFJg4Om)6Tc$NgH%!j1}kZs+By3sm91g;G(8p-N9ZR-BpGochNuW!i8zAx4|tmL z)HED9c}_%DW0RoWUVF$>VbTQ$s;FULJ<-iCv3$*bfv$t@koUL&_cT~hUEgxNvsYAJ zL(>U?r-PdMWl``I6%l?%=l~0-sb_BI zJWS`OhsAanjJ?k+!iEF(vz3EfK*>aXT5U-qkNYuX^d~4Ndz`UAZR+nrxsbOQRhHHC=O? zDei&s*_DkeHf}$7=Gr~My2%EHG_RId(l)f3IKwk2F1<*wZ0+`g&DS5OY9YZxDmL2I zjvdcT$YRn2-zO_5AB~5+vantAc zhQy}kme#Cdb#Gc9-D zkVT90Dwb~Ad-C#~F?N$CPj{O$-+O_dAMrmM;J?tv%X7Bd%o)=rO&B-U+G2#!a9te@ zH5FwgB}ElAZ3DAW6Q|Gd3ybH9>(}i(e(}~g`>E4i=XiQA@DB_k!C8!5NKk;EuaDPU zcXt=ZNfYhHjhZwX1hvbZXAb*`5ph0z)ux^b5fXC(T(ZM43^2r=~$CZEHVc?gA{> zOn0vZ{sAH3;SrJ1{1_&BLu7b(Xo$bxLNCubuG1YSjvG7D)X+drM^jB1YbE4iK<7VY zriWj6yg+uE$zTk-4%rh8=11DtJJ0qBiWIm^Ga04=3T0(ANNZv>W}=gur+>JU>+HE+ z-o62Wfx)3+VI;gouxgrWFkh)fRYOBZ-`E@}pUb=j!Bb|q&7SAwz0fZpFeo^Lgfbx{ z_*#&^?*ebnd2VjbQ|u><9c6B0sH>x;u8Ntf01?mtoMdWkV?W(}et?6Mi`yIzY#y@k zC#n^J!NEbq|ARnt`p`j2tYRLZ4vk^Z;8=SnH;;vaY10i9^|aL0RFo8z6p_5DX=>|Z zhRB!a_y|g->nR%ucdCjK8G2d)yIl=O)6~jlqSLJTg3Hr~&9^Wy(9_buWEF=hutQsv zRkem07@Lo_b8vPaZ8LH5Bu8iGnQpV(=gjr+U_H;xoik_ltXZzk&QmAbkGC0RVQQ>5 zOj`q+c<4|C3XEVYYXV%e7&CtI48c@qZC@)hQ$u}i4RuuvFRy?TuAr!>LO0+28GQdglu3>l1+82KGN^*Z`^YP3LfhURb!GkV}OG}M$7 z_2lO7cVH2M-)LU;xdR zK`|6LtG3Q?BSTPFT3cC!&?^G<(lZ!7+`tf+t}!wFU~FUvbqqJq2dyr4gSx7kvI0oSfM1ka zLV`%PN>PvnX}heP;JAyrw<^vSmO)NdR$4+*LY#>9ib=4*L)xTeq=7zC>{lBQ*f65g zqm40jb%*JYVIQ?MHPqErlvGrd6&0}+w$7nBv)%v9%Ehbk!i zqd7@Q2?;Sg)F(#hW0D9)qySqesi+avUKLfMj=)FblR6elncDNAL+LgfAU6P`OCq=s z6BlK~81Y|X;uJgh??C!{%Ly)CVJU@mYquXb(R}F|GKLp#K74I$?-b#>L^?lrb#~B{ z;On=qNO2Hg{^&%sC(`rQ-fdw_W+j}^$@5pP-@fT)*?+;ge@CUcP+u_QNM|`_a)Qq+&Y%bhNj(v8_y74@Ywr z8e59?{P2s<2fhf0_vFQ^*W?Y;($ydGB4|Y{OAymC9lbx=Nn2+-5-EhFluoRta}mf6 zHs1tx@qv8o`#|0^A38rGR7SK*rQ&z~?CR|7fTRRD0I~sL#4pfp=}32&O_?_9?ff6T?LSzd zkbU4M+D*E;_n*7-;={L&?jG{%_s^cLj&`=~U#2t-hc5ntl_-aVl1`0uvE6Lfx6TvS z9>4w4-qrK#_wQdne|C3b*gr@GzO&yLaP4aof%^YK{rw6NLz2>c@$QR{-#fa0{UV_0 z>F(@cX|jhr{X3LOGj>YTOF8zl;tMmIp6icVKDBjnJwGYg&z|lsK9ohb6Ns=0+xVd3 zxBl#3!wyj_ME8%|&)$7)gK+(z9Z28kVsy7ZeDUG? zk1jC#^@sAp=I!_cUTxgJWPPm!lkB0K=@Rlm#k6;~A#wiR(FHC3{0%bf`wnQhgK3A_ zTS;3FQgMs|=HJ+_Jwm;LnvV^`wEcYg_Dk!JF09&LETTxqug(ta!FGu@1_I)+ef{$J z%a^YJO{j{%k_8RZ`s*2`>crZ2^-@jpk@|{&7mItJLG|S`k~zRQbdUDSO7C=he?~KO zdXzda5Dp3d2Ue*~9ISp*qEGyfKR;1^*s9Rek5=LGJb(LeNf+Xx&r@v z&?Wo^;!htxe0cx00rHTZ8%j7mw55+rNQ|^8ART_1#MX z_U)UOz&}9ukbThe@Dca;3BZsS?91=ZpFVj7)xCLz`9P>APw>o>4^N*%DT09zK5j^cg1q?CGN?FEL->BcOgv9x)Hw?>~6-_zCX4#B|=i zBX2u^p1gSa-NnXDEwTze&gn?TioqCckkZ5aqZGg40Run){X1e`PZ21uWsDL z0R8R@n*%DNj4AakiXLAfmzgVHu3o=>^TthJ$)|uSU%PhoDhglZBDus|c@B{I_C0t^ zp=zE#efs#(15ktb=C!MrfnJ|KN6s^s$Q7>V;`uWuDV}L&&+(ggoj-T};-$-%uU@}- z`!1-TJbv={G3Iyg?wwmVuV24<`Qn9U;O(bTfIN#5&H1w@k8a($_rT%f$4;I&as0%| z)2GjzX+C@I{Dmu5uid!JO(ojUvp&i&w7QWN-K0xlL|8yoo~LWZnFAdM44tsB>^Ua?~7(q&7?(zeFBnu@gCBCe8-uyM;aviwyF0VEci6dv`Z&T@UKo%JNcDbgwYKFfS)7J!R2i zF1xUzcFD^18#iy+wrvZhw|?!~b?Y~vwzF;f_8mKR@7~GoYTMbgZS(rID;jDlN{VxH zG6{DtGi`B7QhZEwGM8Uk-LPWq`VAX5Z`!nB?W$EPSFBjMa`oEv8#is-v}Mb-EnCRu zs~C0F^2XZAlEOSLGd(3aIUzAVE;cGOI4Xfl&nd2k3f8RMuzuZ|RV$V+X>4q0Y+Slx zC0X6KhO9fkcFpQF7<5@fZBXj>( zHq;BMYib07+J=Tkvh>Wd<;#{WUAm;PzOK5mtT-<_BRMH9HZn3SI3y&{-*17ZM+g^{ zn4VKqQQNo#Pd3)qR##S(mzI>4R#svZQrlZ2AT_tDt13zhp|SMENpUfe;h{l6=$%;L zii--exs0^rghkO2;b6RQ z!2%zz`JQuU&vNzR{37B~GINSb%PLAsOA7OIvobT%)6z4ubMy1^^GN=Uyxg4Ztjx63 zl;p%kF%h9bf&RWe^XJd=m^<5jmg`LCIo|%Ev5AW_va@n>v$N6{CnvJ;zY-FYQ_?d; z(wVedsmWB;lrLbF1%N8%&7Cvb-EF4J4Cm?2v*$15g2JNX5)+dWv6xX|A)zEBi&qpH z9uX6_2p{o_;$j!YMn!~&1qTQCE%fn*)b0=)@ECiYp3?+w#goTCp2L=FU@bQ`NId9(VS#C3DIy+Bya&&S8wY?oTVe<5u?(;l6 z=HoWz@3FZFNPyCTl?vzOr0`i@+36cOd#VK+YXzt zBdoZQV{FEccd)l76aP*aXG?5)$J!9Pt_cp4CQqK~1Xjd}b?g9@kZk;TJ3C_g*k%mU z*U_U!8XAugAcaE>#O*<@x(S9Zg0}*|q$LR7g+AnP(0>LV=$~`~^(Ty=wktk7M ziP2y*d$lxKZKCs6TStf0{;R2_C89|*y3{q)2g(f|f>Jq=XNK?x_YL9??v@wA9f0Rp znna4KF{*#nR8=J@MkU)T#|_}ik%4`3>;Qtl2GDYM4=p*<))7U;zM({+4?QuxGP1HV zjPy@*0MS}J!MMzjKk@)cSg`tw$N58;!OWoFlC<4LOtP0Iq+*hPXv+bSB?DNwUjyZU zF33p^6h&hfZ^A!cJf0xhR8sJHft;X@F&127%!D0p1td_Pwx<2tuogJIzx}N6CGAe* z0@M2c3@q&b8TGdRXG&!MPaf?c`>(H&yl#ew$qZI9FtfDcbuyx|3hH`B)|00>Tk<;i zvda4AHuf{T{ey$ddF@18VVIRY#UdAHW@e0_MFuHlL))3Y(P@R1bq)13ro8VACnBqA z>fjNP4#;~mZ2o!^-ZzF%uX!&jtY5$Lz!CV1y|_p~JHa!yXlc{I6K5~Lb)PimePu+4 z=!|p?%U!zd$QfFSzIp8et`bRQqlrGLf=$3vuirsbb?+vOE(#-g)r!1%jf7|2`a?yJFAjYxf>Keg5*rQ+kz=P%?7xO|Rc} z{K_2~4n2K*pI#LiGHlG8*s^uNo^Rbn1a<#5#uyt=qS581q_* zh>Wt4{rtr8Rdg2TX~<&4`$AZ;0V+mzbE9(W)@<8z=-A0K=gt|Ts`6D-da#z+_&H(e zrH!jM@7R0b=&|F&d7n_lkr<>n+{(ctEH$sZe#M5ZJ9h8gXTbY{8{#sGTIP1syd#sc ziYx0^uHQ_y>hnIJKqD%npk*-D!No5+IV-=scIoOhaQ%8bhC>K1A~9IiV1$E{dvHu* zMovj}!}3)tSFX@Sb?5^T0in(aD@PZPu$biZ?4s)WWy_W?Z5)Q1?+Gg^F-Uc|<=7eS z^CRNu-O9Qp%iy4f@!q0LBq|{*uLU^TeXe&@VoEwX+G=sPzE+3Vg1dZi*&!N+Be{tV zo(sGq6X7=CyAe$^)M@kH;JyeZuWA5<-q|-`L3C0oM;+UeWlR6LFCr>AP({yj9O?q0 z5itqLsh}^bZdiixK~MOil5$GAC>wYLgh$86C8nfh<`k4x)i%`A`|nv1DLHu^bKB|j zIRA*)#H8fp#f!O|g5ruAQrjoM0IayIysC+<(`>)+xRkWTsf*LnvvTu`%c`p3NpW99 zYLK$_$SLj%f@4xMv$NpkGI77Cw4xGEXklNA$qv;Tjsnoai1@`haD*hI3r?+|q^zQv zKJc1>_}WHxGdNFwJi+B*jEv0eoV)^b3s%-t;|U@&L{;B>yo-l_SX@#Xha;4cnU#}| z2g)m|s+CdIV|nc&w7PFOVftJ@Of#7*{*ji!ak&MBc&M_vnzn;Jgen1IiLeY$5;7ZE zPjH^IASg06At@iVXmCQO^X0G>5A zE+Hue_T5jHAX+LNic6Xar@Hj95-c1ceG@c-M*e zz@exBn3#wK`&@Syr^(~(Z0%5Sadt=45C$KgltR}C!AChIlIDFN;)7I&nOKe* zJHcU^D_S{&L;QU_++CcB(}(FUbG#P@het2s;xVP{ydtXA%Bsp5Dc)5gHb~XL93Z$8 zia85HqT>@0tb`*z^YolEd(M2n;P9wLafyqup^8e%K~r5_RShz}tct$XIL8_A_FlB} zGmXp2;!+VOMTG|k1O$aeEs9S;XanWZr4a~fYO1OvdE9j(iJdrZ+H6msg?>RHQE}MG z`9+2K`8ixxT1rw%GTpk^IHlNowYBwiwe<+%BzO-P{s2{@F;i#z_y+`qghWIqre&kk zw5+nC3^89>NpWcj*0ip!zENxm)9@GEBzTV*u|Zm>BYFjfMMOkK#m1$kXLC?kWmRom zLjywj<;z#BTD4{ayQyQtx-}~i+%IWtsH>CUT_zGkbSxZZEeMH>j){#=NJ`Df$}1|X zs;ys!;CRD^O`A72ZQs3j|G@+McJJ7-VeRVG%U3R6wp2(sSlirTmTzd}qJ*TxBhH&c!<@0`0dcB<%@Z zrSh8klq?*;Vto(kM-aLI~Q>oy{}*|BTSf#au|ksDrUK6R8ka_HcJy?b^xN%F3+l7lrz*gAU#M#ZP# z#4k?E%q=Vt)HN($xn})_EyyW$?LBf5>Dc-6&8KM|bM(-GeS0K%4;j7`mTUy^p1lW=Q=*j%p9lBv*(1yQ#zHHjr@H(22ZjVkB2~&SW=mSj ztGQabN0zN#w{ct3j$OOR9%lcqeS7!p-nB!Pcb^d(tZ8cFIBPyCa-p%QTz(-Ef})bj zni}lH#$_v3BT?G24H@e$vb%2=*$#ui$_&-BoG{IOzOR39baG~XK|wA|7BY$&K}~JL z(&ejGBfHwNWh=NL!P~Zt8-T4WHbi~+NK~G%G2_y+3knPJa`LcCYO8Ci1@(h6isIQqwD_B@N7y9vp-fD_5;v#qxyR z^m&FQvE}_`SaBQlX24F5<^9H+03za}=tcBf^oi^7e$lQFmX$=?BulF+ zx*#O9Ed!m&wEL8xaY9Gf2!d90eDFD3W<_b5eL&+my{$bMxEm5yPy>pbT$wfX24(Cu*v(w2Q88P zi^f$lI@kyN2F=1NUsEVcgo=9 z1q9f%U^;}?K}01v1mOeG4XdO=)LUp(9_1-HS=6tDg)6jdD$~AgG|~^^{bu;05(CKK zC-Nv~qjIZH>#wNw(YoRwwByn+AFcd4=mSQbPYzKIG$kcF2#pBJC~ToM!o+B}-Y^|n zq*EqJtr%EUjf3aZ8;-XfEJu#QDaG=Mh@sy@Sq)5e^o-3diFLQd2vcKYkm?bgR$W>Z z)73Y|dkm=4I!uz}y$20iQP2pYpsb;%ud8clic0r{3F9ZyOwG<_%t%YK5lEbnJavt* zLesv3qqCcv80h$7(gV36cm)J+fas5~upVh;HO6lI)EP60Yv)WCml>$WPI9mt+n=~~ zjj@GCM0I|?k0|dxD=s&bR($dLkJU(92S>+gQ>RWxQ-P1~LcE9J=eJ z5V7x`GJWP;69zXC#|0VoiTMY19`MB99Vv&X`qP!jekB03>8Gc$|J$}1==t%Q|t zTnf-+NnLem9=A9pF_FYG30?45nef=9#YHUd6)UY`XzSt=7L$;aoR~o0>?ovRPz|Ee z6|2{5AR9Y20UBCbS6NzISXe;vI}3}7sjnB**3`1Rm;8ZRmJahm;?fXv!7I^lw5G0s zTMFWJ8#lusk{$22Z-e(-wY0IJp&lN&vA%KX5}_qp3HJQK!>p%zN2X=x=H+B_*##vP zHFb^4VHwv`Pr6fNcN^fqO&iy*T_^n5uz}qOYq@y~Wew6P^CMES0KXu{EG(<6?Wf$d zm4iRrwO3>xv-|J%ZQIBek!?LqJ9fY^@7zfV<s*L8-98B&Yinwwr*B{gf?ar`(#m=Oaa3P` z^Y9J~yY0``&6~IlWPR^CeCyjt5cu?N+`#gl@uiitO-4_0o`WqG5*446mX%*x1vd$= zBJ>P!DrEhiwLtjD%3nYTSFKz{R^M5(ZViAtYW8Im)b-8APH~y#=>zFw6KHZ%ik%{; zt*xu4j0+HHxdQ|Zwmxl)ndauK3q1zSWMB2;<7TX9KCuf$XP6G92{rPneVeOAUG@vM;x(wCYQ-(Fqv&Mkk8`i zXC|&?lbpU>lJgfsk%C8sQXtm?d-^WITuf%&(F_T8ppVQNn1@+`faI*5sT6#u!e`6Y*yk7u%s$xK%L{gY!Cgo=`pi+dCB&jzs zK`ik^5{6s6I1QL8mxb15B@JCe%h3~HmgoDRKPiM}Ca_M)Nr?&Z3HVIJx41=sJ`rBV zEs9-)izM+jWTGR8Ne>vR%4y=I0Cer3A8f%wWD?=X3n*9$8sMcMja@`y?<|TzgI7!p zy@N3zQ0ih>1Ti=_Wwl{+%Q(XJdtijXpineO{f>x?jEW-BB&Ihuh97+|DjI)+9Q1L3 zbCXk3(=$cIWzY+$&gmLi+f173jMga+FCSk&e>Q*#>;wc$o4cZ;q9WO-Uc8_e`4_n) ziDTj~A~mGscmom*&MF#urs&?9G9ArI?sMnPn>XLf+soVAXQ97;01(?S%qB7d1EEcf zL_LD1fC8{IX&D)aVQ7c63WpX!E1Pi+lL52NnBn5;Hq+IO%wlH$o&yxui}>{h_>+J> zd^H9Jg&=K;f+tE!#^w+a6_u1i=l}&6j6jZQXE%Yq{Wy_+;k9mN@xIuU&#$dR|Nx{l-^f(JakV=M?z{?RvkkQ)QNKajHpp>Yjs+R6Bv+>jC1;(ZTFiA;_jSP># zE9 zV8gQ*8|*)vE!YKYeU8fpP*YM;#)uA7H5iGvB;8z`ohI9jG&4l!ndL}Z+BX;wfn%Hy z7ZnzY(m`0bPy{*&N{^!tlUPzl#5u$yc24e|s3>^2&2V(E#XGO40=T%(UlL3c+U66d#{TUQ(^pb za3c3U$+>vtl}22pB7=va(cdR13{wmX3k~!~zvIHdP?WOLvynZc zYE)icT1*OG7UY8_4|{@w6NLpR2w?)nC7gt!-sq`w7KVhe;Y`@`(BKdl(5OWTDOm-j zmGG90z!6YHtE;W4sji|}3#q+RQ&n1o5%P*PUOLBm35ktUcP`dE1Eg7Rwk z`_*g6I%a)ye<_b5m&=gcEvc<4Ek>3J`VvlB#l&ug2bhKi2P_0m0|Oi$xhOF`x3sFh zapl_eTekAIJr&jx*R5T@cKy1wt5+_qDK9B1qUl=k05xC~^8Eha^G2XJcW#P1F+Eu^m5yan_^^6gD1pzhqUeMi$)jIe4+y?{zkQ~*@LW|~JpSVV}QFRXW9 z0RA6^1fUBgC>%5Fo3^prnWl1KNq7CK6^(V(6{X-WGnCUu$GcxxL|9ND zG*8b-OhRf_VOdq(vgK>n(Ms?(1bEQiRsaq7wt3SAM99k!rvv6HEtZkjv7G3(ASgTn z#kq*c7>YO|+A1!u0usG)^#%mMWDB$DHwwv{H`y7g5H{Hk*cQ^ z%Cv3S(r(I3Pd^U8eM(X+^p=cRkA@`q^lTOskis?uoGAJt@WWOIph(KkmX?>{JeQTB zYueOe%tS|bPya~7DhaWX(XojD_h8wwa$p+r^6)8)`U>)Lv#GhEL0sW0Y*<8+B_(=z z+jZ;&$C+~%a3Rsa%;Mnb7r{7_R3`0DW>$6$yoVSRlfw|E z<|D^Wbab8T6A%vAH#rWmMFI?KD$qATeyHg)SxgR--HB>*2Es6E^hnmPYy^Y3d8FV{ zG1A;gcqJbH0RR^ZbTKhL3IQvOWeOsuL|9lrGhiu<__&O83_<_Q;@F%%RI$Go6rwEa z0=0)kQmT|h68iyR3AzYiYpIC`&PjCv$Uc*w@fQY{pY*l7?q2ft$zX6NPRlKeJmqj8pMYpQ6v zgOufGH4+D;BBYFz{wV^;j&Qy=JBQ8vCG=@IY&MfcK=~K`nUpZ)eHHA=t`+bc=mc3o z6SlT`rZ46}{!V$z}V%OG}YRx|hRkH{t^z4bo-UU!=iRm_jALf-aIs z`Cpn+R<~hX5LZ>LTD1bMekqC{^?h}uz7v(f#zrL0u$yevFH~$mOe%hrb2Ntp;cpNM zus@ipUUW1yl7=3DFbF*A>)6`fx(3qN(@azs&2(1VJRrU z4a+T@DG}!Ee=#y!`=^eBxbQ7tPHGuJH_i!Cd#D77eg#w3f#sx;GR{twP)SrCG!hBw z_|@Hz5XA$y7s}{5rJ_$GyGLM5vwVaHIQ!TerDZf<2Qp6)5Fva)!$M>LUuy&$v|f$j zkA;FwZFK*mN3QL!o!HV0W$M0 zdW>M`Vf9EpQ`iBA1E)m=K=df+uBAQ%R-sh1tf!=yD=GpT;1s|54UcHnA8LF^&PT+m zRCeLiQLn>nsdp?OIG#*N7mdA8bHIsbvwlN{{AYTT4kKwa=NKee8DC} zs3Me_x_g#dqtZU)06!57P!CS>;GA=r9Fp6a$5ER@HwZP(eFCQL3{l8aGv=WQeCIL26Q5WRTxNZ?E|@ zI>vt? zt8Pp5N7>pt&z;YDfAd-3>*wbmfJU)}zP|W&pWjw=Y{Oa| zSh3kJAxz(QwUE@|bKI`#Zx@+83$FK1R9Itt+9IsVJ zkLM+>XQDi%72_HiFUXZCtvHTjO}tEjw~RINf=ua@j1S-AYnj~1DGBf2N$(X(=S1mh zPH2?L0kPj4Upz@Xq@O?X5k zkr|kgnSM4J^tvdmMy>W$dAK+!6}BTO8jZmaV>Ft~u_j}TE;<7D4Dj)Gb5<%HqWsJD zV@hCv4%aZ#Pq@YyqmR~x1_wIsVAG^(w2&;uXfhei_-iyoM}~z2`T5}fPJb@uv8`9C zUu{Gr?t)8V&G?J!!b3v>d^|s1<|I6n$rVbalZ%V1n}?Um$Hx!y2Ze-&hG`?C^|(J# zS!0bxLsVFBppTcUlakqPr-lS+!nIM+(2LPzvBbvFBD9(yUoWh{){+`3YQn-JbYL7~ zii@+v#zJ)wp+WxMZXk!soFuy_l+1;5edXrv;pMIJ^$iFNQio{5BDB%CugMr2XR*YY zV)PN3Ab-_=)4hW|6)=$tbN$)f1B5=letr_2Hj?SMm>*2BW^l}hKoMbTKb5;u;b8cI z*6HlbK=?TbJ;BfqmLfTcA50M!8y9Ob86vR^Z&xRU?JsGeVn|pxz9;)b({W~~Au>G3 z4`0i%3M|7eV{%T}41su8&h2v#Z*M3N_7ByBk$v=foxv1ijKgiCG(@MA=*ZKUyouJq zyE3Nif$C6Ac(^tqGBQf1*BcEcW)y!nM1=?YLF+{4BrsW{oQx%a>I;b~AW$6= zN>mY%a8&pdT*a)5#L_+gB;sTrNM#OQ|8e(F`S|+7$RQzNSUbqbjKu7By_QVm0yYva zg`ZQvIcuBFvQfew0sX~We1Ud~Dx=oA7JEmtU%f-?uYSFkM< z4SwoiI2E*_m6jJnz8|BD)PT^{Nd{fYC0%|)z6ep_jc%}Rq>6Y3fR=^+m!zENDDq}3 z(x8Jz1H4?E< zaQnBrho`p+ItmJ=rG`t3m3+s@n|?J!M{7fZe7xLUT%2v^GsAE4fT%6gAIEW4p3-VKWxVgGI+v2i9MM;qcBLc-@vBsHW^ii77 zK$W+*!-BobsJbv|rhxrEv!ZE`lBD5^(-#R_~ghDLd5(hhkg#@a+ zaBmkEo(a6{9a+%X)zyuGnDhM2OQj;}5ICqdf7C+=Y(ekw0_54S(f1?k<~Jq54t5#^vJ7>08qSfDYB zVErl1Yy$YjL_27ashH@&!CcJ%Rp#6*(Y{mxQG?Zl4pC%dh;6Z2uiTH~x1%66a!(86e;AtCC(0AFx_r*s0j zhv=nZKFsf%fWQ!f1!7L_CgCe2XK~+~Byv598*NyaCX}=X@^6UT1I)?bgzajHdlZZQ zyUqd6&>lh!$rjZXvDa$D!!@B`?=L9+0JRHcSs&5YkNJOxv=R*AkyEHlL%5hA03Z81 z0MlTg%TI@z~O-^5^W5kUWycW ztR^HlP{EXcz+GM32$YDm_#^5=tQ>(tX`b|~;|;HA{jhlq0NW5_h=y3G7h!riuWUky zyTRT3eud5h1A{0AcAe}K#{YtE{ zV4}hwX8u}=nW!k(EdfB} zmZKX;`CPgIRmaGVEW9NGHg7cOfk;euSMpo}JLu0$1tU3+E?TP%(@>bZ5Hh1=BmR&b zniHiGM5oYm(H}_F1{BJ6GauW8#T$72ml0Y`7zBspZXVvgz9?#gLxSOINMMK*$zDwV zfta932Sh&u!o?C$!Eky5fGRv3jDe}BiYbASx+(o3Eh8iFF{0hbVmOdC!*5v3FOZyk z7RCd4bQIGzIgzTS=90diXePk0enW<6ocB}%R$4p;PdXYdr9LNmCsjzm$2`bD8QW|*(aGhCO;(J99Qx}BNCL8iws>P2Lx5N`oQr#ZovdpZHQ-A0R%h?;pDBF(FF4RTeOlO zf#2}0nndCz;D-~M(CKkbOvwo!FXUyvBdnZU+|a#)P{!;i2AgGq;KO*_vRPun$=*vB zp^)O_xPlj&(1yrS=I}};!>#S$ARvWva)MQ;j6-L@@xRIBGIXM)N~J;}M~#WwJMkR8 zkV|QkS^!s9sG-+!N9vg)-R} zSPR4?xsk%4fSomA?? zJO79>09BXmx8i7(9G^9jgv|MS5(sI^W+{nQIrC2Uu^6xe7)YP{+J=_s{q3OVoIW_a z5KJ)F?;x`m`Ucy6&?upqCKmuFb9+jk`}q6YekjrTGuIXuSHa~5C{U*&$WghY^R<~v z^?q(txeBhF%bkzk;BJ9x+wf9-q#G`kyZr~>LjY=*{ZUefM;lDB@hPd9S$qzc`>pMA zsh=P7P01r$`_5A?Z;AmfS0!?xIwFPJ#aUwUZ~&;*4Sdp^a0)|PdxEG z1R~_2>H^>q8fF_&ruXwf@xgmBPrC>6;#Bt#nP?fcwnO;J&(GJ#+Z)9U?{ydV^F`H+ z(S_~DGDD=FudfeN@!tPY(HE%hFr0`?%PMG7R@1&qw;sKFvp)Z{Wt9g-1yFT@{N%-< zfc>7XR3k-X=NFY#x9{AoN1uNE*?{dfv0Uxv4{kmxl{blw>!`WYXrpXL%47Tj{Ct_u z6_po7zP}%8i{KD#M6~Vaa-(mcKcr+nGpO^Xn}=x7S=%fXCKv@W;+B4t+CZTJ!rDev zn6!Zb4jSh7JysMF7O9J=tm)9LSKomHhYTG)f{psS?Q%u1uR18uA9wx+_Mkfh)fMvzkx%Cu@P5nQ!2xvf*=%DNw_K@qc+N5u4>!0N1wg}hYT4yY=kh9 z8}XIxYGsf&NzePo;J~;K6Ljb(>fftPc#pg#iJ$jwU9UvlvW;6*cWTcJ0=yci(>f z2MlC`xPffI*S4!w0a1Ygfqt@ppPql0Mf6dFvmB{aH|a)sny zI_Ps>b!6v+Sk!M}sC*@*!M;R}>OmW+H>76dwJ9hrFR!YpZQH&>r%rt5*B#ooZ&zDe zU0z<)CO;=5B_Yl%6`$%L7GU=m{9eP;P;G`G1Kad9+U`l#IHR8GvyV3MBjr(nL8(%g zker&Co7cLixTLhayrPP)ZmFtd75}a*D=u!6pPikNlxV>e0kv&V5Z3LZ@?pN$KI#

    0XgrKcn%B*YpuNZC{*qC96l&4@}Mgf~-t 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 diff --git a/plugins/csp-web-api/src/Plugin.cpp b/plugins/csp-web-api/src/Plugin.cpp index 150082e2d..538c56d11 100644 --- a/plugins/csp-web-api/src/Plugin.cpp +++ b/plugins/csp-web-api/src/Plugin.cpp @@ -270,8 +270,8 @@ void Plugin::init() { // Read all paramters. mCaptureDelay = std::clamp(getParam(conn, "delay", 50), 1, 200); - mCaptureWidth = std::clamp(getParam(conn, "width", 0), 0, 4096); - mCaptureHeight = std::clamp(getParam(conn, "height", 0), 0, 4096); + mCaptureWidth = std::clamp(getParam(conn, "width", 0), 0, 8192); + mCaptureHeight = std::clamp(getParam(conn, "height", 0), 0, 8192); mRestoreState = getParam(conn, "restoreState", "false") == "true"; mCaptureGui = getParam(conn, "gui", "auto"); mCaptureDepth = getParam(conn, "depth", "false") == "true"; From ee837c960acc81633aec04f6989f4e0de3a6d2e3 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Fri, 25 Jul 2025 08:53:39 +0200 Subject: [PATCH 55/61] adaptive step size fix banding --- .../gui/atmospheres_settings.html | 30 +++++- .../shaders/csp-atmosphere.frag | 89 +++++++++--------- plugins/csp-atmospheres/src/Plugin.cpp | 10 +- plugins/csp-atmospheres/textures/cloudTop.jpg | Bin 4660 -> 3315 bytes .../csp-atmospheres/textures/cloudTop2.xcf | Bin 34796 -> 30012 bytes plugins/csp-web-api/src/Plugin.cpp | 2 +- 6 files changed, 81 insertions(+), 50 deletions(-) diff --git a/plugins/csp-atmospheres/gui/atmospheres_settings.html b/plugins/csp-atmospheres/gui/atmospheres_settings.html index 382f3a761..e47917eb7 100644 --- a/plugins/csp-atmospheres/gui/atmospheres_settings.html +++ b/plugins/csp-atmospheres/gui/atmospheres_settings.html @@ -44,7 +44,7 @@

  • + +
    +
    Cloud Density
    +
    +
    +
    +
    + +
    +
    Cloud Coverage Exponent
    +
    +
    +
    +
    + +
    +
    Cloud Low Frequencies repetition scale
    +
    +
    +
    +
    + +
    +
    Cloud High Frequencies repetition scale
    +
    +
    +
    +
    diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index c76e03312..1f897cdc2 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -417,6 +417,7 @@ float MS_INTENSITY = .2; // parameter for setting the clouds to a fancy color vec3 CLOUD_COLOR = vec3(1.); + // longer segments are cut to this length in scattering calculations to not get erroneously high // amounts of inscattering over very long segments float MAXIMUM_DIST_BETWEEN_SAMPLES = 250; @@ -424,10 +425,13 @@ float MAXIMUM_DIST_BETWEEN_SAMPLES = 250; // adaptive step size parameters float CLOSE_STEP = 30; float MID_STEP = 100; -float FAR_STEP = 200; -float MID_DISTANCE = 35000; +float FAR_STEP = 500; +float MID_DISTANCE = 100000; float FAR_DISTANCE = 200000; -int MAXIMUM_SAMPLES = 800; +int MAXIMUM_SAMPLES = 400; +float CLOUD_CUTOFF = .1; +bool SAMPLE_JITTER = true; +bool SECONDARY_RAYS = true; // get the cloud type at these texture coordinates // adds high frequency noises to the values from the cloud texture to replace coarse // bilinear interpolation artifacts with smaller artifacts that are harder to notice @@ -465,7 +469,7 @@ vec3 GetVerticalProfile(vec3 position){ } // get the density of clouds at a position in 3d space -float getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ +vec2 getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ vec3 cloudConfig = GetVerticalProfile(position); float cloudBase = cloudConfig.r; float erosionStrength = cloudConfig.g; @@ -511,26 +515,14 @@ float getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ } float h = length(position) - PLANET_RADIUS; - float height_factor = exp(-h / 4000); - return cloudDensity * height_factor; + float height_factor = exp(-h / 8000); + return vec2(cloudDensity > CLOUD_CUTOFF ? height_factor : 0, cloudDensity); } -// cheap check if a location is guaranteed to not contain any clouds -// very similar to GetVerticalProfile but avoids the second texture look-up +// check if vertical profile is too small too allow for a cloud here bool CumuloNimbusGuaranteedFree(vec3 position){ - vec2 lngLat = getLngLat(position); - vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); - vec4 hcomp_with_noise = GetLocalCloudType(texCoords); - float cloudType = hcomp_with_noise.r; - vec3 noiseSample = hcomp_with_noise.gba; - float endHeight = CUMULONIMBUS_END_HEIGHT * (1 - CLOUD_HEIGHT_VARIATION * noiseSample.g);//localMaxHeight(position); - float topAltitude = PLANET_RADIUS + endHeight; - float thickness = endHeight - CUMULONIMBUS_START_HEIGHT; - // "progress" in cloud from bottom to top in range 0 to 1 - float height_in_cloud = remap(length(position), PLANET_RADIUS + CUMULONIMBUS_START_HEIGHT, topAltitude, 0, 1); - // when the position is above this function of the cloud type, it is assumed cloud-free - // you might have to change this when modifying the cloud type texture - return cloudType == 0;//pow(cloudType, .2) * 1.2; + vec3 vertical_profile = GetVerticalProfile(position); + return vertical_profile.r < CLOUD_CUTOFF;//pow(cloudType, .2) * 1.2; } // calculate a cheap approximation of the maximum distance that can be safely skipped @@ -558,9 +550,6 @@ float CumuloNimbusFreeDistance(vec3 position, vec3 dir, float dist_from_camera, } last_distance = distance; } - if(!CumuloNimbusGuaranteedFree(position + dir * distance)){ - return last_distance; - } return distance; } } @@ -585,8 +574,8 @@ float cloudPhase(vec3 r1, vec3 r2){ // currently just a wrapper for one cloud density function // this is the place for adding additional cloud bands -float getCloudDensity(vec3 position, vec3 cam_pos, bool hf = true){ - float acc = 0; +vec2 getCloudDensity(vec3 position, vec3 cam_pos, bool hf = true){ + vec2 acc = vec2(0); float height = length(position) - PLANET_RADIUS; if(height > CUMULONIMBUS_START_HEIGHT && height < CUMULONIMBUS_END_HEIGHT){ acc += getCumuloNimbusDensity(position, cam_pos, hf); @@ -611,7 +600,7 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam float MAXIMUM_DIST_BETWEEN_SAMPLES = 1000; float interval_length = interval.y - interval.x; - float last_extinction = getCloudDensity(rayOrigin, cam_pos) * DENSITY_MULTIPLIER * (1+ABSORBED_FRACTION); + float last_extinction = getCloudDensity(rayOrigin, cam_pos).x * DENSITY_MULTIPLIER * (1+ABSORBED_FRACTION); for(int i = 1; i <= samples; ++i){ // more samples in the close vicinity of the point to capture self-shadowing of smaller clouds with fewer samples @@ -620,7 +609,7 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam float dist = t_now - t_last; vec3 position = rayOrigin + rayDir * t_now; - float local_density = getCloudDensity(position, cam_pos, false); + float local_density = getCloudDensity(position, cam_pos, false).x; float scatter_coefficient = local_density * DENSITY_MULTIPLIER; float extinction = scatter_coefficient * (1+ABSORBED_FRACTION); @@ -634,7 +623,7 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam // The function where all the integration happens // uses adaptive step sizes to bring performance to an acceptable level -vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, out vec3 path_transmittance, bool secondary_rays = false){ +vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, out vec3 path_transmittance){ if(interval.y < 0){ path_transmittance = vec3(1); return vec4(0, 0, 0, 1); @@ -664,16 +653,18 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o // Inscattering from the atmosphere is added only when a cloud is encountered to reduce atmo model evaluations // DO NOT evaluate the atmosphere model for very short intervals float t_cloudfree_start = interval.x; - float start_density = getCloudDensity(rayOrigin + rayDir * interval.x, rayOrigin); + vec2 density_struct = getCloudDensity(rayOrigin + rayDir * interval.x, rayOrigin); + float start_density = density_struct.x; bool in_cloud = start_density > 0; float in_cloud_counter = 0; float last_scatter_coefficient = start_density * DENSITY_MULTIPLIER; int samples_taken = 0; float maximum_density = 0; + float model_density = density_struct.y; //===== BEGIN OF RAY MARCHING LOOP ====== - while(progress < 1 && samples_taken < MAXIMUM_SAMPLES){ + while(progress < 1 && samples_taken < MAXIMUM_SAMPLES && path_transmittance.r > .001){ samples_taken += 1; float t_now = remap(progress, 0, 1, interval.x, interval.y); vec3 position = rayOrigin + rayDir * t_now; @@ -690,24 +681,35 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o skipped = true; } } + float distance_in_interval = t_now - interval.x; // step size is increased when transmittance is low float low_transmittance_multiplier = remap(path_transmittance.r, .5, 0, 1, 3); + low_transmittance_multiplier = remap(t_now, 0, 30000, 1, low_transmittance_multiplier); + // step size is increased when many samples have been taken already float samples_taken_multiplier = remap(float(samples_taken) / MAXIMUM_SAMPLES, 0, 1, 1, 10); - // step size is decreased when the interval is short anyways - float domain_length_multiplier = remap(interval_length, 10000, 30000, .5, 1); + // step size is decreased when the interval is short + float short_domain_multiplier = remap(interval_length, 0, 30000, .1, 1); + + float near_cloud_multiplier = remap(model_density, .5 * CLOUD_CUTOFF, CLOUD_CUTOFF, 1, .1); + near_cloud_multiplier = remap(t_now, 0, 30000, near_cloud_multiplier, 1); + near_cloud_multiplier = in_cloud ? 1 : near_cloud_multiplier; + + float JITTER_INTENSITY = .2; + float jitter_multiplier = remap(hash33(position).x, 0, 1, 1 - JITTER_INTENSITY, 1 + JITTER_INTENSITY); + jitter_multiplier = SAMPLE_JITTER ? jitter_multiplier : 1; // there are two parameterized intervals with different functions for the step size as a function of distance from camera // Note that discontinuities in this function are a VERY BAD idea and give weird artifacts float step = CLOSE_STEP; - if(t_now < MID_DISTANCE){ - step = remap(t_now, 0, MID_DISTANCE, CLOSE_STEP, MID_STEP); + if(distance_in_interval < MID_DISTANCE){ + step = remap(distance_in_interval, 0, MID_DISTANCE, CLOSE_STEP, MID_STEP); }else{ - step = remap(t_now, MID_DISTANCE, FAR_DISTANCE, MID_STEP, FAR_STEP); + step = remap(distance_in_interval, MID_DISTANCE, FAR_DISTANCE, MID_STEP, FAR_STEP); } step /= interval_length; - progress += step * low_transmittance_multiplier * samples_taken_multiplier * domain_length_multiplier; + progress += step * low_transmittance_multiplier * samples_taken_multiplier * short_domain_multiplier * near_cloud_multiplier * jitter_multiplier; progress = clamp(progress, 0, 1); t_now = remap(progress, 0, 1, interval.x, interval.y); @@ -716,8 +718,9 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o //===== END OF STEP SIZE CONTROL ===== //===== BEGIN OF SCATTERING INTEGRATION ===== - - float local_density = getCloudDensity(position, rayOrigin); + density_struct = getCloudDensity(position, rayOrigin); + float local_density = density_struct.x; + model_density = density_struct.y; maximum_density = clamp(max(maximum_density, local_density), 0, 1); float scatter_coefficient = local_density * DENSITY_MULTIPLIER; // the light available at that point @@ -752,7 +755,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o // get transmittance through clouds vec2 top_intersection = intersectSphere(position, sunDir, PLANET_RADIUS + CUMULONIMBUS_END_HEIGHT); int transmittance_samples = int(remap(path_transmittance.r, 0, 1, 10, 2)); - float in_transmittance = raymarchTransmittance(position, sunDir, vec2(0, top_intersection.y), rayOrigin, transmittance_samples); + float in_transmittance = SECONDARY_RAYS ? raymarchTransmittance(position, sunDir, vec2(0, top_intersection.y), rayOrigin, transmittance_samples) : 1; direct_incoming *= in_transmittance; // multiscattering approximation like in Nubis @@ -795,7 +798,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o //return vec4(sample_ratio, 1-sample_ratio, 0, 1)*10000; //return vec4(maximum_density, 1-maximum_density, 0, 1)*10000; if(samples_taken == MAXIMUM_SAMPLES){ - return vec4(0, 0, 10000, 1); + return vec4(100000, 0, 100000, 1); } // have to add atmo inscattering when exiting the interval @@ -906,10 +909,10 @@ vec4 getCloudColor(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, float surfaceDistan vec3 transmittance_int1 = vec3(1); vec3 transmittance_int2 = vec3(1); - vec4 scatter_data1 = raymarchInterval(rayOrigin, rayDir, sunDir, interval1, transmittance_int1, true); + vec4 scatter_data1 = raymarchInterval(rayOrigin, rayDir, sunDir, interval1, transmittance_int1); vec4 scatter_data2 = vec4(0,0,0,1); if(scatter_data1.a > .0001){ - scatter_data2 = raymarchInterval(rayOrigin, rayDir, sunDir, interval2, transmittance_int2, true); + scatter_data2 = raymarchInterval(rayOrigin, rayDir, sunDir, interval2, transmittance_int2); } if(scatter_data1.x < 1e-6 && scatter_data2.x < 1e-6){ // no significant inscattering from clouds. just return standard inscattering diff --git a/plugins/csp-atmospheres/src/Plugin.cpp b/plugins/csp-atmospheres/src/Plugin.cpp index 2a7957cc6..c46c761fe 100644 --- a/plugins/csp-atmospheres/src/Plugin.cpp +++ b/plugins/csp-atmospheres/src/Plugin.cpp @@ -67,7 +67,7 @@ void from_json(nlohmann::json const& j, Plugin::Settings::Atmosphere& o) { cs::core::Settings::deserialize(j, "enableWaves", o.mEnableWaves); cs::core::Settings::deserialize(j, "waterLevel", o.mWaterLevel); cs::core::Settings::deserialize(j, "enableClouds", o.mEnableClouds); - cs::core::Settings::deserialize(j, "oldClouds", o.mAdvancedClouds); + cs::core::Settings::deserialize(j, "advancedClouds", o.mAdvancedClouds); cs::core::Settings::deserialize(j, "cloudTexture", o.mCloudTexture); cs::core::Settings::deserialize(j, "cloudTypeTexture", o.mCloudTypeTexture); cs::core::Settings::deserialize(j, "cloudAltitude", o.mCloudAltitude); @@ -85,7 +85,7 @@ void to_json(nlohmann::json& j, Plugin::Settings::Atmosphere const& o) { cs::core::Settings::serialize(j, "enableWaves", o.mEnableWaves); cs::core::Settings::serialize(j, "waterLevel", o.mWaterLevel); cs::core::Settings::serialize(j, "enableClouds", o.mEnableClouds); - cs::core::Settings::serialize(j, "oldClouds", o.mAdvancedClouds); + cs::core::Settings::serialize(j, "advancedClouds", o.mAdvancedClouds); cs::core::Settings::serialize(j, "cloudTexture", o.mCloudTexture); cs::core::Settings::serialize(j, "cloudTypeTexture", o.mCloudTypeTexture); cs::core::Settings::serialize(j, "cloudAltitude", o.mCloudAltitude); @@ -136,7 +136,7 @@ void Plugin::init() { mGuiManager->setCheckboxValue( "atmosphere.setEnableClouds", settings.mEnableClouds.get()); mGuiManager->setCheckboxValue( - "atmosphere.setOldClouds", settings.mAdvancedClouds.get()); + "atmosphere.setAdvancedClouds", settings.mAdvancedClouds.get()); mGuiManager->setSliderValue( "atmosphere.setCloudAltitude", settings.mCloudAltitude.get()); } @@ -180,7 +180,7 @@ void Plugin::init() { } })); - mGuiManager->getGui()->registerCallback("atmosphere.setOldClouds", + mGuiManager->getGui()->registerCallback("atmosphere.setAdvancedClouds", "Enables or disables old cloud system. New cloud system is used if set to false", std::function([this](bool enable) { if (!mActiveAtmosphere.empty()) { auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); @@ -235,7 +235,7 @@ void Plugin::deInit() { mGuiManager->getGui()->unregisterCallback("atmosphere.setEnableWaves"); mGuiManager->getGui()->unregisterCallback("atmosphere.setWaterLevel"); mGuiManager->getGui()->unregisterCallback("atmosphere.setEnableClouds"); - mGuiManager->getGui()->unregisterCallback("atmosphere.setOldClouds"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setAdvancedClouds"); mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudAltitude"); mGuiManager->getGui()->unregisterCallback("atmosphere.setEnableLimbLuminance"); diff --git a/plugins/csp-atmospheres/textures/cloudTop.jpg b/plugins/csp-atmospheres/textures/cloudTop.jpg index 073311b0d28b813cb29e808cdc19316a298fcc77..d4c07fbea73013f094be42b004dee0b89efd2aa8 100644 GIT binary patch literal 3315 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 bKiVE$m-80tdE-En$oipvy5RGfwa5PktjAeS literal 4660 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 diff --git a/plugins/csp-atmospheres/textures/cloudTop2.xcf b/plugins/csp-atmospheres/textures/cloudTop2.xcf index e5c0cbb94ed0d072dc0c51939f237d54f72415b2..51b427479d92a54356540723150cb062364ccde3 100644 GIT binary patch delta 16530 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 AVgLXD delta 21349 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­K~Od)ubi8J0inF6sq@T$ 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 diff --git a/plugins/csp-web-api/src/Plugin.cpp b/plugins/csp-web-api/src/Plugin.cpp index 538c56d11..cf70c2d52 100644 --- a/plugins/csp-web-api/src/Plugin.cpp +++ b/plugins/csp-web-api/src/Plugin.cpp @@ -269,7 +269,7 @@ void Plugin::init() { std::unique_lock lock(mCaptureMutex); // Read all paramters. - mCaptureDelay = std::clamp(getParam(conn, "delay", 50), 1, 200); + mCaptureDelay = std::clamp(getParam(conn, "delay", 50), 1, 10000); mCaptureWidth = std::clamp(getParam(conn, "width", 0), 0, 8192); mCaptureHeight = std::clamp(getParam(conn, "height", 0), 0, 8192); mRestoreState = getParam(conn, "restoreState", "false") == "true"; From 9eeada78cf17f784b151b4a2e5eb3d152c128979 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Fri, 25 Jul 2025 10:05:58 +0200 Subject: [PATCH 56/61] dithered clouds mostly visually stable, views near clouds horrible performance, good performance at high altitudes --- .../shaders/csp-atmosphere.frag | 169 ++++++++++-------- 1 file changed, 90 insertions(+), 79 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 1f897cdc2..678b1fe21 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -423,14 +423,15 @@ vec3 CLOUD_COLOR = vec3(1.); float MAXIMUM_DIST_BETWEEN_SAMPLES = 250; // adaptive step size parameters -float CLOSE_STEP = 30; -float MID_STEP = 100; +float CLOSE_STEP = 50; +float MID_STEP = 200; float FAR_STEP = 500; -float MID_DISTANCE = 100000; +float MID_DISTANCE = 50000; float FAR_DISTANCE = 200000; int MAXIMUM_SAMPLES = 400; float CLOUD_CUTOFF = .1; bool SAMPLE_JITTER = true; +float JITTER_INTENSITY = .9; bool SECONDARY_RAYS = true; // get the cloud type at these texture coordinates // adds high frequency noises to the values from the cloud texture to replace coarse @@ -533,7 +534,7 @@ float CumuloNimbusFreeDistance(vec3 position, vec3 dir, float dist_from_camera, int num_samples = 10; float dist_to_cover = interval_end - dist_from_camera; // further away from the camera, slight flickering of small clouds matters less - float base_step = remap(dist_from_camera, 0, 200000, 100, 2000); + float base_step = remap(dist_from_camera, 0, FAR_DISTANCE, 100, 1000); if(num_samples * base_step > dist_to_cover){ base_step = dist_to_cover / num_samples; } @@ -601,22 +602,26 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam float interval_length = interval.y - interval.x; float last_extinction = getCloudDensity(rayOrigin, cam_pos).x * DENSITY_MULTIPLIER * (1+ABSORBED_FRACTION); - + vec3 position = rayOrigin; for(int i = 1; i <= samples; ++i){ + float jitter_value = SAMPLE_JITTER ? (hash33(position).x - .5) * .9 : 0; // more samples in the close vicinity of the point to capture self-shadowing of smaller clouds with fewer samples - float progress = pow(float(i) / float(samples), 2); + float progress = pow((float(i) + jitter_value) / float(samples), 2); float t_now = remap(progress, 0, 1, interval.x, interval.y); float dist = t_now - t_last; - vec3 position = rayOrigin + rayDir * t_now; - float local_density = getCloudDensity(position, cam_pos, false).x; - - float scatter_coefficient = local_density * DENSITY_MULTIPLIER; - float extinction = scatter_coefficient * (1+ABSORBED_FRACTION); - float clamped_dist = clamp(dist, 0, MAXIMUM_DIST_BETWEEN_SAMPLES); - float extinction_along_segment = exp(-(extinction + last_extinction) * .5 * clamped_dist); - path_transmittance *= extinction_along_segment; - last_extinction = extinction; + position = rayOrigin + rayDir * t_now; + + if(!CumuloNimbusGuaranteedFree(position)){ + float local_density = getCloudDensity(position, cam_pos, false).x; + + float scatter_coefficient = local_density * DENSITY_MULTIPLIER; + float extinction = scatter_coefficient * (1+ABSORBED_FRACTION); + float clamped_dist = clamp(dist, 0, MAXIMUM_DIST_BETWEEN_SAMPLES); + float extinction_along_segment = exp(-(extinction + last_extinction) * .5 * clamped_dist); + path_transmittance *= extinction_along_segment; + last_extinction = extinction; + } } return path_transmittance; } @@ -691,23 +696,26 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o float samples_taken_multiplier = remap(float(samples_taken) / MAXIMUM_SAMPLES, 0, 1, 1, 10); // step size is decreased when the interval is short float short_domain_multiplier = remap(interval_length, 0, 30000, .1, 1); + short_domain_multiplier = remap(t_now, 0, MID_DISTANCE, short_domain_multiplier, 1); - float near_cloud_multiplier = remap(model_density, .5 * CLOUD_CUTOFF, CLOUD_CUTOFF, 1, .1); + float near_cloud_multiplier = remap(model_density, .5 * CLOUD_CUTOFF, CLOUD_CUTOFF, 1, .2); near_cloud_multiplier = remap(t_now, 0, 30000, near_cloud_multiplier, 1); near_cloud_multiplier = in_cloud ? 1 : near_cloud_multiplier; - float JITTER_INTENSITY = .2; - float jitter_multiplier = remap(hash33(position).x, 0, 1, 1 - JITTER_INTENSITY, 1 + JITTER_INTENSITY); + float jitter_multiplier = remap(hash33(position).x, 0, 1, 1 - JITTER_INTENSITY * .5, 1 + JITTER_INTENSITY * .5); jitter_multiplier = SAMPLE_JITTER ? jitter_multiplier : 1; // there are two parameterized intervals with different functions for the step size as a function of distance from camera // Note that discontinuities in this function are a VERY BAD idea and give weird artifacts float step = CLOSE_STEP; - if(distance_in_interval < MID_DISTANCE){ - step = remap(distance_in_interval, 0, MID_DISTANCE, CLOSE_STEP, MID_STEP); + float relevant_distance = remap(t_now, 0, 200000, distance_in_interval, distance_in_interval * .5 + t_now * .5); + relevant_distance = distance_in_interval; + if(relevant_distance < MID_DISTANCE){ + step = remap(relevant_distance, 0, MID_DISTANCE, CLOSE_STEP, MID_STEP); }else{ - step = remap(distance_in_interval, MID_DISTANCE, FAR_DISTANCE, MID_STEP, FAR_STEP); + step = remap(relevant_distance, MID_DISTANCE, FAR_DISTANCE, MID_STEP, FAR_STEP); } + step = min(step, interval_length / 20); step /= interval_length; progress += step * low_transmittance_multiplier * samples_taken_multiplier * short_domain_multiplier * near_cloud_multiplier * jitter_multiplier; @@ -718,64 +726,67 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o //===== END OF STEP SIZE CONTROL ===== //===== BEGIN OF SCATTERING INTEGRATION ===== - density_struct = getCloudDensity(position, rayOrigin); - float local_density = density_struct.x; - model_density = density_struct.y; - maximum_density = clamp(max(maximum_density, local_density), 0, 1); - float scatter_coefficient = local_density * DENSITY_MULTIPLIER; - // the light available at that point - vec3 incoming_transmittance = vec3(1); - vec3 local_incoming = GetSkyLuminance(position, sunDir, sunDir, incoming_transmittance); - // using the luminance provided by the atmosphere model gives unstable results and artifacts - // the transmittance from the atmosphere model seems fine though - local_incoming = vec3(144809.5,129443.421875,127098.6484375) * incoming_transmittance; - - - if(local_density > 0){ - //===== INSIDE CLOUD ===== - - if(!in_cloud){ - // if entering cloud, integrate the inscattering from the regular atmosphere for the cloud-free interval - atmo_inscattering = GetSkyLuminanceToPoint(rayOrigin + rayDir * t_cloudfree_start, position, sunDir, atmo_transmittance); - inscattering_acc += path_transmittance * atmo_inscattering; - path_transmittance *= atmo_transmittance; + float scatter_coefficient = 0; + if(!CumuloNimbusGuaranteedFree(position)){ + density_struct = getCloudDensity(position, rayOrigin); + float local_density = density_struct.x; + model_density = density_struct.y; + maximum_density = clamp(max(maximum_density, local_density), 0, 1); + scatter_coefficient = local_density * DENSITY_MULTIPLIER; + // the light available at that point + vec3 incoming_transmittance = vec3(1); + vec3 local_incoming = GetSkyLuminance(position, sunDir, sunDir, incoming_transmittance); + // using the luminance provided by the atmosphere model gives unstable results and artifacts + // the transmittance from the atmosphere model seems fine though + local_incoming = vec3(144809.5,129443.421875,127098.6484375) * incoming_transmittance; + + + if(local_density > 0){ + //===== INSIDE CLOUD ===== + //return vec4(10000, 0, 0, 1); + if(!in_cloud){ + // if entering cloud, integrate the inscattering from the regular atmosphere for the cloud-free interval + atmo_inscattering = GetSkyLuminanceToPoint(rayOrigin + rayDir * t_cloudfree_start, position, sunDir, atmo_transmittance); + inscattering_acc += path_transmittance * atmo_inscattering; + path_transmittance *= atmo_transmittance; + } + in_cloud = true; + in_cloud_counter +=1; + t_cloudfree_start = t_now; + + // clamp to keep segment lengths reasonable to not break the lighting model + float sdist = clamp(dist, 0, MAXIMUM_DIST_BETWEEN_SAMPLES); + // extinction coefficient. + // Important to use midpoint for accurate Hillaire integration trick to work + float sigma_e = (scatter_coefficient + last_scatter_coefficient) / 2 * (1 + ABSORBED_FRACTION); + float transmittance_along_segment = exp(-sigma_e * sdist); + vec3 direct_incoming = local_incoming; + + // get transmittance through clouds + vec2 top_intersection = intersectSphere(position, sunDir, PLANET_RADIUS + CUMULONIMBUS_END_HEIGHT); + int transmittance_samples = int(remap(path_transmittance.r, 0, 1, 10, 2)); + float in_transmittance = SECONDARY_RAYS ? raymarchTransmittance(position, sunDir, vec2(0, top_intersection.y), rayOrigin, transmittance_samples) : 1; + direct_incoming *= in_transmittance; + + // multiscattering approximation like in Nubis + float ms_volume = remap(scatter_coefficient * dist, .1, 1.0, 0.0, 1.0); + ms_volume *= pow(incoming_transmittance.r, 5); + ms_volume *= MS_INTENSITY; + vec3 msContrib = local_incoming * ms_volume; + + // Hillaire integration trick for more consistent appearance for different step sizes + // considers the transmittance along the segment while integrating the scattering inside that segment + // breaks when not using midpoint extinction coefficient + vec3 S = scatter_coefficient * direct_incoming * phase * 4 * PI * CLOUD_COLOR + msContrib / sdist; + inscattering_acc += path_transmittance * (S - S * transmittance_along_segment) / sigma_e; + + // reduce transmittance along the path + path_transmittance *= vec3(transmittance_along_segment); + }else{ + //===== NOT INSIDE CLOUD ===== + in_cloud = false; + in_cloud_counter = 0; } - in_cloud = true; - in_cloud_counter +=1; - t_cloudfree_start = t_now; - - // clamp to keep segment lengths reasonable to not break the lighting model - float sdist = clamp(dist, 0, MAXIMUM_DIST_BETWEEN_SAMPLES); - // extinction coefficient. - // Important to use midpoint for accurate Hillaire integration trick to work - float sigma_e = (scatter_coefficient + last_scatter_coefficient) / 2 * (1 + ABSORBED_FRACTION); - float transmittance_along_segment = exp(-sigma_e * sdist); - vec3 direct_incoming = local_incoming; - - // get transmittance through clouds - vec2 top_intersection = intersectSphere(position, sunDir, PLANET_RADIUS + CUMULONIMBUS_END_HEIGHT); - int transmittance_samples = int(remap(path_transmittance.r, 0, 1, 10, 2)); - float in_transmittance = SECONDARY_RAYS ? raymarchTransmittance(position, sunDir, vec2(0, top_intersection.y), rayOrigin, transmittance_samples) : 1; - direct_incoming *= in_transmittance; - - // multiscattering approximation like in Nubis - float ms_volume = remap(scatter_coefficient * dist, .1, 1.0, 0.0, 1.0); - ms_volume *= pow(incoming_transmittance.r, 5); - ms_volume *= MS_INTENSITY; - vec3 msContrib = local_incoming * ms_volume; - - // Hillaire integration trick for more consistent appearance for different step sizes - // considers the transmittance along the segment while integrating the scattering inside that segment - // breaks when not using midpoint extinction coefficient - vec3 S = scatter_coefficient * direct_incoming * phase * 4 * PI * CLOUD_COLOR + msContrib / sdist; - inscattering_acc += path_transmittance * (S - S * transmittance_along_segment) / sigma_e; - - // reduce transmittance along the path - path_transmittance *= vec3(transmittance_along_segment); - }else{ - //===== NOT INSIDE CLOUD ===== - in_cloud = false; - in_cloud_counter = 0; } //===== END OF SCATTERING INTEGRATION ===== @@ -1075,7 +1086,7 @@ float getCloudShadow(vec3 rayOrigin, vec3 rayDir) { vec2 topIntersections = intersectSphere(rayOrigin, rayDir, topAltitude); vec2 lowIntersections = intersectSphere(rayOrigin, rayDir, topAltitude - thickness); vec2 interval = vec2(lowIntersections.y, topIntersections.y); - int transmittance_samples = int(remap(interval.y - interval.x, 10000, 100000, 5, 30)); + int transmittance_samples = int(remap(interval.y - interval.x, 10000, 100000, 10, 30)); float transmittance = raymarchTransmittance(rayOrigin, rayDir, interval, rayOrigin, transmittance_samples); //float transmittance = clamp(raymarchingResult.a, .01, 1.); return transmittance; From 6f304c6e4f22dd6a11c46632f05f95c0880838f5 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Mon, 28 Jul 2025 07:36:59 +0200 Subject: [PATCH 57/61] fine-tuned ground view --- .../gui/atmospheres_settings.html | 20 +++- .../csp-atmospheres/gui/js/csp-atmospheres.js | 6 ++ .../shaders/csp-atmosphere.frag | 89 ++++++++++-------- plugins/csp-atmospheres/src/Atmosphere.cpp | 20 ++++ plugins/csp-atmospheres/src/Atmosphere.hpp | 6 ++ plugins/csp-atmospheres/src/Plugin.cpp | 87 ++++++++++++++++- plugins/csp-atmospheres/src/Plugin.hpp | 8 ++ plugins/csp-atmospheres/textures/cloudTop.jpg | Bin 3315 -> 0 bytes plugins/csp-atmospheres/textures/cloudTop.png | Bin 0 -> 21739 bytes .../csp-atmospheres/textures/cloudTop2.xcf | Bin 30012 -> 81588 bytes 10 files changed, 191 insertions(+), 45 deletions(-) delete mode 100644 plugins/csp-atmospheres/textures/cloudTop.jpg create mode 100644 plugins/csp-atmospheres/textures/cloudTop.png diff --git a/plugins/csp-atmospheres/gui/atmospheres_settings.html b/plugins/csp-atmospheres/gui/atmospheres_settings.html index e47917eb7..8f39afc1f 100644 --- a/plugins/csp-atmospheres/gui/atmospheres_settings.html +++ b/plugins/csp-atmospheres/gui/atmospheres_settings.html @@ -80,7 +80,14 @@
    Cloud Density
    -
    +
    +
    +
    + +
    +
    Cloud Absorption
    +
    +
    @@ -92,14 +99,21 @@
    -
    Cloud Low Frequencies repetition scale
    +
    Cloud Cutoff
    +
    +
    +
    +
    + +
    +
    Cloud LF wave length
    +
    +
    Cloud Quality
    +
    +
    +
    +
    + +
    +
    Cloud Max Samples
    +
    +
    +
    +
    + +
    +
    Cloud Sample Jitter
    +
    +
    +
    +
    +
    Cloud Altitude
    @@ -78,23 +99,51 @@
    -
    Cloud Density
    +
    Cloud Type exp
    -
    +
    -
    Cloud Absorption
    +
    Cloud Type floor
    -
    +
    -
    Cloud Coverage Exponent
    +
    Cloud Type ceil
    -
    +
    +
    +
    + +
    +
    Cloud Type min
    +
    +
    +
    +
    + +
    +
    Cloud Type max
    +
    +
    +
    +
    + +
    +
    Cloud Density
    +
    +
    +
    +
    + +
    +
    Cloud Absorption
    +
    +
    diff --git a/plugins/csp-atmospheres/gui/js/csp-atmospheres.js b/plugins/csp-atmospheres/gui/js/csp-atmospheres.js index f4eedd2bd..dfce2ae67 100644 --- a/plugins/csp-atmospheres/gui/js/csp-atmospheres.js +++ b/plugins/csp-atmospheres/gui/js/csp-atmospheres.js @@ -21,6 +21,14 @@ init() { CosmoScout.gui.initSlider("atmosphere.setCloudAltitude", 0, 10000, 100, [2000]); CosmoScout.gui.initSlider("atmosphere.setWaterLevel", -5000, 5000, 20, [0]); + CosmoScout.gui.initSlider("atmosphere.setCloudQuality", 0.1, 3, .1, [1]); + CosmoScout.gui.initSlider("atmosphere.setCloudMaxSamples", 10, 20000, 10, [400]); + CosmoScout.gui.initSlider("atmosphere.setCloudJitter", 0, 1, .01, [.5]); + CosmoScout.gui.initSlider("atmosphere.setCloudTypeExponent", 0.01, 5, .1, [1]); + CosmoScout.gui.initSlider("atmosphere.setCloudRangeMin", 0, 1, 0.01, [0]); + CosmoScout.gui.initSlider("atmosphere.setCloudRangeMax", 0, 1, 0.01, [1]); + CosmoScout.gui.initSlider("atmosphere.setCloudTypeMin", 0, 1, .01, [0]); + CosmoScout.gui.initSlider("atmosphere.setCloudTypeMax", 0, 1, .01, [1]); CosmoScout.gui.initSlider("atmosphere.setCloudDensityMultiplier", .1, 10, .1, [1]); CosmoScout.gui.initSlider("atmosphere.setCloudAbsorption", 0, 1, .01, [0]); CosmoScout.gui.initSlider("atmosphere.setCloudCoverageExponent", .1, 5, .1, [1]); diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index e7ef32b08..773bd6faa 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -389,14 +389,14 @@ float CUMULONIMBUS_END_HEIGHT = 5000; uniform float uCoverageExponent = .5; float CLOUD_BASE_FRACTION = 0.; -float CLOUD_TYPE_NOISE_WORLEY_SCALE=10; +float CLOUD_TYPE_NOISE_WORLEY_SCALE=5.3; float CLOUD_TYPE_NOISE_PERLIN_SCALE=30; -float CLOUD_TYPE_EXPONENT = 1.; -float CLOUD_TYPE_RANGE_START = 0.; -float CLOUD_TYPE_RANGE_END = 1.; -float CLOUD_TYPE_MIN = 0.; -float CLOUD_TYPE_MAX = 1.; +uniform float CLOUD_TYPE_EXPONENT = 1.; +uniform float CLOUD_TYPE_RANGE_START = 0.; +uniform float CLOUD_TYPE_RANGE_END = 1.; +uniform float CLOUD_TYPE_MIN = 0.; +uniform float CLOUD_TYPE_MAX = 1.; // cloud types are remapped from [0,1] so that all values above this become 1 float CLOUD_COVER_MAX = .8; @@ -434,21 +434,22 @@ float MAXIMUM_DIST_BETWEEN_SAMPLES = 250; // adaptive step size parameters +uniform float CLOUD_QUALITY = 1; float HD_CLOSE_DISTANCE = 10000; float CLOSE_STEP = 100; float MID_STEP = 100; float FAR_STEP = 500; float MID_DISTANCE = 50000; float FAR_DISTANCE = 200000; -int MAXIMUM_SAMPLES = 512; +float MAXIMUM_SAMPLES = 400; uniform float uCloudCutoff = .2; bool SAMPLE_JITTER = true; -float JITTER_INTENSITY = 0.5; -float SECONDARY_JITTER_INTENSITY=.9; +uniform float JITTER_INTENSITY = 0.5; bool SECONDARY_RAYS = true; uniform float uCloudLFRepetitionScale = 5000; uniform float uCloudHFRepetitionScale = 1190; + // get the cloud type at these texture coordinates // adds high frequency noises to the values from the cloud texture to replace coarse // bilinear interpolation artifacts with smaller artifacts that are harder to notice @@ -461,7 +462,7 @@ vec4 GetLocalCloudType(vec2 texCoords){ float perlinNoise = perlinSample.g; // only the fringes of the clouds should be broken up, the cores should not become noisy float cloudType = worleyNoise * 0.5 + perlinNoise * .5; - return vec4(remap(cloudType, CLOUD_TYPE_RANGE_START, CLOUD_TYPE_RANGE_END, CLOUD_TYPE_MIN, CLOUD_TYPE_MAX), perlinSample); + return vec4(remap(pow(cloudType, CLOUD_TYPE_EXPONENT), CLOUD_TYPE_RANGE_START, CLOUD_TYPE_RANGE_END, CLOUD_TYPE_MIN, CLOUD_TYPE_MAX), perlinSample); } // get the low-fidelity cloud prior like in the Nubis cloud system @@ -618,9 +619,9 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam float last_extinction = getCloudDensity(rayOrigin, cam_pos).x * BASE_DENSITY * uCloudDensityMultiplier * (1+uCloudAbsorption); vec3 position = rayOrigin; - for(int i = 1; i <= samples; ++i){ + for(int i = 1; i <= samples * CLOUD_QUALITY; ++i){ float dist_to_cam = length(rayOrigin - cam_pos); - float jitter_value = SAMPLE_JITTER && jitter ? (hash33(position).x - .5) * SECONDARY_JITTER_INTENSITY : 0; + float jitter_value = SAMPLE_JITTER && jitter ? (hash33(position).x - .5) * JITTER_INTENSITY : 0; // reduce jitter on extremely long paths to avoid transmittance turning into pure noise. Introduces some banding jitter_value = remap(interval_length, 0, 500000, jitter_value, 0); // stop clouds seen from below from becoming extremely dark @@ -729,6 +730,8 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o float jitter_multiplier = remap(hash33(position).x, 0, 1, 1 - JITTER_INTENSITY * .5, 1 + JITTER_INTENSITY * .5); jitter_multiplier = SAMPLE_JITTER ? remap(t_now, -100000, FAR_DISTANCE, 1, jitter_multiplier) : 1; + float quality_multiplier = 1 / CLOUD_QUALITY; + // there are two parameterized intervals with different functions for the step size as a function of distance from camera // Note that discontinuities in this function are a VERY BAD idea and give weird artifacts float step = CLOSE_STEP; @@ -741,7 +744,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o } step = min(step, interval_length / 20); step /= interval_length; - progress += step * low_transmittance_multiplier * samples_taken_multiplier * short_domain_multiplier * near_cloud_multiplier * jitter_multiplier * close_to_camera_multiplier; + progress += step * low_transmittance_multiplier * samples_taken_multiplier * short_domain_multiplier * near_cloud_multiplier * jitter_multiplier * close_to_camera_multiplier * quality_multiplier; progress = clamp(progress, 0, 1); t_now = remap(progress, 0, 1, interval.x, interval.y); @@ -831,9 +834,9 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o float sample_ratio = float(samples_taken) / float(MAXIMUM_SAMPLES); //return vec4(sample_ratio, 1-sample_ratio, 0, 1)*10000; //return vec4(maximum_density, 1-maximum_density, 0, 1)*10000; - if(samples_taken == MAXIMUM_SAMPLES){ - return vec4(100000, 0, 100000, 1); - } + //if(samples_taken == MAXIMUM_SAMPLES){ + // return vec4(100000, 0, 100000, 1); + //} // have to add atmo inscattering when exiting the interval if(!in_cloud){ diff --git a/plugins/csp-atmospheres/src/Atmosphere.cpp b/plugins/csp-atmospheres/src/Atmosphere.cpp index 651ac1e79..5da151d02 100644 --- a/plugins/csp-atmospheres/src/Atmosphere.cpp +++ b/plugins/csp-atmospheres/src/Atmosphere.cpp @@ -316,6 +316,15 @@ void Atmosphere::createShader(ShaderType type, VistaGLSLShader& shader, Uniforms uniforms.cloudLFRepetitionScale = shader.GetUniformLocation("uCloudLFRepetitionScale"); uniforms.cloudHFRepetitionScale = shader.GetUniformLocation("uCloudHFRepetitionScale"); + uniforms.cloudQuality = shader.GetUniformLocation("CLOUD_QUALITY"); + uniforms.cloudMaxSamples = shader.GetUniformLocation("MAXIMUM_SAMPLES"); + uniforms.cloudJitter = shader.GetUniformLocation("JITTER_INTENSITY"); + uniforms.cloudTypeExponent = shader.GetUniformLocation("CLOUD_TYPE_EXPONENT"); + uniforms.cloudRangeMin = shader.GetUniformLocation("CLOUD_TYPE_RANGE_START"); + uniforms.cloudRangeMax = shader.GetUniformLocation("CLOUD_TYPE_RANGE_END"); + uniforms.cloudTypeMin = shader.GetUniformLocation("CLOUD_TYPE_MIN"); + uniforms.cloudTypeMax = shader.GetUniformLocation("CLOUD_TYPE_MAX"); + // We bind the eclipse shadow map to texture unit 3. The color and depth buffer are bound to 0 and // 1, 2 is used for the cloud map, 3 is used for the limb luminance texture. @@ -509,6 +518,14 @@ bool Atmosphere::Do() { mAtmoShader.SetUniform(mAtmoUniforms.cloudCutoff, mSettings.mCloudCutoff.get()); mAtmoShader.SetUniform(mAtmoUniforms.cloudLFRepetitionScale, mSettings.mCloudLFRepetitionScale.get()); mAtmoShader.SetUniform(mAtmoUniforms.cloudHFRepetitionScale, mSettings.mCloudHFRepetitionScale.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudQuality, mSettings.mCloudQuality.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudMaxSamples, mSettings.mCloudMaxSamples.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudJitter, mSettings.mCloudJitter.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudTypeExponent, mSettings.mCloudTypeExponent.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudRangeMin, mSettings.mCloudRangeMin.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudRangeMax, mSettings.mCloudRangeMax.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudTypeMin, mSettings.mCloudTypeMin.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudTypeMax, mSettings.mCloudTypeMax.get()); } if (mSettings.mEnableLimbLuminance.get() && mLimbLuminanceTexture) { diff --git a/plugins/csp-atmospheres/src/Atmosphere.hpp b/plugins/csp-atmospheres/src/Atmosphere.hpp index 47715ccd8..e3ded4767 100644 --- a/plugins/csp-atmospheres/src/Atmosphere.hpp +++ b/plugins/csp-atmospheres/src/Atmosphere.hpp @@ -76,6 +76,15 @@ class Atmosphere : public IVistaOpenGLDraw { uint32_t cloudLFRepetitionScale = 0; uint32_t cloudHFRepetitionScale = 0; + uint32_t cloudQuality = 0; + uint32_t cloudMaxSamples = 0; + uint32_t cloudJitter = 0; + uint32_t cloudTypeExponent = 0; + uint32_t cloudRangeMin = 0; + uint32_t cloudRangeMax = 0; + uint32_t cloudTypeMin = 0; + uint32_t cloudTypeMax = 0; + // Only used by the panorama shader. uint32_t atmoPanoUniforms = 0; diff --git a/plugins/csp-atmospheres/src/Plugin.cpp b/plugins/csp-atmospheres/src/Plugin.cpp index e59513fef..e6e4086c2 100644 --- a/plugins/csp-atmospheres/src/Plugin.cpp +++ b/plugins/csp-atmospheres/src/Plugin.cpp @@ -80,6 +80,14 @@ void from_json(nlohmann::json const& j, Plugin::Settings::Atmosphere& o) { cs::core::Settings::deserialize(j, "cloudCutoff", o.mCloudCutoff); cs::core::Settings::deserialize(j, "cloudLFRepetitionScale", o.mCloudLFRepetitionScale); cs::core::Settings::deserialize(j, "cloudHFRepetitionScale", o.mCloudHFRepetitionScale); + + cs::core::Settings::deserialize(j, "cloudQuality", o.mCloudQuality); + cs::core::Settings::deserialize(j, "cloudMaxSamples", o.mCloudMaxSamples); + cs::core::Settings::deserialize(j, "cloudTypeExponent", o.mCloudTypeExponent); + cs::core::Settings::deserialize(j, "cloudRangeMin", o.mCloudRangeMin); + cs::core::Settings::deserialize(j, "cloudRangeMax", o.mCloudRangeMax); + cs::core::Settings::deserialize(j, "cloudTypeMin", o.mCloudTypeMin); + cs::core::Settings::deserialize(j, "cloudTypeMax", o.mCloudTypeMax); } void to_json(nlohmann::json& j, Plugin::Settings::Atmosphere const& o) { @@ -104,6 +112,14 @@ void to_json(nlohmann::json& j, Plugin::Settings::Atmosphere const& o) { cs::core::Settings::serialize(j, "cloudCutoff", o.mCloudCutoff); cs::core::Settings::serialize(j, "cloudLFRepetitionScale", o.mCloudLFRepetitionScale); cs::core::Settings::serialize(j, "cloudHFRepetitionScale", o.mCloudHFRepetitionScale); + + cs::core::Settings::serialize(j, "cloudQuality", o.mCloudQuality); + cs::core::Settings::serialize(j, "cloudMaxSamples", o.mCloudMaxSamples); + cs::core::Settings::serialize(j, "cloudTypeExponent", o.mCloudTypeExponent); + cs::core::Settings::serialize(j, "cloudRangeMin", o.mCloudRangeMin); + cs::core::Settings::serialize(j, "cloudRangeMax", o.mCloudRangeMax); + cs::core::Settings::serialize(j, "cloudTypeMin", o.mCloudTypeMin); + cs::core::Settings::serialize(j, "cloudTypeMax", o.mCloudTypeMax); } //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -224,6 +240,81 @@ void Plugin::init() { "Enables or disables rendering of atmospheres.", std::function([this](bool enable) { mPluginSettings->mEnable = enable; })); + mGuiManager->getGui()->registerCallback("atmosphere.setCloudQuality", + "Divide all step sizes by this value", std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudQuality = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudMaxSamples", + "Maximum number of samples taken on a single ray by the cloud system. Increase this value if you see pink artifacts in the sky.", std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudMaxSamples = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudJitter", + "Set the intensity of random jittering of samples. Increase to break up banding artifacts. Decrease if images are too noisy.", std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudJitter = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudTypeExponent", + "Exponent on the cloud type noise before remapping. values < 1 bias towards more dense cloud types", + std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudTypeExponent = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudRangeMin", + "All cloud type noise values below this value are mapped to the minimum cloud type", + std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudRangeMin = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudRangeMax", + "All cloud type noise values above this value are mapped to the maximum cloud type", + std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudRangeMax = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudTypeMin", + "Minimum cloud type to be used", std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudTypeMin = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudTypeMax", + "Maximum cloud type to be used", std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudTypeMax = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + mGuiManager->getGui()->registerCallback("atmosphere.setCloudDensityMultiplier", "Set a multiplier for the cloud density", std::function([this](double value) { if (!mActiveAtmosphere.empty()) { @@ -315,9 +406,17 @@ void Plugin::deInit() { mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudAbsorption"); mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudCoverageExponent"); mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudCutoff"); - mGuiManager->getGui()->unregisterCallback("setCloudLFRepetitionScale"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudLFRepetitionScale"); mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudHFRepetitionScale"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudQuality"); + mGuiManager->getGui()->unregisterCallback("atmpsphere.setCloudMaxSamples"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudTypeExponent"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudRangeMin"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudRangeMax"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudTypeMin"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudTypeMax"); + mSolarSystem->pActiveObject.disconnect(mActiveObjectConnection); mAllSettings->onLoad().disconnect(mOnLoadConnection); mAllSettings->onSave().disconnect(mOnSaveConnection); diff --git a/plugins/csp-atmospheres/src/Plugin.hpp b/plugins/csp-atmospheres/src/Plugin.hpp index 92bffd206..3fe39d6c7 100644 --- a/plugins/csp-atmospheres/src/Plugin.hpp +++ b/plugins/csp-atmospheres/src/Plugin.hpp @@ -57,6 +57,14 @@ class Plugin : public cs::core::PluginBase { std::optional mLimbLuminanceTexture; ///< Path to the limb luminance texture. /// advanced cloud model additional parameters + cs::utils::DefaultProperty mCloudQuality{1.f}; + cs::utils::DefaultProperty mCloudMaxSamples{400.f}; + cs::utils::DefaultProperty mCloudJitter{.5f}; + cs::utils::DefaultProperty mCloudTypeExponent{1.f}; + cs::utils::DefaultProperty mCloudRangeMin{0.f}; + cs::utils::DefaultProperty mCloudRangeMax{1.f}; + cs::utils::DefaultProperty mCloudTypeMin{0.f}; + cs::utils::DefaultProperty mCloudTypeMax{1.f}; cs::utils::DefaultProperty mCloudDensityMultiplier{1.f}; cs::utils::DefaultProperty mCloudAbsorption{0.f}; cs::utils::DefaultProperty mCloudCoverageExponent{1.f}; diff --git a/plugins/csp-atmospheres/textures/cloudTop.png b/plugins/csp-atmospheres/textures/cloudTop.png index 3026797ea342a294d6937de50ce67e1563eb60e0..ca65f5d5dbf5a3b3a1a4a15ea864c7333da53d22 100644 GIT binary patch literal 23757 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 IM6N<$g6~Kk$p8QV literal 21739 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 T{LI delta 35826 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 Date: Thu, 31 Jul 2025 09:48:32 +0200 Subject: [PATCH 60/61] remove outdated comment, tweak cloud type texture --- .../shaders/csp-atmosphere.frag | 2 -- plugins/csp-atmospheres/textures/cloudTop.png | Bin 23757 -> 23789 bytes .../csp-atmospheres/textures/cloudTop2.xcf | Bin 81644 -> 81628 bytes 3 files changed, 2 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 773bd6faa..700ed9560 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -457,10 +457,8 @@ uniform float uCloudHFRepetitionScale = 1190; vec4 GetLocalCloudType(vec2 texCoords){ vec4 worleySample = textureLod(uNoiseTexture2D, texCoords * CLOUD_TYPE_NOISE_WORLEY_SCALE, 0); vec4 perlinSample = textureLod(uNoiseTexture2D, texCoords * CLOUD_TYPE_NOISE_PERLIN_SCALE, 0); - // map noises from [0, 1] to [-.5, .5] float worleyNoise = worleySample.b; float perlinNoise = perlinSample.g; - // only the fringes of the clouds should be broken up, the cores should not become noisy float cloudType = worleyNoise * 0.5 + perlinNoise * .5; return vec4(remap(pow(cloudType, CLOUD_TYPE_EXPONENT), CLOUD_TYPE_RANGE_START, CLOUD_TYPE_RANGE_END, CLOUD_TYPE_MIN, CLOUD_TYPE_MAX), perlinSample); } diff --git a/plugins/csp-atmospheres/textures/cloudTop.png b/plugins/csp-atmospheres/textures/cloudTop.png index ca65f5d5dbf5a3b3a1a4a15ea864c7333da53d22..385957b90292db47ba07d304ebd8d7733c2ec5ec 100644 GIT binary patch delta 23417 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 AhX4Qo diff --git a/plugins/csp-atmospheres/textures/cloudTop2.xcf b/plugins/csp-atmospheres/textures/cloudTop2.xcf index c7a12a05e8999c9ceb532b90172c25aa8db5acc4..1178506737269fd2bc4b89d2bfbe394ab0497764 100644 GIT binary patch delta 10980 zcmYj%2V7KHnlJZMkwcNA}_k?{to%3|}7BU*EWXE&S@0&`ZHV7X$n*T<|&P?Rl2t`DYxw;CC@3H0=7V zJ8be^L#?0yiiiHy^XyqqPw#W*F9ZZ%x^gYz_FZ;*uV(1u@Gy!dBM#t$68qJu(jXo=z8$z$unoYeFH9rT)uKOESy~XS_plaauEnNe9n7& zfenv8p7lKEbHO(-BsBcSt>`$`VV_p;cUM9$Q!)WKcmCWtud^Op_fI@Lz0Y6p4-CE% zelsdM-rUl9r`;Y$7m#r~>wVrYASmS0V|Ifn*>ZdhO<&m;_@pOKS?g|M0O>XDHXc{{8_0B#;Dr z>+k313+s77CJ;V(^2Bj+;*(QuZa4*lhlWSoiAgjvwb*X6YajG~?4+B!Cw$?&udk>d z@m;-e9-uH6652U96NUO z2s!%6@e?QAJ-pBRU%Y(vI+V|vJL-b}lP69bJ96akp~FWG9~DwN?;CI_^!lynSOZA0 z!*=&RXV=3=kDqdLr|#tCW*z>!0T4j#k{$4;IBCjr5s;Wux` z>KU3^THEZ}3;P}hlWu3uc)-&<&l1naz(kpI3pfStjvN8_{{06I0LQTtr`^5I`@!)e zBJb)Nn3!+hX}8zGY5$?4$4;C&?dEpI{S3!_)x+I`LZ3c$^2D*DLSPpcS711J_&6L1 z41|Qjimbkqp4O4W2M@TqxHvgEyEwb2_3$UP2@E-qw0bKtlA2ca(z;vD`NjJY~HI_%xO z%g&D2Ft(rB?WQU_eDt)37p#4WEpgV-{m8}10mSX?YuX9K>yt<4VW?N(OS);nx$?e{n!E>F36obwG-R@c-qFgCT^VM9?na-7~dJ2??& z#)Y{4;PU@z+wQQova}=?pIKVLXuEbh!f2=5&ieQ(scLHL8JSqnclYew2OYn2a&RO- zu<1gapHsd-*?PO0m4%s^shO#{g_Si8KBohR5ItV!*)$hZHFGl)6JsM|Q!_J5;Mwiq za^TPjH+OG#-bIc7os*-ZgTubv_BJ-wmKLTs$1(hGoHfT$``wPP6x>oyK}8*AqLFE1 zXAcwX69p%$u=&2dyY1}2yt$dNp@D(Eo}RwGkrB9{zU$x$9^7SkN-7%Kdd6lJ+o6J8 z0OkPtdsuUqz3mQdYfE!eV?%viU82M2{+FJiF=XA!9^jw7?W%6}wZlGYTszyH))rf5 zb+om~wm)m@;DO)YI5JtJe9hW9w_hc~j{xmqi#|CgrL zHa!Dlux7v4>A=ww?(B~JI~CQ`)wQ&A^eGFOH;+QIecNssdZ?2ZHWvib(5RDuh%b}>C8y?y;dBO?#T$0jDm$Hqq=4iEPC_H=f%G}hNvSCkgUB&4Kf z<`xu}0l2ZbrLCj0yQinOx2I3|t+&5_aA@QqV5g^NXJ@9!hJ3(11tT56#5~Bo?BR0T$rDmotd2)qf89+c6GE0 zn(7`TB&TKN7M7G(*3>l#S}FLz;2?KsWO!uw;po`t#N_nM{QT1L((7~nP4Udrl7Mq@c#J8 z(`T#Co&&>^mB)`CEicZ_OpcF@Q7!Z&1HQ1dvKp3ah3fkUhDXLgd2(uUdJ51B3(L!o zpFUk(eg5Lb^JiogQat+C(&GH|&l{XA?QSj-R+4KWjkp;u*yN1oN{n<;2)fQd(wCp%5PS>+T;Ig4xLAZ!^<#bBi!Kc`^aj zy;xscfAwl(Z5=W^TZIHm3-c7g#29}#DK#Ufpajle-z1;{48qx|*ML4uw+!wf``X&Z z#%r>^v__Ti3?fhrbKqcXD3K2h7L`@PgIe0VAi?lM*nWBjZnL=f`0>iqXHebx#>T7H z8)W?v5Ih41up)J(=}G?Ba6$_8fs%^q8u&m*XU~98g;QVvwukS4{TFL%uU>uhn!HLC zdAqR=Gf-auipBZa>50*yxTMtkS@2?bAwm#Vgb~LPH8b$s<;N?l&wyfW{q^gQUcZJG z)`dI>opEuVKQ{v<#wDhtXXX?XvsJZ?O|6{>BFcj>bQYJNJXxjoUwifXqmN#_e!af2 zz7Ah_{uDwWqUNS2M~CmmQx5V9Aw+Fsb1StYb)%^d?!N-~mm5@qSFc}f0G@KNN|m_C zhZZKshHl3uCZ}iS<`=WjW0L@p)Ia#};W#*$Tlk=ZHE8hlEA9qt0P0%`pz?!!WHho! zdRA^xNja2=ECO%{0Qv}h8hy`R!2BQ$;$;0P5N!D|Y`~v^6Aed1-HpGOngKf^3ql3( zq+WQ^_~gtiH24HIe7W{|W1X|HOxa&sqvUBQg8mfrf9>Y&n7HJ$jGV$^WRhBVawj5r zi-84%?+RRC9eNYnVAh!D%<2Y>p`|&He#jpRyAg@5GX?A;i&nx5TROU+zL9Z+{{q4X z{`c}F_5U;|Zi9O87W349rjUowc1GTbyC+0Y##YrJ3wL(I1IEUtW)~J={-^LCI50wB zeFFjXQm8v&2+T~5@<#@PL$5_dM#tVmCd@0Ok=!I`>+b7=_)~B}*dOjg!+(vlo+>i` za*aj+VhB+T?TPoU3U1ViJWqEGe(5s~0AtL3lBg02$zdGz?z~Qvk@r{iy`h`Xl{4=vwLB z2Qs7}8yA*U)z&w*baeL8TsAoa5rAQZrofjkUUFXK0(@oV@zNsIAOGQSe>d7Bw2QZ* z!2n{pxCB1f(9%kMaQNW_;9&(C$Io6M3FCA18Is_WmVb!*4|0jZ1}u@e0N9BvnKp3|**ig8y)^ud7Yq>Ej!83EivS0yRDtEFNA(RT$L$>mB$^8- z6SFAcOUuiT9xbC9Z&d)Ae+PRzTALcq`2~fAN8U+D;b-NQ&_veQNSeQGYiVgmE`S4@A`#a%wY0W&wzszm1Wf|4 zfu4%iCSaf_P~RreO^uF@4D$#3`+Gavn(L}7%EE5O#3rR@<`p3ZQA~S!x_dg>+gmsS zriE$!5vHKkd3c1jHREKI8Tlhxi2lCr&emphQl&+a$iit^`NicAP|CZzXam;Wi6%$D zY59hlvI_{%S`80@jp5-TGQjkG-plXlY8BMi0z5xDF(o6rpt!ucQ2^ScKUHLH5I8#8 zJK9@YsSwnqP#d~YBnR->-$yBQ(>|=Rrjjkn%Z^71DK4+5X%ry;_4f@7^r6%1>gWIy z=+y+xLQQsbbyDVfdb+y1x;pqBZEY>+1gqHM{G9vA>A7GZg%lZ4op! z*45V3){)vb^$p;J(?sh3TvJ<9^PrL~F3io!;3p+Q_UeY_w(jnpzP|omw8>rFoup&4 zjR<~hs;jH1t*)wm@Blb!N!?rEsv*^1RPrlWs6Hn%E#+Q9TwzI7ZBr{+=w8zQ1=Ubz zXGa@|w=^}>*F1PoT?qtYRiyIcs`B!R(lP+%W~QemC&tCxDJpwVN4p28wyzt6JK8#1 z5j_IZ_`J5dx}u_-1xR^$WhMQothBVGxVWewHz$jq&c7EQ6CD*<46`-2f;be`iN==O z`V$n?*ic_bVaiImWxum!WdJKA1^+0_&&kP5=O-t`MFTXVth%TvS9U0yZlnGbCW+rX(jO#NP#U#Eom={Oeb*06{||4b(<}!%Cd; zKUP*%RaUYkr6nbWMFn{|*_oO5(^L6;(7l%!9~T>a`*!5bh-={_j0yc4dXBn!_)>E{ zg|1}Fic3mL%gbS(;zB6vB_z(uOiNEqNlK)!pd5AU){Se|uU@@!C6s^patJCW3RZnn zV;x+qvb>}S92fosp^FRh^K$ZXaM_378Mla0x*x{zt71f+23SjrXw;SbX?3`0N=V9ah-(y>&oTOOP4Pbe#lor z!L)w|26#AJrK}k6Iik5t&Sn3%?Q?dWnQE!A#Is7lVT@ z7L=Biqj^RU0=A?ezkrjID$3{Yvp*-C-~}B z*zNK~-?OKW5Y9UgmLTsbQik$P{y>2wW#o8rvNAH#vOGmq9rHaWT>QeL?#9N)$3@?Y zxEky$3SDqTId8xTm&*}lxIzSWOxdSit_S2c|~P)Z4;YAK38ui^4a(4s(eO_ zfwb=d%lRi)OoE1g8=oS=}l$l*ni0oRJpOqRfEiENM#D5nP7sHo0 zM}iS&M1P`6chfT4HuV8L~8~{%1vLagLmvjI^{Qk=PU` zlA977$v1onaWPns^Q$O;Ka_+0fXCR8*m;z>@_6 zDI)!|j5Pg0N)mjCa=5>XNy$Mr05j^}U|ywXWMOyED+~p!qP7lw8)^Fq^-@JiK^_{E zm67Af5}7yBfaZ&FMgJu(Lt!~;pHafPhNjkgkNe%^7to830F4sLdS{2asY6d9@@Gd4QDj}<&tg5D_j>#8hTzbY9wk~eL(dosNH7K3!bozs;tEHi;tV9(4 zA+LZ>c?BL%PEHo|CHTM~4g_i(^*_LEwY2q3tacqZ6LR-{5pp=F(-voFs9#%4Lq%Ch zQBg@zS&5_gJ>;O8kdy$l44{cR0r!}Tnr`2<-#sMeehIxcq4xFk^bZXV=x#$iC~=j) zQc+Zbbrls9d1p82{dI7lUr$?8T~&oB6P2%& zz=AU6L7pdz&=QlBgTXkejM{%{YU>-D@7#AHAS$h(vQ~IuMb!oC`r9-?T3JO!SsCB) z3D^2bfhQ*|0mVtnDe#qm_)}Fi3}p>Xtacyuk4!0|mmL9SPhFj8smp8$`gerLegB( zEnihs=3@@K1$^*AWNJ}GEuGn+Aw!GUwoOA_4LVn%>Vn1O#dxp4w-{m!aRN`r7#5>S z%#!U7UAUDFcY&KW30hF}1p-ZgDk^Z~86G3|5sg~79Uc%Hv9d*7QB_k%pKoYlwte>z z-^kQL>Tc-dnmK}B8`V_+4I2}=OlB`SzW*yPQw@-Acl&Gbmeyk5iJ!2T}~E z{h4N7F>wiLp0Wm9!vYJuJq`y>`9~yX2}^TrJ$jnz-zsHjI+Ky6pub8;ic5f^vB_$;*ucBpWVS}Zc>w!Z@j-7Dx47?u0&nYagd{9$US5sZZmI9neGg80POakIW z`ZaQ_Jc0xP!c$PwG1=*G==e#j^W4vRVj~xP{Z4XLehE0JLMw;Hf?9?n{SG{E4P@3p zSwWFHq$&bMO~=&M_4GMfgRx1Zo5xFRT8_CI2I||4b~>N-3%zkYJnZ_-$cXSzEST8E z97C-+U3~*R9eqQ~y+^%6BV%Ik#v~-(i@hCj$1>r{~m+r9hG_=nw1O2Y`axF9PzI_g#odp~!(qU#Yi-^;fW)ALFz zDoS#aVs77ImvXI@4jpy#3BD1VmWzI+G$$qQ_MJGElV`1P%H7ldN>p+-`k3O(dw1{L zWe?_ADW{6ObocP`y%Z6jo?lXummYs7Dw^fz?UeWS@e8>gla^apkeM8N8*eV=+3O)9Wb&d*Luf(NKK5pdp9m6GcP~)KHA>2 z%>44|rWQJo86l&eu%`>PH0rA#pjR!-$sj4IB6F!3dBw%~S!pTB>1;}&xmqKxNj2!D zi_wZ=C|6!l0;H)~>|CLldRsGY2aQdLy{ZaK8W0>+#kraHv)T8BW*S&4;O5@m*(PWv zjlT2UR?6&RIh(%Y;tzt3Fdj^#pW7W|0+HuJ-eW^ znhp)yJF!2&owXBp*8lG8ADf=vnz7S`O+RKdZJnL$y%Hlny?b}}4o=Krq=fnJ?8MeO zrn3uE%h8FM*~KTT&p9ucm(1GAMgj&Bd6j_ofo|H0JAKwDi^ktapPAdI5OM?z}! zygK>@?4ivqEwQ8CZfR*@Zf<67#_F>s(%Y>ptt>39EG;a|SWn^aRzPThBc|+q*3`wq z66j4#0RVpV(b_4=LK;dyTttHTJGG6tB)TJ2tWx!iP0Y+GxS1(d&L+g{d-ij7hXe#N z_lsD0uF0+R#w$tVh4V)6X zP;{{LlAyvU|Ao!0(BJkQEF~)|Cx`bH6_ltO5c#(}R70ZlS9YnwLiIg!ASiA=ai6uFQY$#1Bv`y7ey38>*;LMLi0*nDcZ4vMV_oQdVjh1 z6erpuskiJmm1Zh$K?R6^Kv&M=!QIhENK3I6RTj!$(neiI799~lWn}O^{&2a<+>qhD zk)!u9!uwTT4wz*Cfq0a7hsFny%i)rjY;Tp8qEJ{KZTi829KE!#f2=YzdPBQPIU@hN zoIH>Amqd=pyr+%K8!85FG@|5FR=-+P7uw{Z8R7Ca!5|}p=1S_lgg8g^9Yhr+|G@@U zYpN(KDDrq{s-amlnUr55{To|QZH!I?-99A^GWaWA=(t9nR9{l%|3G(aIeFM_VAI(w zXd~@kA`xOVJv=_Mgbn2i)*%>&k4=z~pNB_AusK@5%zt&2LsyS4*VhsfQ_?c9sYNct zXc@C*%*N?l`r+jK^3&C4PmxQp2*Y4_d}54@mrTwsVsE#Ky&YZMynM-a3@GSe#)gv8 zKRhxqi+TPE)&PK+#*PY`*wIn;;{gLRI<@ZH+C5EUcSDxn;Kgae)3;0d(CnI5ai|Zph;A%k0NP zc4|EXSg~P23I?%`AdlW*LqZ;{v3kSiQdq){PSCwShxH!bEz#9CJPQ3RvSq^#T&RC) zWMkMxhW{7aUHB&wJ6rr)4w9F-siB_sHl%TNHC3c__%FTxGQ1yYDBv285r!D9&m4F= zhkV9}*xK3K@4~0ePHX)0jH!vfu8tONf2u0DveCHx0S?N;PxRu8tE)H>+r+>EqZ8Dm zj{t4Ux5NLw*xT*gu^su*$VguYw_Y_>Rpc8Qy>MNm3N-kjjKIYWfyO&vH${l;$9DF+ z?Cfm;YGrPWoT>}HaV1w$1h0q(eBq)&!&*|3D^7&bL&%?K1s1X1xziTJZFbt|gE0Q> zhNcZobrp4t3m`P=AHAL+IJpwPu@(ykD!3P-2qG|P5|fnRigU%@inGBB`p48%RB>+u zNht|YP+_=?sDw~J4(PlyF*W5_ytgzbrhhXsG|+`~xFxDk?Z^RuibF#mWpCu!!Wl6) zNzA%ZKfEx)q8}^Ux1OKx+IkAVr{X((;bSFm>-n+t*7Gx~t>@=rBUe^-#W49*wNA{i zn+x7e{qWkt%s5{Xo@AT_!sphvR6OWQM1*lJ`|zy%@T~dpY^bVnX8z(9fnQTUygs0G kDcL&WvLSqKeM`lIzJStY;luOMhv(A|&lgosT^OVP2kwoZIsgCw delta 10924 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 From 4aa1b329276410803268849cf57e5b92ec08df8a Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Mon, 25 Aug 2025 17:39:12 +0200 Subject: [PATCH 61/61] path default config for png file instead of jpg cloud type texture. Implement big step small step approach like in skybolt --- config/base/scene/simple_desktop.json | 2 +- .../shaders/csp-atmosphere.frag | 114 +++++++++++------- 2 files changed, 69 insertions(+), 47 deletions(-) diff --git a/config/base/scene/simple_desktop.json b/config/base/scene/simple_desktop.json index 15f203d09..9cf4e0a3e 100644 --- a/config/base/scene/simple_desktop.json +++ b/config/base/scene/simple_desktop.json @@ -744,7 +744,7 @@ "Earth": { "cloudTexture": "../share/resources/textures/earth-clouds.jpg", "limbLuminanceTexture": "../share/resources/textures/earthLimbLuminance.tif", - "cloudTypeTexture": "../share/resources/textures/cloudTop.jpg", + "cloudTypeTexture": "../share/resources/textures/cloudTop.png", "topAltitude": 80000, "bottomAltitude": -100, "model": "Bruneton", diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 700ed9560..36f800d3d 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -665,7 +665,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o float skipped_distance = 0; // assuming the sun is infinitely far away, one phase calculation is enough because only single scattering is used - float phase = cloudPhase(sunDir, -rayDir); + float phase = henyeyGreenstein(sunDir, -rayDir, .99); vec3 atmo_transmittance; vec3 atmo_inscattering; @@ -680,12 +680,17 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o vec2 density_struct = getCloudDensity(rayOrigin + rayDir * interval.x, rayOrigin); float start_density = density_struct.x; bool in_cloud = start_density > 0; + bool encounter_cloud = false; float in_cloud_counter = 0; float last_scatter_coefficient = start_density * BASE_DENSITY * uCloudDensityMultiplier; int samples_taken = 0; float maximum_density = 0; float model_density = density_struct.y; + float quality_multiplier = 1 / CLOUD_QUALITY; + float small_step = 200 / interval_length; + float big_step = 1000 / interval_length; + //===== BEGIN OF RAY MARCHING LOOP ====== while(progress < 1 && samples_taken < MAXIMUM_SAMPLES && path_transmittance.r > .001){ @@ -697,53 +702,63 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o // Skipping regions that are guaranteed to be free of clouds - bool skipped = false; - if(!in_cloud && false){ - float freeDistance = CumuloNimbusFreeDistance(position, rayDir, t_now, interval.y); - if(freeDistance > 0){ - skipped_distance += freeDistance; - progress += freeDistance / interval_length; - skipped = true; - } - } - float distance_in_interval = t_now - interval.x; - - // step size is increased when transmittance is low - float low_transmittance_multiplier = remap(path_transmittance.r, .5, 0, 1, 3); - low_transmittance_multiplier = remap(t_now, 0, HD_CLOSE_DISTANCE, 1, low_transmittance_multiplier); - - // step size is increased when many samples have been taken already - float samples_taken_multiplier = remap(float(samples_taken) / MAXIMUM_SAMPLES, 0, 1, 1, 10); - // step size is decreased when the interval is short - float short_domain_multiplier = remap(interval_length, 0, HD_CLOSE_DISTANCE, .1, 1); - short_domain_multiplier = remap(t_now, 0, MID_DISTANCE, short_domain_multiplier, 1); - - float close_to_camera_multiplier = remap(t_now, 0, HD_CLOSE_DISTANCE, .02, 1); - //close_to_camera_multiplier = 1; - - float near_cloud_multiplier = remap(model_density, .5 * uCloudCutoff, uCloudCutoff, 1, .2); - near_cloud_multiplier = remap(t_now, 0, HD_CLOSE_DISTANCE, near_cloud_multiplier, 1); - near_cloud_multiplier = remap(path_transmittance.r, 1, 0.2, near_cloud_multiplier, 1); - - float jitter_multiplier = remap(hash33(position).x, 0, 1, 1 - JITTER_INTENSITY * .5, 1 + JITTER_INTENSITY * .5); - jitter_multiplier = SAMPLE_JITTER ? remap(t_now, -100000, FAR_DISTANCE, 1, jitter_multiplier) : 1; - - float quality_multiplier = 1 / CLOUD_QUALITY; - - // there are two parameterized intervals with different functions for the step size as a function of distance from camera - // Note that discontinuities in this function are a VERY BAD idea and give weird artifacts - float step = CLOSE_STEP; - float relevant_distance = remap(t_now, 0, 200000, distance_in_interval, distance_in_interval * .5 + t_now * .5); - relevant_distance = distance_in_interval; - if(relevant_distance < MID_DISTANCE){ - step = remap(relevant_distance, 0, MID_DISTANCE, CLOSE_STEP, MID_STEP); + //bool skipped = false; + //if(!in_cloud && false){ + // float freeDistance = CumuloNimbusFreeDistance(position, rayDir, t_now, interval.y); + // if(freeDistance > 0){ + // skipped_distance += freeDistance; + // progress += freeDistance / interval_length; + // skipped = true; + // } + //} + //float distance_in_interval = t_now - interval.x; + // + //// step size is increased when transmittance is low + //float low_transmittance_multiplier = remap(path_transmittance.r, .5, 0, 1, 3); + //low_transmittance_multiplier = remap(t_now, 0, HD_CLOSE_DISTANCE, 1, low_transmittance_multiplier); +// + //// step size is increased when many samples have been taken already + //float samples_taken_multiplier = remap(float(samples_taken) / MAXIMUM_SAMPLES, 0, 1, 1, 10); + //// step size is decreased when the interval is short + //float short_domain_multiplier = remap(interval_length, 0, HD_CLOSE_DISTANCE, .1, 1); + //short_domain_multiplier = remap(t_now, 0, MID_DISTANCE, short_domain_multiplier, 1); +// + //float close_to_camera_multiplier = remap(t_now, 0, HD_CLOSE_DISTANCE, .02, 1); + ////close_to_camera_multiplier = 1; + // + //float near_cloud_multiplier = remap(model_density, .5 * uCloudCutoff, uCloudCutoff, 1, .2); + //near_cloud_multiplier = remap(t_now, 0, HD_CLOSE_DISTANCE, near_cloud_multiplier, 1); + //near_cloud_multiplier = remap(path_transmittance.r, 1, 0.2, near_cloud_multiplier, 1); +// + //float jitter_multiplier = remap(hash33(position).x, 0, 1, 1 - JITTER_INTENSITY * .5, 1 + JITTER_INTENSITY * .5); + //jitter_multiplier = SAMPLE_JITTER ? remap(t_now, -100000, FAR_DISTANCE, 1, jitter_multiplier) : 1; + // +// + //// there are two parameterized intervals with different functions for the step size as a function of distance from camera + //// Note that discontinuities in this function are a VERY BAD idea and give weird artifacts + //float step = CLOSE_STEP; + //float relevant_distance = remap(t_now, 0, 200000, distance_in_interval, distance_in_interval * .5 + t_now * .5); + //relevant_distance = distance_in_interval; + //if(relevant_distance < MID_DISTANCE){ + // step = remap(relevant_distance, 0, MID_DISTANCE, CLOSE_STEP, MID_STEP); + //}else{ + // step = remap(relevant_distance, MID_DISTANCE, FAR_DISTANCE, MID_STEP, FAR_STEP); + //} + //step = min(step, interval_length / 20); + //step /= interval_length; + //progress += step * low_transmittance_multiplier * samples_taken_multiplier * short_domain_multiplier * near_cloud_multiplier * jitter_multiplier * close_to_camera_multiplier * quality_multiplier; + + float step_size = 0; + if(in_cloud || encounter_cloud){ + float jitter_multiplier = remap(hash33(position).x, 0, 1, 1 - JITTER_INTENSITY * .5, 1 + JITTER_INTENSITY * .5); + float close_up_multiplier = remap(t_now, 0, MID_DISTANCE, .1, 1); + step_size = small_step* jitter_multiplier * close_up_multiplier; }else{ - step = remap(relevant_distance, MID_DISTANCE, FAR_DISTANCE, MID_STEP, FAR_STEP); + step_size = min(big_step, .02 * quality_multiplier); } - step = min(step, interval_length / 20); - step /= interval_length; - progress += step * low_transmittance_multiplier * samples_taken_multiplier * short_domain_multiplier * near_cloud_multiplier * jitter_multiplier * close_to_camera_multiplier * quality_multiplier; - + step_size = step_size * quality_multiplier; + progress += step_size; + progress = clamp(progress, 0, 1); t_now = remap(progress, 0, 1, interval.x, interval.y); float dist = t_now - t_last; @@ -766,6 +781,12 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o local_incoming = vec3(144809.5,129443.421875,127098.6484375) * incoming_transmittance; if(local_density > 0){ + if(!encounter_cloud){ + encounter_cloud = true; + progress -= step_size; + continue; + } + //===== INSIDE CLOUD ===== //return vec4(10000, 0, 0, 1); if(!in_cloud){ @@ -809,6 +830,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o }else{ //===== NOT INSIDE CLOUD ===== in_cloud = false; + encounter_cloud = false; in_cloud_counter = 0; } }
    -
    Cloud High Frequencies repetition scale
    +
    Cloud HF wave length
    diff --git a/plugins/csp-atmospheres/gui/js/csp-atmospheres.js b/plugins/csp-atmospheres/gui/js/csp-atmospheres.js index 11c7e4da1..f4eedd2bd 100644 --- a/plugins/csp-atmospheres/gui/js/csp-atmospheres.js +++ b/plugins/csp-atmospheres/gui/js/csp-atmospheres.js @@ -21,6 +21,12 @@ init() { CosmoScout.gui.initSlider("atmosphere.setCloudAltitude", 0, 10000, 100, [2000]); CosmoScout.gui.initSlider("atmosphere.setWaterLevel", -5000, 5000, 20, [0]); + CosmoScout.gui.initSlider("atmosphere.setCloudDensityMultiplier", .1, 10, .1, [1]); + CosmoScout.gui.initSlider("atmosphere.setCloudAbsorption", 0, 1, .01, [0]); + CosmoScout.gui.initSlider("atmosphere.setCloudCoverageExponent", .1, 5, .1, [1]); + CosmoScout.gui.initSlider("atmosphere.setCloudCutoff", 0, 1, .01, [.1]); + CosmoScout.gui.initSlider("atmosphere.setCloudLFRepetitionScale", 100, 50000, 10, [5000]); + CosmoScout.gui.initSlider("atmosphere.setCloudHFRepetitionScale", 100, 20000, 10, [768]); } } diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index 678b1fe21..cf5fc7ace 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -386,7 +386,7 @@ float INFINITY = 1 / 0.; // heights between which clouds appear float CUMULONIMBUS_START_HEIGHT = 1500; float CUMULONIMBUS_END_HEIGHT = 5000; -float COVERAGE_EXPONENT = .5; +uniform float uCoverageExponent = .5; float CLOUD_BASE_FRACTION = 0.; // cloud types are remapped from [0,1] so that all values above this become 1 @@ -407,9 +407,10 @@ float LF_END_DISTANCE = 2000000; // parameter for converting cloud density in [0, 1] to density along path in 1/meter // Source: I made it up -float DENSITY_MULTIPLIER = 2e-3; +float BASE_DENSITY = 2e-3; +uniform float uCloudDensityMultiplier = 1; // how much light gets absorbed relative to being scattered -float ABSORBED_FRACTION = 0.; +uniform float uCloudAbsorption = 0.; // parameter for tuning the intensity of the (not physically based) multiscattering approximation float MS_INTENSITY = .2; @@ -423,40 +424,43 @@ vec3 CLOUD_COLOR = vec3(1.); float MAXIMUM_DIST_BETWEEN_SAMPLES = 250; // adaptive step size parameters + +float HD_CLOSE_DISTANCE = 30000; float CLOSE_STEP = 50; -float MID_STEP = 200; +float MID_STEP = 100; float FAR_STEP = 500; float MID_DISTANCE = 50000; float FAR_DISTANCE = 200000; -int MAXIMUM_SAMPLES = 400; -float CLOUD_CUTOFF = .1; +int MAXIMUM_SAMPLES = 512; +uniform float uCloudCutoff = .1; bool SAMPLE_JITTER = true; -float JITTER_INTENSITY = .9; +float JITTER_INTENSITY = .5; bool SECONDARY_RAYS = true; + +uniform float uCloudLFRepetitionScale = 5000; +uniform float uCloudHFRepetitionScale = 768; // get the cloud type at these texture coordinates // adds high frequency noises to the values from the cloud texture to replace coarse // bilinear interpolation artifacts with smaller artifacts that are harder to notice // returns the noises alongside the result vec4 GetLocalCloudType(vec2 texCoords){ - float density = remap(textureLod(uCloudTexture, texCoords, 0).r, 0, CLOUD_COVER_MAX, 0, 1); - vec4 noiseSample = textureLod(uNoiseTexture2D, texCoords * 100, 0); + vec4 noiseSample = textureLod(uNoiseTexture2D, texCoords * 30, 0); // map noises from [0, 1] to [-.5, .5] - float worleyNoise = noiseSample.b - .5; - float perlinNoise = noiseSample.r - .5; + float worleyNoise = noiseSample.b; + float perlinNoise = noiseSample.g; // only the fringes of the clouds should be broken up, the cores should not become noisy - float noiseWeight = remap(density, .7, 0, 0, 1); - float allWeight = remap(density, .2, .1, 1, 0); - float cloudType = clamp(allWeight * remap(density + noiseWeight * (worleyNoise + perlinNoise), 0., 1., -.5, 1.), 0., 0.99); - return vec4(cloudType, noiseSample); + float cloudType = worleyNoise + perlinNoise; + return vec4(remap(cloudType, 0, 1, 0, 1), noiseSample); } // get the low-fidelity cloud prior like in the Nubis cloud system // see the 2022 SIGGRAPH talk by Andrew Schneider for what the vertical profile is for // this implementation differs from Nubis by taking only one texture for cloud type instead of combining a top and bottom type // returns cloud prior, low and high frequency modes -vec3 GetVerticalProfile(vec3 position){ +vec4 GetVerticalProfile(vec3 position){ vec2 lngLat = getLngLat(position); vec2 texCoords = vec2(lngLat.x / (2 * PI) + 0.5, 1.0 - lngLat.y / PI + 0.5); + float density = remap(textureLod(uCloudTexture, texCoords, 2).r, 0, CLOUD_COVER_MAX, 0, 1); vec4 hcomp_with_noise = GetLocalCloudType(texCoords); float cloudType = hcomp_with_noise.r; vec3 noiseSample = hcomp_with_noise.gba; @@ -466,12 +470,12 @@ vec3 GetVerticalProfile(vec3 position){ // "progress" in cloud from bottom to top in range 0 to 1 float height_in_cloud = remap(length(position), PLANET_RADIUS + CUMULONIMBUS_START_HEIGHT, topAltitude, 0, 1); vec4 cloudConfig = textureLod(uCloudTypeTexture, vec2(cloudType, 1-height_in_cloud), 0); - return vec3(remap(cloudConfig.r, .1, 1, 0, 1), cloudConfig.g, cloudConfig.b); + return vec4(cloudConfig.r * density * .95 / cloudConfig.a, cloudConfig.g / cloudConfig.a, cloudConfig.b / cloudConfig.a, cloudConfig.a); } // get the density of clouds at a position in 3d space vec2 getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ - vec3 cloudConfig = GetVerticalProfile(position); + vec4 cloudConfig = GetVerticalProfile(position); float cloudBase = cloudConfig.r; float erosionStrength = cloudConfig.g; float hfStrength = cloudConfig.b; @@ -479,12 +483,12 @@ vec2 getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ vec4 noise2Dl = textureLod(uNoiseTexture2D, getLngLat(position) * 1, 0); vec4 noise2D = textureLod(uNoiseTexture2D, getLngLat(position) * 5, 0); - float cloudDensity = pow(cloudBase, COVERAGE_EXPONENT); + float cloudDensity = pow(cloudBase, uCoverageExponent); float lfInfluence = cloudConfig.g; float hfInfluence = hfStrength; if(cameraDist < LF_END_DISTANCE){ - vec4 lfNoises = textureLod(uNoiseTexture, position / 5000, 0); + vec4 lfNoises = textureLod(uNoiseTexture, position / uCloudLFRepetitionScale, 0); // blend between worley and perlin noises using a noise at a different frequency to reduce repetition float lr_worley_noise = (1 - lfNoises.b) * .8 + lfNoises.r * .2; float lr_whispy_noise = lfNoises.r * .2 + lfNoises.g * .8; @@ -495,7 +499,7 @@ vec2 getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ cloudDensity = clamp(lfInfluence * blended_lf_noise - (lfInfluence - cloudDensity), 0, 1); if(high_res && cameraDist < HF_END_DISTANCE){ - vec4 hf_noises = textureLod(uNoiseTexture, position / 1000, 0); + vec4 hf_noises = textureLod(uNoiseTexture, position / uCloudHFRepetitionScale, 0); float hr_worley_noise = (1 - hf_noises.b) * .5 + lfNoises.r * .5; float hr_whispy_noise = hf_noises.b * .3 + lfNoises.g * .7; float blended_hf_noise = mix(hr_worley_noise, hr_whispy_noise, lfNoises.r); @@ -517,13 +521,13 @@ vec2 getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ float h = length(position) - PLANET_RADIUS; float height_factor = exp(-h / 8000); - return vec2(cloudDensity > CLOUD_CUTOFF ? height_factor : 0, cloudDensity); + return vec2(cloudDensity > uCloudCutoff ? height_factor * cloudConfig.a : 0, cloudDensity); } // check if vertical profile is too small too allow for a cloud here bool CumuloNimbusGuaranteedFree(vec3 position){ - vec3 vertical_profile = GetVerticalProfile(position); - return vertical_profile.r < CLOUD_CUTOFF;//pow(cloudType, .2) * 1.2; + vec4 vertical_profile = GetVerticalProfile(position); + return vertical_profile.r < uCloudCutoff;//pow(cloudType, .2) * 1.2; } // calculate a cheap approximation of the maximum distance that can be safely skipped @@ -601,10 +605,15 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam float MAXIMUM_DIST_BETWEEN_SAMPLES = 1000; float interval_length = interval.y - interval.x; - float last_extinction = getCloudDensity(rayOrigin, cam_pos).x * DENSITY_MULTIPLIER * (1+ABSORBED_FRACTION); + float last_extinction = getCloudDensity(rayOrigin, cam_pos).x * BASE_DENSITY * uCloudDensityMultiplier * (1+uCloudAbsorption); vec3 position = rayOrigin; for(int i = 1; i <= samples; ++i){ + float dist_to_cam = length(rayOrigin - cam_pos); float jitter_value = SAMPLE_JITTER ? (hash33(position).x - .5) * .9 : 0; + // reduce jitter on extremely long paths to avoid transmittance turning into pure noise. Introduces some banding + jitter_value = remap(interval_length, 0, 100000, jitter_value, 0); + // stop clouds seen from below from becoming extremely dark + jitter_value = remap(i, 0, samples - 1, 0, jitter_value); // more samples in the close vicinity of the point to capture self-shadowing of smaller clouds with fewer samples float progress = pow((float(i) + jitter_value) / float(samples), 2); float t_now = remap(progress, 0, 1, interval.x, interval.y); @@ -615,8 +624,8 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam if(!CumuloNimbusGuaranteedFree(position)){ float local_density = getCloudDensity(position, cam_pos, false).x; - float scatter_coefficient = local_density * DENSITY_MULTIPLIER; - float extinction = scatter_coefficient * (1+ABSORBED_FRACTION); + float scatter_coefficient = local_density * BASE_DENSITY * uCloudDensityMultiplier; + float extinction = scatter_coefficient * (1+uCloudAbsorption); float clamped_dist = clamp(dist, 0, MAXIMUM_DIST_BETWEEN_SAMPLES); float extinction_along_segment = exp(-(extinction + last_extinction) * .5 * clamped_dist); path_transmittance *= extinction_along_segment; @@ -662,7 +671,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o float start_density = density_struct.x; bool in_cloud = start_density > 0; float in_cloud_counter = 0; - float last_scatter_coefficient = start_density * DENSITY_MULTIPLIER; + float last_scatter_coefficient = start_density * BASE_DENSITY * uCloudDensityMultiplier; int samples_taken = 0; float maximum_density = 0; float model_density = density_struct.y; @@ -676,9 +685,10 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o //===== BEGIN OF STEP SIZE CONTROL ===== + // Skipping regions that are guaranteed to be free of clouds bool skipped = false; - if(!in_cloud){ + if(!in_cloud && t_now > HD_CLOSE_DISTANCE){ float freeDistance = CumuloNimbusFreeDistance(position, rayDir, t_now, interval.y); if(freeDistance > 0){ skipped_distance += freeDistance; @@ -690,20 +700,23 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o // step size is increased when transmittance is low float low_transmittance_multiplier = remap(path_transmittance.r, .5, 0, 1, 3); - low_transmittance_multiplier = remap(t_now, 0, 30000, 1, low_transmittance_multiplier); + low_transmittance_multiplier = remap(t_now, 0, HD_CLOSE_DISTANCE, 1, low_transmittance_multiplier); // step size is increased when many samples have been taken already float samples_taken_multiplier = remap(float(samples_taken) / MAXIMUM_SAMPLES, 0, 1, 1, 10); // step size is decreased when the interval is short - float short_domain_multiplier = remap(interval_length, 0, 30000, .1, 1); + float short_domain_multiplier = remap(interval_length, 0, HD_CLOSE_DISTANCE, .1, 1); short_domain_multiplier = remap(t_now, 0, MID_DISTANCE, short_domain_multiplier, 1); + + float close_to_camera_multiplier = remap(t_now, 0, HD_CLOSE_DISTANCE, .02, 1); + //close_to_camera_multiplier = 1; - float near_cloud_multiplier = remap(model_density, .5 * CLOUD_CUTOFF, CLOUD_CUTOFF, 1, .2); - near_cloud_multiplier = remap(t_now, 0, 30000, near_cloud_multiplier, 1); - near_cloud_multiplier = in_cloud ? 1 : near_cloud_multiplier; + float near_cloud_multiplier = remap(model_density, .5 * uCloudCutoff, uCloudCutoff, 1, .2); + near_cloud_multiplier = remap(t_now, 0, HD_CLOSE_DISTANCE, near_cloud_multiplier, 1); + near_cloud_multiplier = remap(path_transmittance.r, 1, 0.2, near_cloud_multiplier, 1); float jitter_multiplier = remap(hash33(position).x, 0, 1, 1 - JITTER_INTENSITY * .5, 1 + JITTER_INTENSITY * .5); - jitter_multiplier = SAMPLE_JITTER ? jitter_multiplier : 1; + jitter_multiplier = SAMPLE_JITTER ? remap(t_now, -100000, MID_DISTANCE, 1, jitter_multiplier) : 1; // there are two parameterized intervals with different functions for the step size as a function of distance from camera // Note that discontinuities in this function are a VERY BAD idea and give weird artifacts @@ -717,7 +730,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o } step = min(step, interval_length / 20); step /= interval_length; - progress += step * low_transmittance_multiplier * samples_taken_multiplier * short_domain_multiplier * near_cloud_multiplier * jitter_multiplier; + progress += step * low_transmittance_multiplier * samples_taken_multiplier * short_domain_multiplier * near_cloud_multiplier * jitter_multiplier * close_to_camera_multiplier; progress = clamp(progress, 0, 1); t_now = remap(progress, 0, 1, interval.x, interval.y); @@ -732,7 +745,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o float local_density = density_struct.x; model_density = density_struct.y; maximum_density = clamp(max(maximum_density, local_density), 0, 1); - scatter_coefficient = local_density * DENSITY_MULTIPLIER; + scatter_coefficient = local_density * BASE_DENSITY * uCloudDensityMultiplier; // the light available at that point vec3 incoming_transmittance = vec3(1); vec3 local_incoming = GetSkyLuminance(position, sunDir, sunDir, incoming_transmittance); @@ -758,7 +771,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o float sdist = clamp(dist, 0, MAXIMUM_DIST_BETWEEN_SAMPLES); // extinction coefficient. // Important to use midpoint for accurate Hillaire integration trick to work - float sigma_e = (scatter_coefficient + last_scatter_coefficient) / 2 * (1 + ABSORBED_FRACTION); + float sigma_e = (scatter_coefficient + last_scatter_coefficient) / 2 * (1 + uCloudAbsorption); float transmittance_along_segment = exp(-sigma_e * sdist); vec3 direct_incoming = local_incoming; diff --git a/plugins/csp-atmospheres/src/Atmosphere.cpp b/plugins/csp-atmospheres/src/Atmosphere.cpp index dc670f93a..651ac1e79 100644 --- a/plugins/csp-atmospheres/src/Atmosphere.cpp +++ b/plugins/csp-atmospheres/src/Atmosphere.cpp @@ -309,6 +309,13 @@ void Atmosphere::createShader(ShaderType type, VistaGLSLShader& shader, Uniforms uniforms.noiseTexture = shader.GetUniformLocation("uNoiseTexture"); uniforms.noiseTexture2D = shader.GetUniformLocation("uNoiseTexture2D"); uniforms.cloudTypeTexture = shader.GetUniformLocation("uCloudTypeTexture"); + uniforms.cloudDensityMultiplier = shader.GetUniformLocation("uCloudDensityMultiplier"); + uniforms.cloudAbsorption = shader.GetUniformLocation("uCloudAbsorption"); + uniforms.coverageExponent = shader.GetUniformLocation("uCoverageExponent"); + uniforms.cloudCutoff = shader.GetUniformLocation("uCloudCutoff"); + uniforms.cloudLFRepetitionScale = shader.GetUniformLocation("uCloudLFRepetitionScale"); + uniforms.cloudHFRepetitionScale = shader.GetUniformLocation("uCloudHFRepetitionScale"); + // We bind the eclipse shadow map to texture unit 3. The color and depth buffer are bound to 0 and // 1, 2 is used for the cloud map, 3 is used for the limb luminance texture. @@ -374,6 +381,13 @@ bool Atmosphere::Do() { cs::utils::FrameStats::ScopedSamplesCounter samplesCounter("Atmosphere of " + mObjectName); if (mShaderDirty || mEclipseShadowReceiver->needsRecompilation()) { + if (mSettings.mCloudTypeTexture.has_value()) { + mCloudTypeTexture = cs::graphics::TextureLoader::loadFromFile(mSettings.mCloudTypeTexture.value()); + mCloudTypeTexture->SetWrapS(GL_CLAMP); + mCloudTypeTexture->SetWrapT(GL_CLAMP); + }else{ + mCloudTypeTexture.reset(); + } updateShaders(); mShaderDirty = false; } @@ -489,6 +503,12 @@ bool Atmosphere::Do() { mCloudTexture->Bind(GL_TEXTURE2); mAtmoShader.SetUniform(mAtmoUniforms.cloudTexture, 2); mAtmoShader.SetUniform(mAtmoUniforms.cloudAltitude, mSettings.mCloudAltitude.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudDensityMultiplier, mSettings.mCloudDensityMultiplier.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudAbsorption, mSettings.mCloudAbsorption.get()); + mAtmoShader.SetUniform(mAtmoUniforms.coverageExponent, mSettings.mCloudCoverageExponent.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudCutoff, mSettings.mCloudCutoff.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudLFRepetitionScale, mSettings.mCloudLFRepetitionScale.get()); + mAtmoShader.SetUniform(mAtmoUniforms.cloudHFRepetitionScale, mSettings.mCloudHFRepetitionScale.get()); } if (mSettings.mEnableLimbLuminance.get() && mLimbLuminanceTexture) { diff --git a/plugins/csp-atmospheres/src/Atmosphere.hpp b/plugins/csp-atmospheres/src/Atmosphere.hpp index 7699bc15a..47715ccd8 100644 --- a/plugins/csp-atmospheres/src/Atmosphere.hpp +++ b/plugins/csp-atmospheres/src/Atmosphere.hpp @@ -69,6 +69,12 @@ class Atmosphere : public IVistaOpenGLDraw { uint32_t modelViewProjectionMatrix = 0; uint32_t shadowCoordinates = 0; uint32_t noiseTexture = 0; + uint32_t cloudDensityMultiplier = 0; + uint32_t cloudAbsorption = 0; + uint32_t coverageExponent = 0; + uint32_t cloudCutoff = 0; + uint32_t cloudLFRepetitionScale = 0; + uint32_t cloudHFRepetitionScale = 0; // Only used by the panorama shader. uint32_t atmoPanoUniforms = 0; diff --git a/plugins/csp-atmospheres/src/Plugin.cpp b/plugins/csp-atmospheres/src/Plugin.cpp index c46c761fe..e59513fef 100644 --- a/plugins/csp-atmospheres/src/Plugin.cpp +++ b/plugins/csp-atmospheres/src/Plugin.cpp @@ -74,6 +74,12 @@ void from_json(nlohmann::json const& j, Plugin::Settings::Atmosphere& o) { cs::core::Settings::deserialize(j, "enableLimbLuminance", o.mEnableLimbLuminance); cs::core::Settings::deserialize(j, "limbLuminanceTexture", o.mLimbLuminanceTexture); cs::core::Settings::deserialize(j, "renderSkydome", o.mRenderSkydome); + cs::core::Settings::deserialize(j, "cloudDensityMultiplier", o.mCloudDensityMultiplier); + cs::core::Settings::deserialize(j, "cloudAbsorption", o.mCloudAbsorption); + cs::core::Settings::deserialize(j, "cloudCoverageExponent", o.mCloudCoverageExponent); + cs::core::Settings::deserialize(j, "cloudCutoff", o.mCloudCutoff); + cs::core::Settings::deserialize(j, "cloudLFRepetitionScale", o.mCloudLFRepetitionScale); + cs::core::Settings::deserialize(j, "cloudHFRepetitionScale", o.mCloudHFRepetitionScale); } void to_json(nlohmann::json& j, Plugin::Settings::Atmosphere const& o) { @@ -92,6 +98,12 @@ void to_json(nlohmann::json& j, Plugin::Settings::Atmosphere const& o) { cs::core::Settings::serialize(j, "enableLimbLuminance", o.mEnableLimbLuminance); cs::core::Settings::serialize(j, "limbLuminanceTexture", o.mLimbLuminanceTexture); cs::core::Settings::serialize(j, "renderSkydome", o.mRenderSkydome); + cs::core::Settings::serialize(j, "cloudDensityMultiplier", o.mCloudDensityMultiplier); + cs::core::Settings::serialize(j, "cloudAbsorption", o.mCloudAbsorption); + cs::core::Settings::serialize(j, "cloudCoverageExponent", o.mCloudCoverageExponent); + cs::core::Settings::serialize(j, "cloudCutoff", o.mCloudCutoff); + cs::core::Settings::serialize(j, "cloudLFRepetitionScale", o.mCloudLFRepetitionScale); + cs::core::Settings::serialize(j, "cloudHFRepetitionScale", o.mCloudHFRepetitionScale); } //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -181,14 +193,14 @@ void Plugin::init() { })); mGuiManager->getGui()->registerCallback("atmosphere.setAdvancedClouds", - "Enables or disables old cloud system. New cloud system is used if set to false", std::function([this](bool enable) { + "Enables or disables old cloud system. New cloud system is used if set to false", + std::function([this](bool enable) { if (!mActiveAtmosphere.empty()) { - auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); settings.mAdvancedClouds = enable; mAtmospheres.at(mActiveAtmosphere)->configure(settings); } - }) - ); + })); mGuiManager->getGui()->registerCallback("atmosphere.setCloudAltitude", "Higher values create a more realistic atmosphere.", std::function([this](double value) { @@ -212,6 +224,67 @@ void Plugin::init() { "Enables or disables rendering of atmospheres.", std::function([this](bool enable) { mPluginSettings->mEnable = enable; })); + mGuiManager->getGui()->registerCallback("atmosphere.setCloudDensityMultiplier", + "Set a multiplier for the cloud density", std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudDensityMultiplier = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudAbsorption", + "Set the fraction of light absorbed in interactions with the cloud medium. Real clouds " + "scatter almost all light with little absorption.", + std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudAbsorption = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudCoverageExponent", + "Exponent applied to the vertical profile before adding noises.", + std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudCoverageExponent = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudCutoff", + "Clouds will be rendered for all locations where the cloud model produces a value larger " + "than the cutoff", + std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudCutoff = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudLFRepetitionScale", + "Set the distance (in meters) that one repetition of the low frequency noise texture covers", + std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudLFRepetitionScale = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + + mGuiManager->getGui()->registerCallback("atmosphere.setCloudHFRepetitionScale", + "Set the distance (in meters) that one repetition of the high frequency noise texture covers", + std::function([this](double value) { + if (!mActiveAtmosphere.empty()) { + auto& settings = mPluginSettings->mAtmospheres.at(mActiveAtmosphere); + settings.mCloudHFRepetitionScale = static_cast(value); + mAtmospheres.at(mActiveAtmosphere)->configure(settings); + } + })); + // Load settings. onLoad(); @@ -238,6 +311,12 @@ void Plugin::deInit() { mGuiManager->getGui()->unregisterCallback("atmosphere.setAdvancedClouds"); mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudAltitude"); mGuiManager->getGui()->unregisterCallback("atmosphere.setEnableLimbLuminance"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudDensityMultiplier"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudAbsorption"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudCoverageExponent"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudCutoff"); + mGuiManager->getGui()->unregisterCallback("setCloudLFRepetitionScale"); + mGuiManager->getGui()->unregisterCallback("atmosphere.setCloudHFRepetitionScale"); mSolarSystem->pActiveObject.disconnect(mActiveObjectConnection); mAllSettings->onLoad().disconnect(mOnLoadConnection); diff --git a/plugins/csp-atmospheres/src/Plugin.hpp b/plugins/csp-atmospheres/src/Plugin.hpp index a16dff92e..92bffd206 100644 --- a/plugins/csp-atmospheres/src/Plugin.hpp +++ b/plugins/csp-atmospheres/src/Plugin.hpp @@ -56,6 +56,14 @@ class Plugin : public cs::core::PluginBase { cs::utils::DefaultProperty mAdvancedClouds{false}; std::optional mLimbLuminanceTexture; ///< Path to the limb luminance texture. + /// advanced cloud model additional parameters + cs::utils::DefaultProperty mCloudDensityMultiplier{1.f}; + cs::utils::DefaultProperty mCloudAbsorption{0.f}; + cs::utils::DefaultProperty mCloudCoverageExponent{1.f}; + cs::utils::DefaultProperty mCloudCutoff{.1f}; + cs::utils::DefaultProperty mCloudLFRepetitionScale{5000.f}; + cs::utils::DefaultProperty mCloudHFRepetitionScale{1231.f}; + /// If this is set to true, the plugin will save a fish-eye view of the sky to a file one /// the preprocessing is done. cs::utils::DefaultProperty mRenderSkydome{false}; diff --git a/plugins/csp-atmospheres/textures/cloudTop.jpg b/plugins/csp-atmospheres/textures/cloudTop.jpg deleted file mode 100644 index d4c07fbea73013f094be42b004dee0b89efd2aa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3315 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 bKiVE$m-80tdE-En$oipvy5RGfwa5PktjAeS diff --git a/plugins/csp-atmospheres/textures/cloudTop.png b/plugins/csp-atmospheres/textures/cloudTop.png new file mode 100644 index 0000000000000000000000000000000000000000..3026797ea342a294d6937de50ce67e1563eb60e0 GIT binary patch literal 21739 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 Hm*oEfHA&CK From 0668e167acfbe30ad47b076dc67b24fa2e282076 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Mon, 28 Jul 2025 08:51:31 +0200 Subject: [PATCH 58/61] add parameters for cloud type distribution --- .../shaders/csp-atmosphere.frag | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag index cf5fc7ace..e7ef32b08 100644 --- a/plugins/csp-atmospheres/shaders/csp-atmosphere.frag +++ b/plugins/csp-atmospheres/shaders/csp-atmosphere.frag @@ -389,6 +389,15 @@ float CUMULONIMBUS_END_HEIGHT = 5000; uniform float uCoverageExponent = .5; float CLOUD_BASE_FRACTION = 0.; +float CLOUD_TYPE_NOISE_WORLEY_SCALE=10; +float CLOUD_TYPE_NOISE_PERLIN_SCALE=30; + +float CLOUD_TYPE_EXPONENT = 1.; +float CLOUD_TYPE_RANGE_START = 0.; +float CLOUD_TYPE_RANGE_END = 1.; +float CLOUD_TYPE_MIN = 0.; +float CLOUD_TYPE_MAX = 1.; + // cloud types are remapped from [0,1] so that all values above this become 1 float CLOUD_COVER_MAX = .8; @@ -425,32 +434,34 @@ float MAXIMUM_DIST_BETWEEN_SAMPLES = 250; // adaptive step size parameters -float HD_CLOSE_DISTANCE = 30000; -float CLOSE_STEP = 50; +float HD_CLOSE_DISTANCE = 10000; +float CLOSE_STEP = 100; float MID_STEP = 100; float FAR_STEP = 500; float MID_DISTANCE = 50000; float FAR_DISTANCE = 200000; int MAXIMUM_SAMPLES = 512; -uniform float uCloudCutoff = .1; +uniform float uCloudCutoff = .2; bool SAMPLE_JITTER = true; -float JITTER_INTENSITY = .5; +float JITTER_INTENSITY = 0.5; +float SECONDARY_JITTER_INTENSITY=.9; bool SECONDARY_RAYS = true; uniform float uCloudLFRepetitionScale = 5000; -uniform float uCloudHFRepetitionScale = 768; +uniform float uCloudHFRepetitionScale = 1190; // get the cloud type at these texture coordinates // adds high frequency noises to the values from the cloud texture to replace coarse // bilinear interpolation artifacts with smaller artifacts that are harder to notice // returns the noises alongside the result vec4 GetLocalCloudType(vec2 texCoords){ - vec4 noiseSample = textureLod(uNoiseTexture2D, texCoords * 30, 0); + vec4 worleySample = textureLod(uNoiseTexture2D, texCoords * CLOUD_TYPE_NOISE_WORLEY_SCALE, 0); + vec4 perlinSample = textureLod(uNoiseTexture2D, texCoords * CLOUD_TYPE_NOISE_PERLIN_SCALE, 0); // map noises from [0, 1] to [-.5, .5] - float worleyNoise = noiseSample.b; - float perlinNoise = noiseSample.g; + float worleyNoise = worleySample.b; + float perlinNoise = perlinSample.g; // only the fringes of the clouds should be broken up, the cores should not become noisy - float cloudType = worleyNoise + perlinNoise; - return vec4(remap(cloudType, 0, 1, 0, 1), noiseSample); + float cloudType = worleyNoise * 0.5 + perlinNoise * .5; + return vec4(remap(cloudType, CLOUD_TYPE_RANGE_START, CLOUD_TYPE_RANGE_END, CLOUD_TYPE_MIN, CLOUD_TYPE_MAX), perlinSample); } // get the low-fidelity cloud prior like in the Nubis cloud system @@ -470,7 +481,7 @@ vec4 GetVerticalProfile(vec3 position){ // "progress" in cloud from bottom to top in range 0 to 1 float height_in_cloud = remap(length(position), PLANET_RADIUS + CUMULONIMBUS_START_HEIGHT, topAltitude, 0, 1); vec4 cloudConfig = textureLod(uCloudTypeTexture, vec2(cloudType, 1-height_in_cloud), 0); - return vec4(cloudConfig.r * density * .95 / cloudConfig.a, cloudConfig.g / cloudConfig.a, cloudConfig.b / cloudConfig.a, cloudConfig.a); + return vec4(cloudConfig.r * density * .95, cloudConfig.g, cloudConfig.b, cloudConfig.a); } // get the density of clouds at a position in 3d space @@ -527,7 +538,7 @@ vec2 getCumuloNimbusDensity(vec3 position, vec3 cam_pos, bool high_res = true){ // check if vertical profile is too small too allow for a cloud here bool CumuloNimbusGuaranteedFree(vec3 position){ vec4 vertical_profile = GetVerticalProfile(position); - return vertical_profile.r < uCloudCutoff;//pow(cloudType, .2) * 1.2; + return vertical_profile.r < .01;//pow(cloudType, .2) * 1.2; } // calculate a cheap approximation of the maximum distance that can be safely skipped @@ -535,7 +546,7 @@ float CumuloNimbusFreeDistance(vec3 position, vec3 dir, float dist_from_camera, if(!CumuloNimbusGuaranteedFree(position)){ return 0; }else{ - int num_samples = 10; + int num_samples = 20; float dist_to_cover = interval_end - dist_from_camera; // further away from the camera, slight flickering of small clouds matters less float base_step = remap(dist_from_camera, 0, FAR_DISTANCE, 100, 1000); @@ -596,7 +607,7 @@ float henyeyGreenstein(vec3 r1, vec3 r2, float g){ } // ray marching the transmittance through the cloud field. No adaptive step size used here -float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam_pos, int samples=10){ +float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam_pos, int samples=10, bool jitter=true){ if(interval.y < 0){ return 1.; } @@ -609,9 +620,9 @@ float raymarchTransmittance(vec3 rayOrigin, vec3 rayDir, vec2 interval, vec3 cam vec3 position = rayOrigin; for(int i = 1; i <= samples; ++i){ float dist_to_cam = length(rayOrigin - cam_pos); - float jitter_value = SAMPLE_JITTER ? (hash33(position).x - .5) * .9 : 0; + float jitter_value = SAMPLE_JITTER && jitter ? (hash33(position).x - .5) * SECONDARY_JITTER_INTENSITY : 0; // reduce jitter on extremely long paths to avoid transmittance turning into pure noise. Introduces some banding - jitter_value = remap(interval_length, 0, 100000, jitter_value, 0); + jitter_value = remap(interval_length, 0, 500000, jitter_value, 0); // stop clouds seen from below from becoming extremely dark jitter_value = remap(i, 0, samples - 1, 0, jitter_value); // more samples in the close vicinity of the point to capture self-shadowing of smaller clouds with fewer samples @@ -688,7 +699,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o // Skipping regions that are guaranteed to be free of clouds bool skipped = false; - if(!in_cloud && t_now > HD_CLOSE_DISTANCE){ + if(!in_cloud && false){ float freeDistance = CumuloNimbusFreeDistance(position, rayDir, t_now, interval.y); if(freeDistance > 0){ skipped_distance += freeDistance; @@ -716,7 +727,7 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o near_cloud_multiplier = remap(path_transmittance.r, 1, 0.2, near_cloud_multiplier, 1); float jitter_multiplier = remap(hash33(position).x, 0, 1, 1 - JITTER_INTENSITY * .5, 1 + JITTER_INTENSITY * .5); - jitter_multiplier = SAMPLE_JITTER ? remap(t_now, -100000, MID_DISTANCE, 1, jitter_multiplier) : 1; + jitter_multiplier = SAMPLE_JITTER ? remap(t_now, -100000, FAR_DISTANCE, 1, jitter_multiplier) : 1; // there are two parameterized intervals with different functions for the step size as a function of distance from camera // Note that discontinuities in this function are a VERY BAD idea and give weird artifacts @@ -753,7 +764,6 @@ vec4 raymarchInterval(vec3 rayOrigin, vec3 rayDir, vec3 sunDir, vec2 interval, o // the transmittance from the atmosphere model seems fine though local_incoming = vec3(144809.5,129443.421875,127098.6484375) * incoming_transmittance; - if(local_density > 0){ //===== INSIDE CLOUD ===== //return vec4(10000, 0, 0, 1); @@ -1099,8 +1109,8 @@ float getCloudShadow(vec3 rayOrigin, vec3 rayDir) { vec2 topIntersections = intersectSphere(rayOrigin, rayDir, topAltitude); vec2 lowIntersections = intersectSphere(rayOrigin, rayDir, topAltitude - thickness); vec2 interval = vec2(lowIntersections.y, topIntersections.y); - int transmittance_samples = int(remap(interval.y - interval.x, 10000, 100000, 10, 30)); - float transmittance = raymarchTransmittance(rayOrigin, rayDir, interval, rayOrigin, transmittance_samples); + int transmittance_samples = int(remap(interval.y - interval.x, 10000, 100000, 50, 100)); + float transmittance = raymarchTransmittance(rayOrigin, rayDir, interval, rayOrigin, transmittance_samples, false); //float transmittance = clamp(raymarchingResult.a, .01, 1.); return transmittance; #endif From f2c6638d38e7937a9717bc859c8f67c4172e4565 Mon Sep 17 00:00:00 2001 From: Daniel Schenk Date: Mon, 28 Jul 2025 11:30:54 +0200 Subject: [PATCH 59/61] update documentation --- docs/advanced_cloud_model.md | 6 +- docs/img/banner_advanced_clouds.png | Bin 0 -> 243864 bytes .../gui/atmospheres_settings.html | 61 +++++++++-- .../csp-atmospheres/gui/js/csp-atmospheres.js | 8 ++ .../shaders/csp-atmosphere.frag | 35 +++--- plugins/csp-atmospheres/src/Atmosphere.cpp | 17 +++ plugins/csp-atmospheres/src/Atmosphere.hpp | 9 ++ plugins/csp-atmospheres/src/Plugin.cpp | 101 +++++++++++++++++- plugins/csp-atmospheres/src/Plugin.hpp | 8 ++ plugins/csp-atmospheres/textures/cloudTop.png | Bin 21739 -> 23757 bytes .../csp-atmospheres/textures/cloudTop2.xcf | Bin 81588 -> 81644 bytes 11 files changed, 221 insertions(+), 24 deletions(-) create mode 100644 docs/img/banner_advanced_clouds.png diff --git a/docs/advanced_cloud_model.md b/docs/advanced_cloud_model.md index aa5342a92..1b6e33ddc 100644 --- a/docs/advanced_cloud_model.md +++ b/docs/advanced_cloud_model.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: CC-BY-4.0 -->

    - +

    # Advanced Cloud model @@ -20,6 +20,8 @@ The advanced cloud model is a new addition to the atmospheres plug-in drawing he The texture is sampled depending on cloud type (U) and height in the cloud layer (V). The cloud type by default is calculated from the conventional cloud texture (+ some 2D noise and scaling), but you could also easily modify the shader code to read the cloud type directly from some texture. +Use .png for cloud type textures for proper alpha channel support! The alpha channel can be used as a multiplier for the density of the clouds, for example to model fog or cirrus clouds. + The channels of the texture represent 1. The base density of the cloud. Unlike in Andrew Schneider's work, a single texture has to suffice for this because the cloud bottoms aren't as relevant for this system's main use case, generating views from space. In the shader code, the cloud type is remapped so that all values greater than `CLOUD_COVER_MAX` get assigned the maximum cloud type. This helps produce nice clean cloud tops for very large cloud formations. 2. Influence strength of low-frequency noises. @@ -29,6 +31,8 @@ All channels can be fine-tuned for specific scenarios. Currently the system is c All noises are subject to a LOD system so that high-frequency noises are only sampled when they need to be. If you are changing the noise blending, you might also consider changing the LOD interval constants. +The sample jitter and quality multiplier can be set through the gui and web api. + ## References ### talks by Andrew Schneider at the SIGGRAPH advances in real-time rendering workshop [2015](https://advances.realtimerendering.com/s2015/The%20Real-time%20Volumetric%20Cloudscapes%20of%20Horizon%20-%20Zero%20Dawn%20-%20ARTR.pdf) diff --git a/docs/img/banner_advanced_clouds.png b/docs/img/banner_advanced_clouds.png new file mode 100644 index 0000000000000000000000000000000000000000..6980303543f150507cceb31841d6f0b36231144f GIT binary patch literal 243864 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Ν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

    +wjJ_mN)U`pNuZvsZ1Iz5JBYx~XbybLHbs!*~ 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 M07*qoM6N<$f**GDi~s-t literal 0 HcmV?d00001 diff --git a/plugins/csp-atmospheres/gui/atmospheres_settings.html b/plugins/csp-atmospheres/gui/atmospheres_settings.html index 8f39afc1f..af6633294 100644 --- a/plugins/csp-atmospheres/gui/atmospheres_settings.html +++ b/plugins/csp-atmospheres/gui/atmospheres_settings.html @@ -70,6 +70,27 @@