From 66a31d4fa00cd96148cc3dae220a99b55bcca1f5 Mon Sep 17 00:00:00 2001 From: viethungle0503 Date: Thu, 2 Jul 2026 10:17:31 +0700 Subject: [PATCH 1/2] Sanitize splat rgba when packing ExtSplats to match PackedSplats clamping --- src/shaders/splatDefines.glsl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/shaders/splatDefines.glsl b/src/shaders/splatDefines.glsl index 3f082ac0..a30e4ea7 100644 --- a/src/shaders/splatDefines.glsl +++ b/src/shaders/splatDefines.glsl @@ -309,6 +309,7 @@ void packSplatExtCov( out uvec4 packedData, out uvec4 packedData2, vec3 center, vec4 rgba, vec3 xxyyzz, vec3 xyxzyz ) { + rgba = mix(clamp(rgba, 0.0, 65504.0), vec4(0.0), isnan(rgba)); packedData.x = floatBitsToUint(center.x); packedData.y = floatBitsToUint(center.y); packedData.z = floatBitsToUint(center.z); @@ -357,6 +358,7 @@ void packSplatExt( out uvec4 packedData, out uvec4 packedData2, vec3 center, vec3 scales, vec4 quaternion, vec4 rgba ) { + rgba = mix(clamp(rgba, 0.0, 65504.0), vec4(0.0), isnan(rgba)); packedData.x = floatBitsToUint(center.x); packedData.y = floatBitsToUint(center.y); packedData.z = floatBitsToUint(center.z); From a1d97a9ac76bb20579e44c9c814ef2fbdb5695f9 Mon Sep 17 00:00:00 2001 From: viethungle0503 Date: Thu, 2 Jul 2026 18:32:45 +0700 Subject: [PATCH 2/2] Move the clamp to splatVertex and only clamp RGB to positive --- src/shaders/splatDefines.glsl | 2 -- src/shaders/splatVertex.glsl | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/shaders/splatDefines.glsl b/src/shaders/splatDefines.glsl index a30e4ea7..3f082ac0 100644 --- a/src/shaders/splatDefines.glsl +++ b/src/shaders/splatDefines.glsl @@ -309,7 +309,6 @@ void packSplatExtCov( out uvec4 packedData, out uvec4 packedData2, vec3 center, vec4 rgba, vec3 xxyyzz, vec3 xyxzyz ) { - rgba = mix(clamp(rgba, 0.0, 65504.0), vec4(0.0), isnan(rgba)); packedData.x = floatBitsToUint(center.x); packedData.y = floatBitsToUint(center.y); packedData.z = floatBitsToUint(center.z); @@ -358,7 +357,6 @@ void packSplatExt( out uvec4 packedData, out uvec4 packedData2, vec3 center, vec3 scales, vec4 quaternion, vec4 rgba ) { - rgba = mix(clamp(rgba, 0.0, 65504.0), vec4(0.0), isnan(rgba)); packedData.x = floatBitsToUint(center.x); packedData.y = floatBitsToUint(center.y); packedData.z = floatBitsToUint(center.z); diff --git a/src/shaders/splatVertex.glsl b/src/shaders/splatVertex.glsl index ffbf93a0..1ad7c1b6 100644 --- a/src/shaders/splatVertex.glsl +++ b/src/shaders/splatVertex.glsl @@ -103,6 +103,10 @@ void main() { } } + // Match the reference 3DGS rasterizer (graphdeco-inria/diff-gaussian-rasterization), + // which clamps the SH-evaluated color to positive + rgba.rgb = max(rgba.rgb, vec3(0.0)); + adjustedStdDev = maxStdDev; if (rgba.a > 1.0) { // Stretch 1..2 to 1..5