diff --git a/features/Screen Space GI/Shaders/ScreenSpaceGI/radianceDisocc.cs.hlsl b/features/Screen Space GI/Shaders/ScreenSpaceGI/radianceDisocc.cs.hlsl index 47317a1c87..d0fc087d63 100644 --- a/features/Screen Space GI/Shaders/ScreenSpaceGI/radianceDisocc.cs.hlsl +++ b/features/Screen Space GI/Shaders/ScreenSpaceGI/radianceDisocc.cs.hlsl @@ -1,6 +1,7 @@ #include "Common/Color.hlsli" #include "Common/FrameBuffer.hlsli" #include "Common/GBuffer.hlsli" +#include "Common/Math.hlsli" #include "Common/VR.hlsli" #include "ScreenSpaceGI/common.hlsli" @@ -126,7 +127,7 @@ void readHistory( prev_ao, prev_y, prev_co_cg, prev_ambient, accum_frames, prev_gi_specular, wsum); if (wsum > 1e-2) { - float rcpWsum = rcp(wsum + 1e-10); + float rcpWsum = rcp(wsum + EPSILON_WEIGHT_SUM); # ifdef TEMPORAL_DENOISER prev_ao *= rcpWsum; prev_y *= rcpWsum; diff --git a/features/Skylighting/Shaders/Skylighting/Skylighting.hlsli b/features/Skylighting/Shaders/Skylighting/Skylighting.hlsli index 4f87aa279e..6801e763ac 100644 --- a/features/Skylighting/Shaders/Skylighting/Skylighting.hlsli +++ b/features/Skylighting/Shaders/Skylighting/Skylighting.hlsli @@ -111,7 +111,7 @@ namespace Skylighting wsum += w; } - return SphericalHarmonics::Scale(sum, rcp(wsum + 1e-10)); + return SphericalHarmonics::Scale(sum, rcp(wsum + EPSILON_WEIGHT_SUM)); } sh2 sampleNoBias(SharedData::SkylightingSettings params, Texture3D probeArray, float3 positionMS) @@ -157,7 +157,7 @@ namespace Skylighting wsum += w; } - return SphericalHarmonics::Scale(sum, rcp(wsum + 1e-10)); + return SphericalHarmonics::Scale(sum, rcp(wsum + EPSILON_WEIGHT_SUM)); } } diff --git a/features/Terrain Variation/Shaders/TerrainVariation/TerrainVariation.hlsli b/features/Terrain Variation/Shaders/TerrainVariation/TerrainVariation.hlsli index 284ce09687..1a34cd0df6 100644 --- a/features/Terrain Variation/Shaders/TerrainVariation/TerrainVariation.hlsli +++ b/features/Terrain Variation/Shaders/TerrainVariation/TerrainVariation.hlsli @@ -5,6 +5,7 @@ #ifndef TERRAIN_VARIATION_HLSLI #define TERRAIN_VARIATION_HLSLI +#include "Common/Math.hlsli" #include "Common/Random.hlsli" #include "Common/SharedData.hlsli" @@ -62,7 +63,7 @@ inline float3 NormalizeWeights(float3 weights) // Skip expensive division if already normalized if (abs(weightSum - 1.0) < 0.01) return weights; - float rcpWeightSum = rcp(max(weightSum, 1e-6)); + float rcpWeightSum = rcp(max(weightSum, EPSILON_DIVISION)); return weights * rcpWeightSum; } diff --git a/package/Shaders/Common/Glints/Glints2023.hlsli b/package/Shaders/Common/Glints/Glints2023.hlsli index ba469e4151..c21ff666ad 100644 --- a/package/Shaders/Common/Glints/Glints2023.hlsli +++ b/package/Shaders/Common/Glints/Glints2023.hlsli @@ -439,7 +439,7 @@ namespace Glints // ACCURATE PIXEL FOOTPRINT ELLIPSE float2 ellipseMajor, ellipseMinor; GetGradientEllipse(duvdx, duvdy, ellipseMajor, ellipseMinor); - float ellipseRatio = length(ellipseMajor) / (length(ellipseMinor) + 1e-8); + float ellipseRatio = length(ellipseMajor) / (length(ellipseMinor) + EPSILON_GLINTS); // SHARED GLINT NDF VALUES float halfScreenSpaceScaler = screenSpaceScale * 0.5; diff --git a/package/Shaders/Common/Math.hlsli b/package/Shaders/Common/Math.hlsli index 3790a32715..22cea86ce6 100644 --- a/package/Shaders/Common/Math.hlsli +++ b/package/Shaders/Common/Math.hlsli @@ -1,9 +1,11 @@ #ifndef __MATH_DEPENDENCY_HLSL__ #define __MATH_DEPENDENCY_HLSL__ -#define EPSILON_SSS_ALBEDO 1e-3f // For albedo clamping in SSS calculations -#define EPSILON_DOT_CLAMP 1e-5f // For dot product clamping -#define EPSILON_DIVISION 1e-6f // For division to avoid division by zero +#define EPSILON_SSS_ALBEDO 1e-3f // For albedo clamping in SSS calculations +#define EPSILON_DOT_CLAMP 1e-5f // For dot product clamping +#define EPSILON_DIVISION 1e-6f // For division to avoid division by zero +#define EPSILON_GLINTS 1e-8f // For glints calculations +#define EPSILON_WEIGHT_SUM 1e-10f // For weight normalization namespace Math { diff --git a/package/Shaders/Common/PBRMath.hlsli b/package/Shaders/Common/PBRMath.hlsli index 3b0b3726c5..ea476ce663 100644 --- a/package/Shaders/Common/PBRMath.hlsli +++ b/package/Shaders/Common/PBRMath.hlsli @@ -119,7 +119,7 @@ namespace PBR inline float HairGaussian(float B, float Theta) { // Guard against division by zero: clamp B to a minimum value - float B_safe = max(B, 1e-6); + float B_safe = max(B, EPSILON_DIVISION); return exp(-0.5 * Theta * Theta / (B_safe * B_safe)) / (sqrt(Math::TAU) * B_safe); }