nx_gsplat_fit_aniso_gate.nx
buildroot/runtime/nx_gsplat_fit_aniso_gate.nx
about
nx_gsplat_fit_aniso_gate.nx -- FITTING ON THE QUALITY PATH: the anisotropic surfel reconstructor.
WHY THIS GATE EXISTS. nx_gsplat_fit_gate proved the ISOTROPIC path can be fitted from an image. That
is the blob path. The ANISOTROPIC path is the one that renders oriented surfels -- the representation
that carries actual quality -- and until 2026-08-23 it could be rendered but never FITTED. A
reconstructor that stops where the representation starts to matter is not a reconstructor.
★★THE ACCEPT RULE IS THE ONE THE ISOTROPIC GATE'S FIRST RED TAUGHT US, AND IT IS INHERITED
DELIBERATELY. v1 of that gate demanded the error fall at EVERY step; the optimiser reached loss=0 and
correctly STOPPED, so the rule demanded the impossible and would have REWARDED A JITTERER. The rule
splits at the only boundary in the mathematics:
WHILE loss > 0 -- a residual remains, so descent must STRICTLY reduce the error.
ONCE loss == 0 -- converged, so the error must be EXACTLY CONSTANT.
Both phases must occur or the tooth is vacuous and says so, and the convergence floor is DERIVED:
an image cannot localise a gaussian finer than a pixel, so world-units-per-pixel IS the floor.
★T0 IS THE TOOTH THAT MAKES THIS GATE DIFFERENT FROM ITS ISOTROPIC SIBLING. If the fixture's surfels
happened to project to CIRCLES, the anisotropic gradient would reduce term-for-term to the isotropic
one and this gate would prove NOTHING NEW while passing everything. So the conic is measured and the
scene must be genuinely elliptical -- ca != cc or cb != 0 -- before any other tooth is believed.
license_tier: ORIGINAL expect_exit: 0
dependencies 4 imports · 0 importers
imports: nx_syscalls.nxnx_itrig.nxnx_gsplat.nxnx_gate_verdict.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 27 | const FA_NG: i64 = 6 |
| 28 | const FA_STEPS: i64 = 12 |
| 29 | const FA_CAMZ: i64 = 30 |
| 36 | const FA_RTAN: i64 = 560 |
| 37 | const FA_XSTEP: i64 = 3600 |
| 38 | const FA_ZSTEP: i64 = 1100 |
| 44 | const FA_TRIG_ONE: i64 = 4096 |
| 47 | const FA_VIEWS: i64 = 3 |
| 60 | const FA_RAYZ: i64 = 4400 |
| 63 | const FA_VIEW_YAW: i64 = 1924 |
| 64 | const FA_OVSTEP: i64 = 900 |
| 65 | const FA_PERTURB: i64 = 300 |
| 66 | const FA_TILT: i64 = 181 // 256/sqrt(2): a 45-degree surfel tilt, so the projection is an ELLIPSE |
| 67 | const FA_W64: i64 = 8 |
| 68 | const FA_BGR: i64 = 26 |
| 69 | const FA_BGG: i64 = 28 |
| 70 | const FA_BGB: i64 = 44 |
functions
| 72 | func fa_abs(v: i64) -> i64 { if v < 0 { return 0 - v } return v } called by 1: fa_poserr |
| 75 | func fa_truth(g: *i64) -> i64 |
| 91 | func fa_copy(dst: *i64, src: *i64, n: i64) -> i64 called by 1: main |
| 96 | func fa_poserr(g: *i64, t: *i64) -> i64 |
| 107 | func main() -> i64 |