(Case Study) / Summer 2026

SplatGround

A phone-scanned apartment becomes a graded, simulation-ready digital twin, and a Unitree G1 learns to walk in it.  RTX 4070 Super.

3D Gaussian Splatting · Isaac Sim 6.0 · Isaac Lab · OpenUSD · NuRec · PhysX · Legged Locomotion

Layer 01
Capture
  • ParticleField splat
  • Scan mesh as evidence
  • Camera trajectory
Layer 02
Physics
  • UsdPhysics colliders
  • Declared friction
  • Guide purpose
Layer 03
Semantics
  • 5 cm traversability
  • Gated spawn poses
  • Unknown stays unknown
Layer 04
Certificate
  • Scale and alignment
  • Coverage and clearance
  • Fails loudly

SplatGround converts a 3D capture into a layered USD twin that a physics engine and a reinforcement learning stack can both consume: neural rendering for appearance, derived geometry for contact, a semantics grid for task generation, and a certificate stating how far any of it can be trusted.


  • Site / 6.6 x 7.5 m apartment, ARKitScenes capture
  • Success / 3.1% zero-shot to 62.5% fine-tuned, blind 8 s march
  • Tracking / 0.25 m/s error against a 0.4 m/s command
  • Scale / 1024 parallel environments, one 12 GB consumer GPU

One capture forks into three representations and they rejoin only in the USD layer stack. Appearance runs on splats. Contact runs on mesh-derived geometry. Task generation runs on a raster grid. Nothing is shared between them except the coordinate frame and the certificate that grades all three.

A splat is a cloud of anisotropic 3D Gaussians: a radiance representation with no surface, no manifold, no contact normal. Physics engines need triangle meshes, convex hulls or signed distance fields. So the splat stays a rendering primitive, and every physical property is derived from the mesh side of the same capture.

  • /World/Capture/Splat / ParticleField3DGaussianSplat, drawn by the RTX Gaussian path, carrying the measured model-to-world basis change
  • /World/Capture/CaptureMesh / raw scan as UsdGeom.Mesh, evidence only
  • /World/Physics/Ground / heightfield-derived mesh with CollisionAPI and MeshCollisionAPI, approximation none
  • /World/Physics/Obstacles / same schemas, geometry cut from the raw scan
  • /World/Physics/DefaultMaterial / UsdShade.Material with UsdPhysics.MaterialAPI, friction 1.0, bound at physics purpose
  • /World/Physics/SensorMesh / raycast target for range sensors, no collision API, clipped 1.6 m above the floor
  • /World/Semantics / traversability, ground heights, spawn poses and clearances as splatground-namespaced attributes

Colliders are hidden by purpose rather than visibility: guide purpose keeps them out of beauty renders and one toggle away in any viewport, while physics reads neither attribute. The root sublayers semantics, physics and capture in that strength order, so derived opinions override without editing evidence. Isaac Lab consumes the root through TerrainImporterCfg at terrain_type usd.


  • 1 / Ingest splat, mesh and camera trajectory, and solve the model-to-world basis change
  • 2 / Verify metric scale against the walked camera height
  • 3 / Sample surfaces on a deterministic lattice, rasterize the 5 cm grid
  • 4 / Segment ground by slope, filter floaters by connected-component support
  • 5 / Rasterize the ground collider from observed heights, author obstacles, material and sensor mesh
  • 6 / Grade, and fail the build loudly if any check fails

Every build writes metric scale, splat alignment, floater count, coverage and per-spawn clearance into the USD root. A twin that fails any check is marked visualization-only. Six real defects were caught this way, from a floater minting standable ground in mid-air to a spawn point with 0.10 m of clearance.


The twin registers as a velocity-tracking task with three overrides: terrain imports the twin USD, resets sample the twin's own spawn poses, and command ranges fit indoor speeds. A thousand environments share one apartment, superimposed, with inter-environment collisions filtered.

Gait is pretrained on procedural terrain, then fine-tuned in the twin, where tracking reward ends higher than at the pretrain source. Every checkpoint runs a fixed evaluation matrix, each spawn against four headings, with falls plotted on the traversability grid.

  • Own-apartment capture with Polycam, splat and mesh in one pass
  • Single-file USDZ export in the NuRec layout
  • Cross-engine evaluation, PhysX and Newton on the same policy


Scenes are the scarce resource in embodied AI. A phone walk-through and twenty minutes of compute yielding a graded, simulation-ready twin makes any room a candidate training ground.