# W-078 Status status: in_progress task: 轻量化预算和导出策略 `protocol/budget.ts` now validates explicit integer budgets for triangles, vertices, index bytes, material slots, texture bytes and estimated GPU bytes. `evaluateLightweightBudget` returns every violation with limit, actual value and excess while leaving the measured usage unchanged. Browser E2E covers a mixed triangle/GPU over-budget report. `aggregateLightweightUsage` and `evaluateLightweightBudgets` now produce deterministic project, collection, object and LOD scopes. Project usage sums each source object once; collection membership is reported per collection and LOD usage is kept separate so generated levels are not double-counted. Browser E2E covers all four scope reports. `analyzeGLBExport` now runs before the UI export action and returns structured warnings/errors for summary-only or missing geometry, unevaluated modifiers, external/packed images, linked material inputs and unavailable skin remapping. When no blocking condition is present, the local exporter writes a standards- shaped GLB 2.0 binary containing hierarchy, mesh positions/normals/UVs/colors, material groups, PBR material factors and shape-key morph targets. Blender shape-key positions are converted to glTF deltas in the Z-up to Three.js/glTF basis conversion. The top-bar action downloads this local binary; browser E2E checks the GLB header and a non-zero morph delta. `exportGLB` now accepts caller-provided local asset buffers, embeds each image as a GLB buffer view, and connects it to exported PBR materials. It exports `JOINTS_0`/`WEIGHTS_0`, bone nodes, inverse bind matrices and supported object or bone animation channels for a resolved armature binding. The local test worker parses the emitted GLB JSON again; browser E2E embeds a real local PNG and verifies its byte length/signature, skin joints, MAT4 inverse-bind accessor, animation channels and skin attributes without a network fetch. The native reader now extracts the exact bytes of both legacy and list-based Blender packed images through the local asset request ABI; the packed fixture checks PNG signature, MIME and byte length without a network request. The GLB worker strictly parses the emitted JSON/BIN chunks and compares mesh attributes, embedded image byte counts/MIME, skin joints/inverse-bind MAT4s, morph targets and grouped animation paths against the source SceneIR. The browser round-trip test has no semantic mismatches. Blender-side unsupported features remain explicit export warnings.