Skip to content

v1.3.1 — SDF residual weight fix (load-bearing)

Choose a tag to compare

@Archerkattri Archerkattri released this 10 Jun 20:49
· 17 commits to main since this release

Bug-fix release from an independent whole-repo review.

Fixed

  • The Gaussian-SDF residual pre-multiplied its weight in both residual() and jacobian() while the solver also applies sqrt(weight): the objective scaled as weight cubed, so the default register stack ran SDF at an effective 0.027 instead of the documented 0.3. The solver now owns the weight, applied exactly once, matching every other residual. Regression test asserts linear weight scaling in the assembled normal equations.
  • merge() and bundle fusion now normalize mixed log/linear scale conventions before concatenation (mixing a PLY-loaded splat with a from_gsplat splat no longer corrupts fused scales).
  • knn() on an empty spatial index returns empty instead of crashing, matching radius().

Honesty note: the official 3DMatch (91.5 percent) and 3DLoMatch (72.5 percent) results are unaffected (the learned pipeline does not use the SDF residual). The synthetic-recovery and splat-tool numbers in RESULTS section 5c were measured under the old weighting; they remain within all validation gates after the fix and will be re-measured in the next benchmark pass.

pip install -U splatreg