sceneforge results

/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d
← back to the capture

lab47d

session /ihub/homedirs/svs_ald/sudhir/real2sim/captures/session_20260902_184520
work /ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d

Video

lab47d_compare.jpg0.1 MB ↓
lab47d_compare.mp45.3 MB ↓
lab47d_flythrough.jpg0.1 MB ↓
lab47d_flythrough.mp48.4 MB ↓
lab47d_holds.jpg0.1 MB ↓
lab47d_holds.mp42.4 MB ↓
lab47d_orbit.jpg0.1 MB ↓
lab47d_orbit.mp45.4 MB ↓
lab47d_physics.jpg0.1 MB ↓
lab47d_physics.mp42.3 MB ↓
lab47d_points_flythrough.jpg0.5 MB ↓
lab47d_points_flythrough.mp448.2 MB ↓
lab47d_sim_only.jpg0.0 MB ↓
lab47d_sim_only.mp43.1 MB ↓
lab47d_splat_only.jpg0.0 MB ↓
lab47d_splat_only.mp47.2 MB ↓
lab47d_verify_000000.png1.1 MB ↓
lab47d_verify_000008.png1.2 MB ↓
lab47d_verify_000016.png0.9 MB ↓
lab47d_verify_000024.png1.1 MB ↓
lab47d_verify_000032.png1.2 MB ↓
lab47d_verify_000040.png1.0 MB ↓

Stages

10_pose — Pose

Camera poses from unposed images (VGGT / COLMAP / GLOMAP).

How to read it. `registered` should equal `requested`. `n_models` > 1 means the capture split into disconnected pieces -- not enough overlap. A near-zero baseline means the camera barely moved.
backendcolmap
views47
baseline_recon_units9.436
points23,825
has_depthFalse
seconds126.600
matcherexhaustive
registered47
requested47
n_models1
split_warningFalse
sparse_points23,825
raw json
{
  "backend": "colmap",
  "views": 47,
  "baseline_recon_units": 9.4358,
  "points": 23825,
  "has_depth": false,
  "seconds": 126.6,
  "matcher": "exhaustive",
  "registered": 47,
  "requested": 47,
  "n_models": 1,
  "split_warning": false,
  "sparse_points": 23825
}

20_scale — Metric scale

Converts the scale-free reconstruction to metres using the D455 depth map. This is what replaces Re3Sim's ArUco marker.

How to read it. `spread` is agreement between independent per-frame estimates: <5% consistent, 5-15% loose, >15% do not trust. `baseline_m` should match the real extent of the capture.
backendcolmap
methodsparse_points
scale_m_per_unit0.284
spread0.047
verdictconsistent
frames_used1
frames_total1
baseline_m2.683
raw json
{
  "backend": "colmap",
  "method": "sparse_points",
  "scale_m_per_unit": 0.284302057399257,
  "spread": 0.04707089229306618,
  "verdict": "consistent",
  "frames_used": 1,
  "frames_total": 1,
  "baseline_m": 2.682620854988666,
  "per_frame": [
    {
      "scale": 0.284302057399257,
      "median_scale": 0.2876123905162095,
      "n": 377766,
      "rel_mad": 0.04707089229306618,
      "trusted": true,
      "method": "sparse_points"
    }
  ]
}

30_ground — Ground plane / world frame

Fits the table plane and builds a world frame with +Z up and the surface at z=0, so MuJoCo gravity and object placement mean something.

not run

40_mask — Robot mask

SAM3 text-prompted segmentation of the robot, which must be kept out of the background splat (MuJoCo renders it from the URDF).

not run

50_splat — Background splat

Gaussian splat trained on the masked images, initialised from the measured depth cloud rather than sparse SfM points.

How to read it. `eval` is on HELD-OUT views -- the honest number. Training-view PSNR only measures overfitting. `eval.depth.bias_mm` is the early warning for a wrong scale factor.
backendgsplat
ply/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/50_splat/background.ply
n_gaussians1,000,000
train_seconds180.100
peak_vram_gb1.680
iters7,000
cap_max1,000,000
sh_degree3
init_points499,986
train_views41
maskedTrue
depth_weight0.500
freespace_weight0.100
eval
n_views6
lpips0.236
psnr24.904
ssim0.820
eval.depth
bias_mm-3.250
inlier_frac_10mm0.118
mean_abs_mm226.016
median_abs_mm71.727
n178,356.167
p95_abs_mm1,061.624
rms_mm495.142
valid_frac0.697
raw json
{
  "backend": "gsplat",
  "ply": "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/50_splat/background.ply",
  "n_gaussians": 1000000,
  "train_seconds": 180.1,
  "peak_vram_gb": 1.68,
  "eval": {
    "n_views": 6,
    "lpips": 0.23575166364510855,
    "psnr": 24.904295830777595,
    "ssim": 0.8196163177490234,
    "depth": {
      "bias_mm": -3.2504506431091382,
      "inlier_frac_10mm": 0.11775478648555233,
      "mean_abs_mm": 226.01587483385856,
      "median_abs_mm": 71.7267096042633,
      "n": 178356.16666666666,
      "p95_abs_mm": 1061.6236040989554,
      "rms_mm": 495.1416629953069,
      "valid_frac": 0.6967037760416667
    }
  },
  "iters": 7000,
  "cap_max": 1000000,
  "sh_degree": 3,
  "init_points": 499986,
  "train_views": 41,
  "masked": true,
  "depth_weight": 0.5,
  "freespace_weight": 0.1
}

60_mesh — Static geometry

TSDF fusion of the depth maps into a mesh with real measured thickness, plus convex parts for collision.

How to read it. `extent_m` must match the real object. MuJoCo hulls a mesh whole, so the convex parts are what make concave shapes collide right.
visual_mesh/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/static.obj
views_fused47
labelsupport
voxel_m0.006
vertices53,929
faces100,915
raw json
{
  "visual_mesh": "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/static.obj",
  "views_fused": 47,
  "label": "support",
  "seat_slab": {
    "centre": [
      -0.11397890371008124,
      0.21600000000000003,
      0.6407894736842105
    ],
    "half_extent": [
      0.17891896211005442,
      0.189,
      0.02
    ]
  },
  "voxel_m": 0.006,
  "vertices": 53929,
  "faces": 100915,
  "extent_m": [
    0.5265090048542318,
    0.5025527209781968,
    0.762
  ],
  "collision_parts": [
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_000.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_001.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_002.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_003.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_004.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_005.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_006.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_007.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_008.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_009.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_010.obj",
    "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/60_mesh/collision/part_011.obj"
  ]
}

70_objects — Objects

Per-object mesh and physics. Mass is hand-tuned; inertia follows from the mesh at that mass.

How to read it. `extents_m` is the reality check. A 4 mm slab means one-sided observation (the RoboSnap failure); anything over ~60 cm means the views are not aligning and the poses are too imprecise.
objectsize (cm)masspartswatertight
green cup8.9 x 9.9 x 18.40.15 kg20True
small bottle4.1 x 4.6 x 9.90.3 kg2False
raw json
{
  "objects": [
    {
      "name": "green cup",
      "slug": "green_cup",
      "mesh": "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/mesh.obj",
      "collision_parts": [
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull00.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull01.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull02.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull03.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull04.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull05.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull06.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull07.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull08.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull09.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull10.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull11.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull12.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull13.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull14.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull15.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull16.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull17.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull18.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/green_cup/collision/hull19.obj"
      ],
      "position": [
        -0.03080668825155623,
        0.24856851330194288,
        0.7526797142191165
      ],
      "mass_kg": 0.15,
      "friction": 1.0,
      "com": [
        0.003434958095481648,
        -0.0038943318169243077,
        -0.00634717730837861
      ],
      "inertia": [
        [
          0.0003447181281606203,
          9.74920956245587e-07,
          2.4686969554354103e-05
        ],
        [
          9.74920956245587e-07,
          0.0003517431479083333,
          -5.910083414771122e-06
        ],
        [
          2.4686969554354103e-05,
          -5.910083414771122e-06,
          5.5104752736585506e-05
        ]
      ],
      "extents_m": [
        0.08882357213689121,
        0.09855806849014094,
        0.1840844780768887
      ],
      "watertight": true,
      "single_view_extents_m": [
        0.08882357213689121,
        0.09855806849014093,
        0.1840844780768887
      ],
      "merge_inflation": 0.8621416382802122,
      "n_points": 305223,
      "mode": "recgen_generative",
      "source_view": 17
    },
    {
      "name": "small bottle",
      "slug": "small_bottle",
      "mesh": "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/small_bottle/mesh.obj",
      "collision_parts": [
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/small_bottle/collision/hull00.obj",
        "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/70_objects/small_bottle/collision/hull01.obj"
      ],
      "position": [
        -0.18420681626122623,
        0.12239262478409875,
        0.6961272348965897
      ],
      "mass_kg": 0.3,
      "friction": 1.0,
      "com": [
        0.0221289125207711,
        0.0012342997851460024,
        0.06953201447952542
      ],
      "inertia": [
        [
          -0.0015060243067724374,
          7.915131349379669e-05,
          0.00044312847888503004
        ],
        [
          7.915131349379669e-05,
          -0.001577941076319601,
          5.269313615364336e-05
        ],
        [
          0.00044312847888503004,
          5.269313615364336e-05,
          -0.000143864138258935
        ]
      ],
      "extents_m": [
        0.041315582020125946,
        0.045543733639537703,
        0.09921177171000928
      ],
      "watertight": false,
      "single_view_extents_m": [
        0.041315582020125946,
        0.045543733639537703,
        0.09921177171000928
      ],
      "merge_inflation": 0.9922704264361828,
      "n_points": 72913,
      "mode": "recgen_generative",
      "source_view": 4
    }
  ]
}
_mask.png0.0 MB ↓
_mask.png0.0 MB ↓
_rgb.png1.2 MB ↓
_rgb.png1.1 MB ↓
overlay.png1.0 MB ↓
overlay.png0.9 MB ↓

80_scene — MuJoCo scene

Assembles the MJCF: static geometry, objects, cameras at the real capture poses, robot.

How to read it. `compiles` must be true. The splat is deliberately absent -- MuJoCo cannot render gaussians; it is composited in stage 90.
xml/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/80_scene/scene.xml
bodies4
geoms16
nq14
cameras47
objects2
collision_parts9
compilesTrue
raw json
{
  "xml": "/ihub/homedirs/svs_ald/sudhir/real2sim/work/lab47d/80_scene/scene.xml",
  "bodies": 4,
  "geoms": 16,
  "nq": 14,
  "cameras": 47,
  "objects": 2,
  "collision_parts": 9,
  "compiles": true
}

90_verify — Verification vs real photographs

Renders the sim, composites the splat behind it, and diffs against the actual photograph from that pose. The end-to-end check.

How to read it. This catches the silent failures: wrong scale, rotated background, objects floating. Compare held-out views against training views -- a large gap means the capture was too sparse.
views6
splatTrue
summary
frame20.000
lpips0.321
psnr19.951
sim_pixel_frac0.058
ssim0.740
raw json
{
  "summary": {
    "frame": 20.0,
    "lpips": 0.3206431542833646,
    "psnr": 19.950926324695157,
    "sim_pixel_frac": 0.058202473958333334,
    "ssim": 0.7399264772733053
  },
  "per_view": [
    {
      "psnr": 22.22838088926459,
      "ssim": 0.7991556525230408,
      "lpips": 0.25035372376441956,
      "frame": 0,
      "sim_pixel_frac": 0.0533046875
    },
    {
      "psnr": 18.621362931447724,
      "ssim": 0.6574383974075317,
      "lpips": 0.369310200214386,
      "frame": 8,
      "sim_pixel_frac": 0.048078125
    },
    {
      "psnr": 19.676231944132013,
      "ssim": 0.7342517971992493,
      "lpips": 0.3948727548122406,
      "frame": 16,
      "sim_pixel_frac": 0.06287890625
    },
    {
      "psnr": 21.547707742283304,
      "ssim": 0.844158947467804,
      "lpips": 0.1992785483598709,
      "frame": 24,
      "sim_pixel_frac": 0.067234375
    },
    {
      "psnr": 18.096622028043853,
      "ssim": 0.6713008284568787,
      "lpips": 0.35140836238861084,
      "frame": 32,
      "sim_pixel_frac": 0.046171875
    },
    {
      "psnr": 19.53525241299945,
      "ssim": 0.7332532405853271,
      "lpips": 0.3586353361606598,
      "frame": 40,
      "sim_pixel_frac": 0.071546875
    }
  ],
  "views": 6,
  "splat": true
}
000000.png1.1 MB ↓
000008.png1.2 MB ↓
000016.png0.9 MB ↓
000024.png1.1 MB ↓
000032.png1.2 MB ↓
000040.png1.0 MB ↓