feat(simulation): add Gaussian UGV runtime pipeline

This commit is contained in:
DCCONSTRUCTIONS
2026-08-28 11:51:48 +03:00
parent 30080c51aa
commit 2ccf172319
21 changed files with 4685 additions and 628 deletions
+23 -11
View File
@@ -1,6 +1,7 @@
# Simulation Worlds — product-surface brief
Status: accepted for the first working vertical slice on 2026-08-26.
Status: accepted for the first working vertical slice on 2026-08-26; visual/physical stage boundary
revised on 2026-08-27.
## Job story
@@ -57,8 +58,12 @@ Mission Core backend
DC Gaussian Pipeline
├─ TUS bundle or archive admission
├─ secure ZIP/RAR/7z normalization
─ native Vulkan SplatTransform build on Worker 006
└─ bounded collision simplification + mandatory Draco publication
─ native Vulkan SplatTransform visual build on Worker 006
Optional physical-mesh pipeline (separate job; experimental)
├─ source-mesh discovery or explicit mesh generation
├─ physics-oriented cleanup and geometry budget
└─ compressed, digest-bound publication
```
The browser never receives the Worker token. Mission Core does not embed archive-format behavior
@@ -76,13 +81,18 @@ SplatTransform GPU command through a confined filesystem spool to the pinned nat
on the RTX 4090. It does not install into or share the Python, CUDA, Triton or computer-vision
environments on the host.
Collision publication is deliberately two-stage. SplatTransform generates smooth collision and
SVO query data at a scene-type voxel size (`0.2 m` outdoors, `0.1 m` indoors/objects). The isolated
pipeline container then bounds the debug/physics mesh to a default 250,000-triangle target and
always writes `KHR_draco_mesh_compression` before the artifact digest is sealed. Simplification
controls decoded geometry cost; Draco controls transfer and stored bytes and is never treated as a
replacement for a physics mesh budget. The browser loads the result through a pinned local Draco
WASM decoder with no external decoder request.
Project processing is split at a durable product boundary. The mandatory first job builds only the
preview and streamed Gaussian assets required for visual inspection. It never generates collision
geometry, so a location can reach `ready` without paying the time, GPU-memory and storage cost of a
physical mesh.
Physical geometry is an optional second job started only after the visual world is ready. Its first
candidate source is a mesh already present in the uploaded export (for example a PLY in
`Mesh_Files`); generation from the Gaussian cloud is a fallback experiment, not the default path.
The second-stage contract, cleanup method and acceptance gates are intentionally separate from the
visual build. When that stage publishes a GLB, simplification still controls decoded physics cost
and Draco controls transfer/storage bytes; compression is not treated as a replacement for a
physics mesh budget.
Visual and collision layers retain independent X/Y/Z correction settings, while PlayCanvas world,
camera, navigation and future physics stay in the canonical Y-up coordinate system. Quality, both
@@ -105,7 +115,9 @@ Primary implementation references:
- encrypted, linked, traversing, duplicate and over-limit archive entries fail closed;
- project status is durable and reflects provider state without fabricated percentages;
- ready artifacts are imported digest-bound and served from Mission Core same-origin URLs;
- every published collision GLB is simplified to the configured budget and requires Draco;
- the mandatory build requests preview and streamed Gaussian outputs with collision disabled;
- a visual project reaches ready state without a collision artifact;
- physical mesh preparation is a separate explicit job and never blocks visual inspection;
- edit changes project metadata; delete removes both the Mission Core project and terminal provider
job;
- a ready project mounts direct PlayCanvas Engine and loads Streamed SOG with preview fallback;