Tie slots 3, 6, 7: two readings excluded, and why the LOD test stops working
Having established that i16[0..2] are positions, ran the same LOD-overlap method
across all eight slots to see whether it discriminates elsewhere. It does not,
and that is worth recording before someone reads the passing numbers as nine
confirmations:
slot same class control ratio
i16[0] 97.0% 3.0% 32x
i16[1] 96.7% 3.2% 30x
i16[2] 96.4% 6.0% 16x
i16[3] 75.3% 78.7% 1x
i16[4..7] 68-91% 52-79% 1x
Only i16[0..2] carry signal, because they are the only slots with tens of
thousands of distinct values. The rest draw from sets of 226 to 1,759 values, so
any two sets of that size overlap heavily regardless of what the field means. A
passing result from a method that has run out of discriminative power is not a
passing result.
Slot 3 excluded as a skin/joint index. It holds 201 values in 0..=254 and 50
distinct values within a single draw packet, so it is per-vertex, not per-material
-- which invites the obvious reading, since tie objects are skinned. Wrong:
mean pairwise distance, same slot-3 value 14,481
mean pairwise distance, different slot-3 value 13,795
ratio 0.95x
control: same position-x bucket 8,105
Vertices sharing a slot-3 value are marginally FARTHER apart than vertices
differing in it. The control halves the distance, so the measurement works; the
0.95x is on the wrong side of neutral, though by too little to claim much on its
own. Combined with no LOD sharing (75.3% against a 78.7% control), slot 3 is
per-vertex, uncorrelated with the geometry it sits in and with the detail level.
Recorded as not understood. A per-vertex animation phase fits the arithmetic and
is labelled a guess rather than offered as a reading.
Slots 6 and 7 are mostly not per-vertex. Distinct values per draw packet, median
over 1,804 records:
i16[0..2] 13-17 constant for the whole packet 0%
i16[4,5] 6, 4 0%
i16[6] 2 43%
i16[7] 4 34%
They take a single value across an entire packet in well over a third of records,
which matches the 91.8%/88.9% dominance of 4096 and 0. Unnamed.
So the tie element is: position, byte-sized index, texcoords, layout tag, and two
slots characterised but not named. Positions, texcoord placement, element size and
the layout selector are all asserted; the remaining three are not, and the reasons
they are not are now written down rather than left as silence.
On "is Phase 2 nearly done": 40 items closed, 9 open. The nine are the hard
ones -- collision cells blocked on the game's own code, volumes not located at
all, moby_anim ruled out but unexplained, chunk record fields unnamed. Progress
on the checklist is real but the remainder is not the easy tail.
This commit is contained in:
+7
-1
@@ -310,7 +310,13 @@ Phase 1 hands over the extents; this phase works out what each one contains.
|
||||
Within the all-zero case, `i16[3] == 0` exactly (5,851) is a third
|
||||
distribution at 62%. Three cases: `0x00/0x00`, `0x00/1..255`, and non-zero
|
||||
high byte.
|
||||
- [ ] The remaining tie vertex **fields are not named.** `i16[0..3]` span the full
|
||||
- [~] The remaining tie vertex **fields are not named**, and two readings are now
|
||||
excluded. `i16[6]`/`i16[7]` are constant across a whole draw packet in
|
||||
43%/34% of records, so they are usually per-packet rather than per-vertex.
|
||||
`i16[3]` is per-vertex (50 distinct values per packet) but **not a skin or
|
||||
joint index**: vertices sharing it are 0.95x *farther* apart than vertices
|
||||
differing in it, against a control that halves. It is also unshared across
|
||||
LODs. Recorded as not understood rather than guessed.
|
||||
`i16` range with 10,803-13,421 distinct values each. `i16[0..2]` are most
|
||||
likely position, but that is not established.
|
||||
- [~] `shrub` — class table done (48-byte entries, not 32; reading shrub at
|
||||
|
||||
Reference in New Issue
Block a user