Standard 3DGS training pipelines (gsplat, Nerfstudio, PostShot) export binary PLY files that can contain NaN / Inf coordinates, unnormalized quaternions, and degenerate needle splats. gskit validates, sanitizes, and strips corrupted rows before importing into game engines or custom compute shaders.
gskit sanitize scene.ply -o clean.ply --drop-ghosts
{
"gaussianCount": 39,
"shDegree": 0,
"errorCount": 7, // 4 non-finite positions (NaN / +Inf) + 3 zero quaternions
"warningCount": 8, // 5 dead ghosts + 3 needle splats
"ghostCount": 5,
"needleCount": 3,
"bounds": {
"min": [-1.500, -0.800, 0.000],
"max": [1.500, 0.800, 2.400]
}
}
Direct mapping to include/gskit/validation.hpp specification
| Code | Level | Trigger Condition | Sanitize Action |
|---|---|---|---|
| NON_FINITE_POSITION | Error | NaN or Inf in position (x, y, z) coordinates |
Dropped |
| ZERO_QUATERNION | Error | Quaternion norm is near zero (0, 0, 0, 0) |
Dropped |
| NON_NORMALIZED_QUATERNION | Warning | Quaternion magnitude deviates from unit length |q| != 1.0 |
Kept (Reported) |
| ANISOTROPIC_SCALE | Warning | Needle splats with exp(s_max) / exp(s_min) > 1000 |
Kept (Warning) |
| DEAD_GAUSSIAN | Warning | Residual invisible splats: sigmoid(opacity) < 1e-4 |
Dropped with --drop-ghosts |
| UNEXPECTED_SH_DEGREE | Error | Spherical Harmonics count does not match degree 0, 1, 2, or 3 | Abort file read |
GSKit ships with an official editor plugin (Plugins/GSKit/GSKit.uplugin). It exposes GSKitSanitizeCommandlet for headless automated asset ingestion in CI/CD pipelines.
FRunnable and core memory utilities without external shared library runtime dependencies.