From 0d487b0d7b4be5a8e979ad6cf69ce6fee5428db9 Mon Sep 17 00:00:00 2001 From: agustin-littlehat Date: Wed, 20 May 2026 20:29:32 -0300 Subject: [PATCH 1/5] feat: speed up baked stable animations --- bench/README.md | 32 +- bench/animated-human-bench.mjs | 13 +- bench/animated-human.html | 38 +- bench/nonvoxel-drag-trace.mjs | 803 +++++++++++++++ bench/nonvoxel-vanilla.html | 165 +++- package.json | 1 + packages/core/src/animation/index.ts | 34 +- .../animation/optimizeAnimatedMeshPolygons.ts | 226 ++++- packages/core/src/parser/parseGltf.test.ts | 36 +- packages/core/src/parser/parseGltf.ts | 350 +++++-- .../src/parser/solidTextureSamples.test.ts | 91 ++ .../core/src/parser/solidTextureSamples.ts | 126 ++- packages/polycss/src/api/createPolyScene.ts | 267 ++++- packages/polycss/src/render/textureAtlas.ts | 925 +++++++++++++----- packages/react/src/scene/PolyMesh.tsx | 1 + packages/react/src/scene/textureAtlas.tsx | 336 ++++++- packages/vue/src/scene/PolyMesh.ts | 1 + packages/vue/src/scene/textureAtlas.ts | 336 ++++++- .../components/VanillaScene/VanillaScene.tsx | 2 +- 19 files changed, 3367 insertions(+), 416 deletions(-) create mode 100644 bench/nonvoxel-drag-trace.mjs create mode 100644 packages/core/src/parser/solidTextureSamples.test.ts diff --git a/bench/README.md b/bench/README.md index dfc44e46..e27b9560 100644 --- a/bench/README.md +++ b/bench/README.md @@ -17,11 +17,13 @@ contributors to verify perf claims and catch render regressions. pnpm bench:serve # static server on :4400 with an index page pnpm bench:perf # build bundles + run all 4 renderers × 5 scenarios pnpm bench:animated-human # build bundles + run the animated human run bench +pnpm bench:nonvoxel-drag-trace # build bundles + trace a Playwright drag orbit on teapot pnpm bench:lossy # compare lossless / previous lossy / auto lossy counts pnpm bench:visual # screenshot diff against bench/baselines/*.png pnpm bench:visual --record # capture new baselines (after intentional renderer changes) pnpm bench:build # just rebuild the bench bundles (rarely needed alone) node bench/nonvoxel-rotation-bench.mjs # non-voxel vanilla rotation probe +node bench/nonvoxel-drag-trace.mjs --label teapot-drag # pointer-drag trace, no auto-rotate node bench/nonvoxel-frame-buckets.mjs --no-trace # non-voxel rAF cadence buckets node bench/nonvoxel-visual-compare.mjs # non-voxel variant visual parity ``` @@ -38,6 +40,7 @@ node bench/lossy-optimizer-bench.mjs --json bench/results/lossy-optimizer.json node bench/lossy-optimizer-bench.mjs --models ducky,shark,bicycle node bench/perf-visual.mjs --mesh chicken --tolerance 0.005 node bench/nonvoxel-rotation-bench.mjs --models teapot,bicycle --variants baseline,order-tile4 --run-order round-robin +node bench/nonvoxel-drag-trace.mjs --mesh teapot --degrees 360 --drag-ms 1500 --label teapot-drag --frame-details --no-print-json node bench/nonvoxel-frame-buckets.mjs --mesh glb:Elephant.glb --variant baseline --no-trace node bench/nonvoxel-visual-compare.mjs --models bicycle,elephant,policecar --variants scene-split-target,scene-transform-perspective ``` @@ -141,6 +144,19 @@ tests above what the gallery's OBJs cover. Use `domOrder` for pure post-render DOM-order probes; `polygonOrder` changes the polygon array before render planning and is only for diagnostics. +`nonvoxel-drag-trace.mjs` is the focused user-input lane for the same page. +It loads a non-voxel mesh (`teapot` by default), leaves OrbitControls +auto-rotate off, performs real Playwright mouse drags until the requested +camera yaw delta is reached, and writes `bench/results/