BT410 5.3.52: frame rate measured properly -- the missing mech skeleton is the real gap

The pod updates every few seconds.  Measured by sampling a head window every
2s (emulator/render-bridge/headrate.py): OURS changed in 5 of 12 samples,
SHIPPED in 1 of 12.  So the reconstruction is not slower than the shipped
binary -- the emulated board is just expensive.  Caveat recorded with it:
ours was being driven by the throttle hooks while the shipped exe ignores
them and sat parked, so treat those as same-order, not a win.

What did cost us 3x was mine: BT_MECH_LOG/BT_LAUNCH_LOG write per-frame lines
and DEBUG_STREAM=cout is redirected to COM3, so every one goes through an
emulated serial port.  Turning them off took the wire from 480 to ~1480
bytes/sec.  pod_render_quiet.conf is the conf to use for timing work.

And a correction to my own earlier framing: wire bytes/sec is NOT a frame
rate.  Shipped pushes ~8900 B/s against our ~1480 and the difference is
CONTENT, not speed -- shipped submits the mech and we do not:

    OURS:    L4VIDEO.cpp wrong video resource type for object mad.skl
    SHIPPED: (no such line)

The mech's model resource is a SKELETON.  The engine's default
MakeEntityRenderables accepts only Object/Rubble and rejects anything else
with exactly that message, because skeletons are the GAME renderer's job.  So
our arena renders but the MECH IS ABSENT, and with it the cockpit interior --
one unimplemented path explaining both the missing model and the lower wire
volume.

Next brick is now precisely scoped: answer MechClassID by reading the .SKL
notation pages into a dpl_DCS hierarchy and hanging the per-node .BGF
geometry off it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-28 14:04:35 -05:00
co-authored by Claude Fable 5
parent 09192367c0
commit 15d509c8a8
6 changed files with 136 additions and 2808 deletions
+20
View File
@@ -0,0 +1,20 @@
import sys, time, subprocess
from PIL import Image
name, label = sys.argv[1], sys.argv[2]
def grab(out):
subprocess.run(["powershell","-ExecutionPolicy","Bypass","-File","grab.ps1",
"-Out",out,"-Match",name], capture_output=True)
return Image.open(out).convert("RGB")
prev = grab("hr_0.png"); changes = []
t0 = time.time()
for i in range(1, 13):
time.sleep(2)
cur = grab("hr_%d.png" % i)
pa, pb = prev.load(), cur.load(); w,h = cur.size
d = sum(1 for y in range(0,h,4) for x in range(0,w,4) if pa[x,y]!=pb[x,y])
changes.append(d)
prev = cur
moved = sum(1 for c in changes if c > 20)
print("%s: %d of %d samples (2s apart) showed change -> ~%.1f s between updates"
% (label, moved, len(changes), (len(changes)*2.0)/max(moved,1)))
print(" per-sample changed-pixel counts:", changes)