Locate the tie texcoord field at i16[4]/i16[5], and rule out the (6,7) artifact

Scoring each adjacent i16 slot pair of the 16-byte tie vertex for 12-bit
fixedness over 36,501 level-0 vertices locates the fields:

  (i16[0], i16[1])    1.1%   not a texcoord
  (i16[2], i16[3])    4.8%   not a texcoord
  (i16[4], i16[5])   73.6%   <- the texcoords
  (i16[6], i16[7])   76.6%   <- the near-constant 4096/0 pair

(6,7) scores HIGHER and is not a texcoord. It is the near-constant 4096, 0 pair:
4096 is 1.0 in 12-bit fixed and 0 is zero, so both are trivially multiples of
4096. That is the constant artifact again -- a fixed pair would score 100%
anywhere. The field is (4,5), with (0,1) and (2,3) ruled out at 1.1% and 4.8%.

The first four slots span the full i16 range with 10,803 to 13,421 distinct values
each, so they are neither texcoords nor small fields.

The vertex base is confirmed to be vert_ofs alone. Adding the shader or control
region makes it worse --

  vert_ofs only                               73.6%
  bfc + vert_ofs                              69.8%
  bfc + control_count*control_size + vert_ofs  66.7%

-- so the 73.6% residual is not a mislocated base. Worth recording because
vert_ofs (3..7) numerically overlaps the shader region (5*shader_count, 5..20
quadwords), which made a combined base look plausible; measurement says the
simple one is right.

The test asserts (4,5) above 60% and (0,1)/(2,3) below 5%/15%, and names the
(6,7) artifact in its failure message so the higher-scoring pair cannot be
mistaken for the answer later.
This commit is contained in:
2026-10-13 04:30:45 +02:00
parent 35b087c882
commit 180fc27b04
3 changed files with 110 additions and 9 deletions
+12 -4
View File
@@ -260,10 +260,18 @@ Phase 1 hands over the extents; this phase works out what each one contains.
- [x] The tie **vertex element is 16 bytes**, measured over 95,612 vertices on
levels 0-2 and settled by comparison: a 12-bit-fixed texcoord hit rate of
**82.5%** at 16 bytes against 47.8% at 8 and 44.8% at 12.
- [ ] The tie **vertex fields are not named.** All eight `i16` slots span the full
range; the texcoord pair is 12-bit fixed on 82.5%, not 100%, and the
residual tracks record shape (60% to 89%), so something per-packet varies
that this reading does not capture.
- [x] The tie **texcoord field is located**: `i16[4]`/`i16[5]` of the 16-byte
element, scoring 73.6% for 12-bit fixedness over 36,501 level-0 vertices,
against 1.1% for `(0,1)` and 4.8% for `(2,3)`. The `(6,7)` pair scores
*higher* at 76.6% and is **not** a texcoord -- it is the near-constant
`4096, 0` pair, which is trivially two multiples of 4,096.
- [ ] The remaining tie vertex **fields are not named.** `i16[0..3]` span the full
`i16` range with 10,803-13,421 distinct values each, so they are neither
texcoords nor small fields; they are most likely position plus a packed
word, but that is not established. The texcoord rate is 73.6% rather than
100% and the vertex base is confirmed to be `vert_ofs` alone (adding the
shader or control region makes it worse), so the residual is not a
mislocated base.
- [~] `shrub` — class table done (48-byte entries, not 32; reading shrub at
32 still gives 231 sane-looking entries of 358, which is the hazard).
Geometry header parsed and checked field by field on all 358 spans: