日本語 · English
The full flow from building a mesh terrain out of a sim scene to letting a walker (quadruped / humanoid) walk across it and rendering it headless into a GIF. Meshing the terrain (TSDF) and the walking GIF are GPU-free (they run under py -3.11). Only the SuGaR path, which inserts 3DGS training, requires a GPU (.venv-gsplat).
fullseye3d)import fullseye3d as f3d
# Mesh an undulating terrain (default method="tsdf" = no GPU, no spikes, clean)
mesh = f3d.Scene("rolling").mesh() # -> Mesh(.export()/.preview())
mesh.export("rolling.ply")
# Render, headless, the walker crossing the terrain as a GIF (no GPU)
f3d.walk_gif("out/go2.gif", walker="go2", terrain="rolling", gait="trot")
unified.ops)| op | Role | GPU |
|---|---|---|
tsdf_mesh |
TSDF-fuse the sim’s exact depth into a watertight mesh (no spikes) | Not required |
sugar_mesh |
Surface-align 3DGS → extract mesh via Poisson (depth-supervised) | Required |
render_walk_gif |
Walk the walker over the terrain and render a headless GIF | Not required |
animate_mesh |
Play the ground-truth mesh in a desktop window along a qpos trajectory (can composite a static terrain) | Not required |
import unified as u
u.ops["tsdf_mesh"]("scene.xml", "out/mesh", n_views=48, voxel=0.02, radius=3.0,
elevation_deg=30, lookat=(0, 0, 0.15))
u.ops["render_walk_gif"]("out/walk.gif", walker="go2", terrain="rolling", gait="trot",
travel=2.2, ground_follow=True)
world_render.render_walk_gif)Because Open3D’s OffscreenRenderer does not support EGL headless rendering on Windows, the walker and terrain are composited into a single MuJoCo model with MjSpec (resolving <include> and mesh references too) and drawn with MuJoCo’s own offscreen renderer. No physics simulation is run; the qpos is simply pushed through mj_forward.
Main arguments:
walker / terrain: registry names (go2 / anymal / spot / evis, rolling / terrain …)gait="trot" (quadruped) or motion="walk" (for a walker that carries a motion npz)travel: when >0, advance root x to cross the terrain (camera follow + ground contact by default)ground_follow: use mj_ray to sample the terrain height and lift root z so the feet stay in contact (auto-ON when travel>0)orbit_deg / elevation / distance / lookat: orbiting cameraThe trot of the quadrupeds (go2 / anymal / spot) crosses the terrain with clean ground contact.
rolling: a self-contained XML pillar grid (smooth multi-frequency height, coloured by height). Continuous undulation, well-suited to walking.terrain: flat floor + low domes (older, simpler).walk motion (free2) of evis (humanoid) has a sideways-toppling trajectory and does not look like upright walking (this comes from the data itself).
The quadrupeds are clean. Upright humanoid walking is a separate problem for the torque-twin line of work.tsdf_mesh) is recommended.