Skip to content

Visualization Controls

Once the visualizer is running, you can interact with the simulation using the following controls:

Camera

  • Rotate: Left-click + drag OR Ctrl (CMD on Mac) + Arrow keys
  • Pan: Right-click + drag OR Arrow keys
  • Zoom: Scroll wheel
  • Track Body: Automatically follow a specific body (via the "Camera Options" menu)
  • Split Screen: Compare two batches side-by-side (via the "Camera Options" menu, requires ≥2 batches)
  • Field of View: Adjust camera FOV (via the "Camera Options" menu)
  • Copy View Link: Click the "Copy view link" button (in the "Camera Options" menu) to copy a URL that encodes the current camera, playback time, focused batch, and visualization toggles -- opening it restores that view.

Timeline

  • Step Forward/Backward: Alt + Arrow Right / Arrow Left
  • Seek: Click on the timeline bar (Alt + click also pauses)
  • Play/Pause: Space or Click the Play button
  • Record: R or Click the Record button (select WEBM or, if your browser supports recording it, MP4 via the dropdown). Recording seeks to the start, plays exactly one loop at the current playback speed, then automatically stops and downloads the file.
  • Screenshot: S or Click the camera button next to Record to save the current frame as a PNG.
  • Playback Speed: Adjust speed (0.1x to 5x) via the dropdown next to the timeline
  • Previous/Next Episode: [ / ] or the |◀ / ▶| buttons. Only shown for a scene that declares episodes; boundaries are also ticked on the timeline bar.

Rendering Many Batches

Each batch gets its own patch of world — its own terrain mesh, axes, arrows and point clouds — which is fine for a handful and hopeless for the hundreds of parallel environments an RL run produces.

Render All Batches (in "Body Options") switches between drawing every batch and drawing only the focused one. Above 32 batches, focused-only is the default, and a batch's per-batch scene objects are built the first time you focus it — so a 256-env scene loads as fast as a single-env one, and batches you never look at cost nothing. Split-screen's two batches stay drawn either way.

Batch Selection

  • Move Selection: Shift + Arrow keys

Visualization Options

  • B: Toggle Body Visualization Mode (Mesh / Wireframe / Points)
  • A: Toggle Axes Visibility
  • G: Toggle Trajectory Trails
  • I: Toggle Smooth Interpolation (on by default; interpolates position/orientation between recorded states during playback and scrubbing instead of snapping to the nearest frame)
  • C: Toggle Contact Points (or, in a scene with point clouds and no contacts, Show Point Clouds)
  • V: Toggle Linear Velocity
  • W: Toggle Angular Velocity
  • F: Toggle Linear Force
  • T: Toggle Torque
  • P: Toggle Terrain Data Probe (interactive tooltip on hover)

"Show Polylines" (Body Options, shown when the scene has model.polylines) toggles planned routes and per-frame local paths. Bodies, static objects and polylines with visibleRanges hide themselves while the playhead is outside their time ranges.

You can also customize terrain colors, colormaps, and toggle surface/wireframe/normals from the "Terrain Options" menu. The terrain's colormap legend (bottom-left) follows "Show Surface": hiding the surface hides it too.

Hover any control in the panel for a short description of what it does. With 2 or more batches, the "diff" Color Mode colors the terrain by the difference between two batches' terrains for one layer ("Diff Layer", "Diff Batch A"/"Diff Batch B").

Point Cloud and Terrain Similarity Coloring

Point-cloud bodies and terrain cells can each carry an optional per-point/per-cell feature embedding (see create_pointcloud(embedding=) / create_terrain(embedding_map=) in the JSON format). When present, clicking a point (with "Point Color Mode" already set to "similarity" in the Body Options panel) or a terrain cell (with "Data Probe" on and terrain "features" color mode already selected) recolors the whole cloud/grid by cosine similarity to the clicked location — computed entirely client-side, no backend round-trip. A colormap legend (coolwarm, [-1, 1]) appears alongside the existing terrain legend to read values off the result. Clicking without the matching mode active does nothing.

With "Link Similarity" on, a point click also recolors every other point cloud with the same number of points by its similarity to the point at the same index — useful when the clouds are one set of points with features from different models, shown side by side (e.g. one per batch in split screen). Point clouds may also ship named color layers (create_pointcloud(color_layers={"class": rgb, ...})); each name is an extra "Point Color Mode" choice.

Trajectory Trails

Toggling trails (G, or "Show Trails" in the Body Options panel) draws each body's path from the start of the simulation up to the current playback time, one line per batch in that batch's color. Useful for comparing the overall shape of two trajectories (e.g. real vs. simulated) at a glance instead of scrubbing frame by frame.

Analysis Panel

Scalars, Error Metrics and Terrain share one collapsible panel at the top-center of the screen. When more than one is available, a mode switcher lets you flip between them; if only one is available (e.g. a single-batch scene has no Error Metrics), that one is shown directly without the switcher. A scene with nothing to analyse over time (e.g. only static point clouds) has no Analysis panel at all. Clicking any of its charts seeks playback to that time.

  • Scalars: one tab per scalar defined in the model, each plotting its value over time for every batch (colored per batch, click a line to focus that batch). An "Export CSV" button on the active tab downloads its full series as time plus one column per batch, named after each batch's current display name.
  • Error Metrics: shown once a scene has 2 or more batches and a body with a trajectory. Pick a body and two batches ("Batch A" / "Batch B", defaulting to a gt/ground truth-named batch vs. a post/adapt-named one when the batch names have them) to compare — e.g. the real and simulated batches produced by merging multiple files — and it computes, over the full timeline, the Euclidean position error and the quaternion angle (orientation) error between the two batches for that body. A live readout shows the current-frame values, and the chart plots both error curves over time with a marker at the current playback position. The "Per-axis" toggle swaps the combined position error curve for the signed X/Y/Z error components (Batch A minus Batch B), useful for spotting a directional bias instead of just overall magnitude. The "Details" toggle adds a compact stats block summarizing the full timeline: position RMSE, the max position error (and when it occurs), the final-frame drift, and the orientation RMSE and max angle error. An "Export CSV" button downloads the current selection's per-frame series (time, pos_error, err_x, err_y, err_z, angle_error_deg).
  • Terrain: shown for a scene that has terrain and at least one body with a trajectory. Samples one terrain layer (Height, or any named property the terrain was authored with, e.g. friction/stiffness) under a body's path over time, one curve per batch, with a marker at the current playback position — so a divergence you spot in Error Metrics can be lined up against the terrain the body was on at that moment. Pick the layer, the body, and whether each batch is sampled along its own path or all batches along one chosen batch's path (the usual ground-truth-path comparison). An "Export CSV" button downloads the sampled series.

Body States

The collapsible "Body states" panel in the top-left lists the scene's bodies; select one to see its live position and rotation for the batch picked in the panel's own "Batch" selector. It is hidden when no body has a pose (e.g. a scene of only static point clouds). It starts collapsed when the model sets collapse; viewerDefaults.bodyStatesOpen overrides that.

Batch Legend

When a scene has 2 or more batches, a toggleable "Batches" legend appears in the bottom-right corner, listing each batch's color, index, and name. Click a row to focus that batch, or click a name to rename it in place — renames persist next to the input file(s), so they survive a reload or server restart. A viewer with no scene file to write next to (scene.show(), LiveViewer, simview render) keeps renames for the session only and says so under the legend.

Scene Info

When the scene JSON includes a model.metadata object, a read-only "Scene Info" panel appears in the GUI listing each key/value pair — e.g. the engine, checkpoint path, git commit, or CLI args a run was produced with — so a scene saved months ago is still self-describing. simview info <file> prints the same fields on the command line.