47 lines
2.8 KiB
Markdown
47 lines
2.8 KiB
Markdown
# W-077 Status
|
|
|
|
status: in_progress
|
|
task: 多级 LOD 生成、缓存和视口选择
|
|
|
|
The cache boundary is now implemented without changing the native WASM ABI:
|
|
|
|
- `buildLODCacheKey` creates a deterministic, path-safe key from object ID,
|
|
source mesh revision, modifier-stack hash, profile hash and REST/POSE state.
|
|
- IndexedDB schema v3 adds `lod_manifest`; the StorageWorker can put/get a
|
|
validated manifest and writes transferable `.mesh` bytes to OPFS
|
|
`projects/<id>/cache/lod/<cacheKey>.mesh`. Read, delete and byte-budget
|
|
pruning update `lastAccessAt` and remove the least-recently-used entries.
|
|
- `ThreeLODAdapter` selects pre-generated levels from projected pixel height,
|
|
with a configurable hysteresis band, and is updated by the viewport render
|
|
loop without rebuilding the imported scene.
|
|
- `generateLOD` evaluates every requested profile independently from the source
|
|
`.blend` in a fresh WASM module instance, returns a validated manifest and
|
|
transferable geometry, and is exposed by the React inspector. A binary
|
|
length-table container round-trips the level buffers before OPFS persistence;
|
|
the React path reads that persisted container back before installing levels
|
|
into the Three.js viewport, while preserving source transforms and materials.
|
|
- Browser E2E covers the OPFS bytes, manifest round trip, stable key and
|
|
hysteresis behavior, multi-level generation and binary geometry round trips.
|
|
|
|
The React open path now lists all `lod_manifest` rows for the project after a
|
|
fresh application load, filters them by the authoritative SceneIR revision and
|
|
object IDs, reads the OPFS `.mesh` container, validates the level mesh IDs and
|
|
installs the cached levels into the Three.js LOD adapter. Applying any native
|
|
scene command also removes manifests from older source revisions, so a stale
|
|
cache cannot be selected after a mesh or modifier edit. Browser E2E covers
|
|
generation, reload, discovery and reuse.
|
|
|
|
Pose-aware skin joints are still not exported into the LOD manifest. The native
|
|
Collapse bridge now performs one Blender BMesh collapse pass at a time, creating
|
|
a fresh heap for each pass and recalculating the quadric choice from the current
|
|
mesh state. This removes the previous WASM memory failure at intermediate cube
|
|
targets; the LOD Worker keeps per-level isolation as a general fault boundary.
|
|
An active modifier stack must now have an `EVALUATED` dependency-graph report
|
|
before LOD generation. Metadata-only and unresolved stacks return a structured
|
|
capability error rather than caching output from an implicit base mesh.
|
|
Each isolated LOD profile applies the same skin/shape-key preflight as direct
|
|
Decimate, so a valid `skinPolicy` receives native remapping while a missing or
|
|
rejecting policy cannot create a partial cache entry.
|
|
Full Blender parity still requires pose-aware skin joints and broader Blender
|
|
golden coverage, so the task stays `in_progress`.
|