LODSelector
LODSelector describes five graphic-object levels, directly referenced or supplied by leading dependency meshes. All 48,862 selectors in the six-archive enumeration consume exactly with the counted BoneIDs array and footer: body size is 266 + 4 × sum(BoneIDs counts) + 13 × dependency count. Proven
Little-endian. All 48,862 LODSelectors across the six installed forges consume exactly with no refusals; serialized fields and counts are covered, not the runtime fade algorithm. Dependency-word size interpretation remains sampled.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 1 | u8 = 01 | ManagedObject byte | Unknown | Stored bytes; meaning is not established. |
| 0x1 | 1 | u8 | DescriptorMask | Proven | registry field of GraphicObject, an 8-bit mask. 0 (44,945), 16 (2,594), 128 (660), 1 (658) over 48,857 selectors; the same byte of a Mesh takes 0, 1, 2, 8, 16, 17, 18, 32, 64, 128. What each bit selects is not established. |
| 0x2 | 1 | u8 | Generated | Proven | GraphicObject bool; 0 in all 48,857 selectors (and all 85,577 Meshes) |
| 0x3 | 1 | u8 | VertexStride | Proven | GraphicObject bit field; 0 in all 48,857 selectors (and all 85,577 Meshes) |
| 0x4 | 4 | f32 | MaxCullingDistance | Proven | GraphicObject f32; 0.0 in all 48,857 selectors (in Meshes: 660.0 on 2,729, 820.0 on 94, 2,580.0 on 35, 100.0 on 14 of 85,577) |
| 0x8 | 4 | u32 = 0 | EstimatedMemoryUsage | Proven | GraphicObject.EstimatedMemoryUsage (u32, flags 0x02000000), the base class's last stored field after MaxCullingDistance; 0 in all 48,857 selectors |
Little-endian. All 48,862 LODSelectors across the six installed forges consume exactly with no refusals; serialized fields and counts are covered, not the runtime fade algorithm. Dependency-word size interpretation remains sampled.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 8 | u64 | LODDescriptor object id | Proven | the u64 id every embedded object starts with (kind 0x16: u64 id, u32 class id, body). |
| 0x8 | 4 | u32 = 0xA360319A | marker | Proven | the CRC-32 of LODDescriptor |
| 0xC | 10 | ref | Mesh | Proven | the level's Mesh, or none |
| 0x16 | 4 | f32 | SwitchDistance | Proven | LODDescriptor.SwitchDistance (registry): > 0 on 244,283 of 244,285 levels, up to 30,004 (USNAT) |
| 0x1A | 4 | f32 | TransitionZoneSize | Proven | LODDescriptor.TransitionZoneSize: 0.0 on all 244,285 levels |
| 0x1E | 4 | f32 | FadeTimeMultiplier | Proven | LODDescriptor.FadeTimeMultiplier: 1.0 on 103,967 of the 104,035 USNAT levels (0.0 on 62, 0.5 on 3, 3.0 on 1; 2 others) |
| 0x22 | 4 | u32 | FakeType | Proven | LODDescriptor.FakeType (enum LODDescriptor::FakeType), a u32: 0 on 238,372 of 244,285 levels, 1 on 5,913 (levels 1 to 3 only) |
| 0x26 | 1 | u8 | Optional | Proven | |
| 0x27 | 4 | u32 | ShaderLOD | Proven | LODDescriptor.ShaderLOD (enum ShaderLODLevel, u32): 0, 1 or 2; level 0: 0 on 32,069 and 1 on 16,788 of 48,857; level 3: 0 on 21,528, 2 on 16,769, 1 on 10,560 Enumerators: 0 ShaderLOD_High, 1 ShaderLOD_Low, 2 ShaderLOD_UltraLow. |
| 0x2B | 4 | u32 | BoneIDs count n | Proven | LODDescriptor.BoneIDs is an array of u32; its count: 0 to 136, > 0 on 13,424 of 244,285 levels (every one of the 48,857 selectors reads to its end with it) |
| 0x2F | 4·n | u32·n | BoneIDs | Proven | |
| 47+4n | 1 | u8 | 3B574E9D | Unknown | Unnamed bool, one on 11,536 of 244,285 measured descriptor slots. |
Little-endian. All 48,862 LODSelectors across the six installed forges consume exactly with no refusals; serialized fields and counts are covered, not the runtime fade algorithm. Dependency-word size interpretation remains sampled.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 4 | u32 | count d | Proven | 1 or 2 in the traced samples |
| 0x4 | 9d | bytes | dependencies | Proven | |
| 4+9d | 4 | u32 | count d again | Proven | must equal d |
| 8+9d | 4d | u32·d | dependency words | Observed | one u32 per dependency. |
| 8+13d | 6 | bytes | LODSelector bools | Proven | the six bool fields of the class LODSelector in the registry's order: TransitionToEmptyLOD, UseNearNullObjects, ForceNoBlend, ForceNoComputeBlendFactor, UseBlendFactorWithDefaultTransition, 0xB0CD17D3 (name not found). |
Little-endian. All 48,862 LODSelectors across the six installed forges consume exactly with no refusals; serialized fields and counts are covered, not the runtime fade algorithm. Dependency-word size interpretation remains sampled.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 1 | u8 = 0 | tag | Proven | |
| 0x1 | 8 | u64 | ClassID | Proven |
Every selector’s dependency count equals its leading-empty-slot count. All 39,250 stored dependency occurrences resolve to Mesh resources. The patch-over-base deduplicated population instead contains 24,430 selectors and 19,623 dependencies; these are different counting units. Proven · slot relationship
Across 244,310 slots, direct references include 123,716 Mesh and 238 Impostor references; four use mode four. A level is not restricted to Mesh. Every direct reference in all 244,310 stored slots is included in this classification. Proven
SwitchDistance, TransitionZoneSize, FadeTimeMultiplier, FakeType, Optional, ShaderLOD and BoneIDs are registry names checked against stored descriptors. Common switch-distance sets include (25, 60, 120, 640, 641) and (4, 8, 20, 40, 160) metres. Interpreting each distance as the end of its slot’s display interval fits the ordering, but is not a complete renderer rule. Observed Inferred
Dependency words match compiled geometry size on 12,088 of 12,681 checked ranged dependencies. The mismatches prevent treating them as authoritative buffer lengths. Observed
The exact conversion to per-instance shader data and bool hash 0x3B574E9D remain unresolved. Unknown
See also geometry LOD forms for the meshes and impostors reached by these descriptors.