Two single-environment scenes rendered by six physics engines, rasterized and
path-traced natively: Scene 1 a tilted cube dropped onto a plane, and
Scene 2 the real LeRobot bipedal platform (STL meshes, 12 DOF) holding a stance
with its built-in PD servos. This measures per-frame render/readback overhead — not the
massively-parallel multi-env workloads the GPU engines (Genesis, mjlab, Isaac, Nexus) are designed
for. Generated by examples/cube_drop/benchmark.py · site by
make_site.py.
Raster fps = per-frame loop (physics + render) with frames staying on the GPU — no full-frame readback (rows not re-measured on that basis are marked). Native-RT rows are each engine path-tracing its own scene. Not apples-to-apples across resolutions. On the RTX 5090 desktop the three portable backends (MuJoCo, mjlab, Genesis) were re-measured (median of 3, machine idle), and the Nexus raster + native-RT rows were freshly measured on the 5090 from a full source build of haixuanTao's headless-render Nexus + kiss3d (offscreen WebGPU, no display). The RT row is far faster than the laptop's because that build includes kiss3d's transform-only TLAS fast path, which drops the per-frame BLAS re-bake (242 ms/frame on the laptop → 2.2 ms here).
Nexus numbers use a patched kiss3d: its read_pixels converted pixels by
indexing uncached mapped GPU memory per byte (~99 ms/frame at 640×480); converting from a cached
row copy + reusing the staging buffer cut readback to ~5 ms (18×) — see
kiss3d #397 (readback fix),
nexus #7 (frame export) and
nexus #8 (Python ray tracing).
Isaac Sim on the desktop: Isaac Sim 5.x's Omniverse RTX
renderer crashes on driver 595.71.05 (R590/595-branch incompatibility — this box rendered fine
on driver 580 until the 2026-07-10 upgrade), so the 5.x raster/RT rows exist only on the laptop
panel; the desktop Scene-3 and Startup rows run headless physics via Isaac Lab's AppLauncher kit
experience, which skips the crashing plugins. Isaac Sim 6.0.1.0 fixes the renderer on
this driver (verified 2026-07-15: full RTX experience boots in 11 s and renders camera
pixels; separate venv at ~/rt_build/isaac6-venv, not yet paired with Isaac Lab) —
the desktop Isaac RT rows below were measured on 6.0 (render demos ported to its
convert-then-reference URDF flow); they land below the laptop's 5.x numbers — kit fights a
nonexistent second CUDA device on this box — so read them as lower bounds.
Genesis native ray tracing on the desktop runs via a from-source LuisaRender build (CUDA
backend, pip-wheel CUDA 12.9 toolchain).
Reading the ray-tracing rows: fps compares each engine's tracer at its own quality point, not equal image quality — kiss3d is a minimal path tracer (simple PBR, analytic lights) while Omniverse RTX carries a production pipeline (MDL materials, per-frame denoise/AOVs) that costs more per sample and pays a large accumulation restart whenever the scene moves (a static scene path-traces at 142 fps on the same box; the tumbling cube drops it to ~5). Nexus's speed on dynamic scenes is structural (transform-only TLAS updates), and these demo scenes are lit so shadows are actually visible in both raster and RT output — earlier recordings used near-headlight suns that hid them.
Bars show time per frame (lower is better, fastest first), split by where that time goes: physics (solver steps), sync (GPU-sim state to host), render (draw / path-trace), readback (frame pixels to CPU). Hover a bar for per-segment ms. Gray bars have no breakdown yet.
41 shown measurements · generated 2026-07-28T11:01:32 · fps are the no-frame-readback loop (frames stay on the GPU; GL renderers sync via a 1×1 readPixels); rows marked * were not re-measured and still include readback; rows marked † include it inherently (the renderer returns the frame as part of rendering) but it is ≤1% of the frame time.
Bars show env-steps/s — higher is better (physics only, no rendering; steady-state window with one device sync at the end. Per-engine dt differs — an env-step is one engine step, see the table).
Wall time from process start to the first completed physics step, single env, warm JIT caches — the cost of every script rerun / config change. Bar segments: ■ imports · ■ engine init · ■ scene build + first step. Where a cold caches figure is shown, that's the same run with the engine's kernel cache emptied — the first-ever-run / post-upgrade cost. Hover a bar for exact segments.
| Backend | Mode | Render fps (no readback) | ms/frame | Breakdown ms (physics / sync / render) | Physics steps/s | Resolution | spp | GPU | Source |
|---|---|---|---|---|---|---|---|---|---|
| MuJoCo | Cube drop — Rasterized (native renderer) | 1,971 * | 0.51 | 0.04 / — / 0.47 | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| mjlab (MuJoCo-Warp) | Cube drop — Rasterized (native renderer) | 592 * | 1.69 | 0.20 / 0.92 / 0.57 | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| Genesis | Cube drop — Rasterized (native renderer) | 446 * | 2.24 | 1.11 / — / 1.13 | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| Nexus | Cube drop — Rasterized (native renderer) | 437 * | 2.29 | 1.42 / 0.05 / 0.14 | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| Nexus (cuda-oxide + CUDA graph) | Cube drop — Rasterized (native renderer) | 264 | 3.79 | 3.60 / 0.01 / 0.18 | — | 640x480 | — | NVIDIA GeForce RTX 5090 | measured 2026-07-09 (idle GPU) |
| Nexus (CPU) | Cube drop — Rasterized (native renderer) | 37.5 * | 27 | — | — | 640x480 | — | NVIDIA GeForce RTX 5090 | measured 2026-07-08 |
| Nexus (cuda-oxide) | Cube drop — Rasterized (native renderer) | 18.2 | 55 | 55 / 0.02 / 0.24 | — | 640x480 | — | NVIDIA GeForce RTX 5090 | measured 2026-07-09 (idle GPU) |
| MuJoCo | Cube drop — Ray traced — shared tracer (Mitsuba) | — | — | — | 441,096 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| mjlab (MuJoCo-Warp) | Cube drop — Ray traced — shared tracer (Mitsuba) | — | — | — | 6,838 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| Genesis | Cube drop — Ray traced — shared tracer (Mitsuba) | — | — | — | 3,641 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| Isaac Sim | Cube drop — Ray traced — shared tracer (Mitsuba) | — | — | — | 2,309 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| Genesis (Nyx) | Cube drop — Ray traced — engine's own path tracer | 320 | 3.12 | 1.11 / — / 2.01 | 3,419 | 480x368 | 64 | NVIDIA GeForce RTX 5090 | measured 2026-07-16 (idle GPU, headless RTX 5090); median of 3. NOTE: driver 580.159.03 — the other rows on this panel were measured on 595.71.05. |
| Nexus | Cube drop — Ray traced — engine's own path tracer | 202 * | 5.00 | 1.52 / 0.07 / 2.93 | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| Genesis | Cube drop — Ray traced — engine's own path tracer | 12.1 † | 82 | — | 2,283 | 480x368 | 64 | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| Isaac Sim | Cube drop — Ray traced — engine's own path tracer | 8.7 * | 115 | — | 1,145 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 |
| MuJoCo | LeRobot legs — Rasterized (native renderer) | 536 * | 1.87 | 0.06 / — / 1.81 | — | 640x480 | — | NVIDIA GeForce RTX 5090 | measured 2026-07-08 |
| Genesis | LeRobot legs — Rasterized (native renderer) | 118 | 8.48 | 5.09 / — / 3.39 | — | 640x480 | — | NVIDIA GeForce RTX 5090 | measured 2026-07-09 |
| Nexus (cuda-oxide + CUDA graph) | LeRobot legs — Rasterized (native renderer) | 35.1 | 28 | 26 / 0.02 / 2.67 | — | 640x480 | — | NVIDIA GeForce RTX 5090 | measured 2026-07-09 (idle GPU) |
| Nexus | LeRobot legs — Rasterized (native renderer) | 6.6 | 152 | 143 / 3.98 / 4.62 | — | 640x480 | — | NVIDIA GeForce RTX 5090 | measured 2026-07-08 |
| Genesis (Nyx) | LeRobot legs — Ray traced — engine's own path tracer | 132 | 7.60 | 3.16 / — / 4.44 | 2,251 | 640x480 | 32 | NVIDIA GeForce RTX 5090 | measured 2026-07-16 (idle GPU, headless RTX 5090); median of 3. NOTE: driver 580.159.03 — the other rows on this panel were measured on 595.71.05. |
| Isaac Sim | LeRobot legs — Ray traced — engine's own path tracer | 70.1 * | 14 | — | 3,351 | 640x480 | 32 | NVIDIA GeForce RTX 5090 | measured 2026-07-09 (idle GPU) |
| Nexus (cuda-oxide + CUDA graph) | LeRobot legs — Ray traced — engine's own path tracer | 4.9 * | 204 | 27 / 0.06 / 0.84 | — | 640x480 | 32 | NVIDIA GeForce RTX 5090 | measured 2026-07-09 (idle GPU) |
| Nexus | LeRobot legs — Ray traced — engine's own path tracer | 3.2 * | 312 | 101 / 0.65 / 207 | — | 640x480 | 32 | NVIDIA GeForce RTX 5090 | measured 2026-07-09 (idle GPU) |
| Genesis | LeRobot legs — Ray traced — engine's own path tracer | 2.7 * | 365 | — | 758 | 640x480 | 32 | NVIDIA GeForce RTX 5090 | measured 2026-07-09 (idle GPU) |
| MuJoCo | LeRobot legs × 2,048 — Physics only — 2,048 parallel envs | — | — | — | 367,359 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| mjlab (MuJoCo-Warp) | LeRobot legs × 2,048 — Physics only — 2,048 parallel envs | — | — | — | 2,921,962 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| Genesis | LeRobot legs × 2,048 — Physics only — 2,048 parallel envs | — | — | — | 2,296,140 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| Nexus | LeRobot legs × 2,048 — Physics only — 2,048 parallel envs | — | — | — | 138,640 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| Nexus (cuda-oxide + CUDA graph) | LeRobot legs × 2,048 — Physics only — 2,048 parallel envs | — | — | — | 113,159 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| Isaac Sim | LeRobot legs × 2,048 — Physics only — 2,048 parallel envs | — | — | — | 262,096 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| MuJoCo | Unitree G1 × 4,096 — Physics only — Unitree G1 29-DOF × 4,096 envs | — | — | — | 555,709 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 (idle GPU, headless RTX 5090) |
| mjlab (MuJoCo-Warp) | Unitree G1 × 4,096 — Physics only — Unitree G1 29-DOF × 4,096 envs | — | — | — | 4,089,794 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 (idle GPU, headless RTX 5090) |
| Genesis | Unitree G1 × 4,096 — Physics only — Unitree G1 29-DOF × 4,096 envs | — | — | — | 2,557,591 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 (idle GPU, headless RTX 5090) |
| Nexus | Unitree G1 × 4,096 — Physics only — Unitree G1 29-DOF × 4,096 envs | — | — | — | 54,127 | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-28 (idle GPU, headless RTX 5090) |
| Isaac Sim | Unitree G1 × 4,096 — Physics only — Unitree G1 29-DOF × 4,096 envs | failed: version matrix: this box has Isaac Sim 6.0.1 (py3.12), whose matching Isaac Lab | NVIDIA GeForce RTX 5090 | pending | |||||
| MuJoCo | Startup — Time to first step — single env, warm JIT caches | — | 0.25 s | — | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| mjlab (MuJoCo-Warp) | Startup — Time to first step — single env, warm JIT caches | — | 2.08 s | — | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| Genesis | Startup — Time to first step — single env, warm JIT caches | — | 5.11 s | — | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| Nexus | Startup — Time to first step — single env, warm JIT caches | — | 0.90 s | — | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| Nexus (cuda-oxide + CUDA graph) | Startup — Time to first step — single env, warm JIT caches | — | 1.12 s | — | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
| Isaac Sim | Startup — Time to first step — single env, warm JIT caches | — | 5.47 s | — | — | — | — | NVIDIA GeForce RTX 5090 | measured 2026-07-15 (idle GPU, headless RTX 5090) |
The fps rows say how fast each engine is; they say nothing about what it costs to run. The three engines here are the ones that could actually be rebuilt and run on this machine — LuisaRender is not built and mjlab does not import, so they are absent rather than estimated. The picture is a set of trades, not a ranking: Genesis uses ~3.7× Nexus's host RAM but a third of its VRAM; Isaac costs ~12× Nexus's RAM (5.8 GB — the Kit runtime and USD stage) and works the GPU hardest (79%) while path-tracing slowest. VRAM is the constraint that decides how many instances fit on a card: at 3.4 GB Nexus fits ~9 on this 32 GB GPU, Genesis ~30.
Method: RAM is USS summed over the process tree (not RSS, which double-counts shared pages); VRAM is per-PID from nvidia-smi's compute-apps table; GPU util is device-wide and only sampled with the GPU otherwise idle. Peaks include one-time JIT / shader-cache / stage-load costs, deliberately — peak footprint is what sizes a machine. Reproduce with tools/resource_profile.py. Time to first frame is process start → first path-traced frame in hand, on warm caches: it is what you wait through before seeing anything, and the spread is 16×. It is not the same as the Startup rows further down — those stop at the first physics step and never touch the render pipeline, so they miss the RTX shader cache and the first path-trace accumulation. Cold is far worse: Genesis's Taichi JIT costs ~74 s and Isaac's first-ever launch compiles an RTX shader cache for ~2 min.
| Backend | RAM peak (MB) | VRAM peak (MB) | CPU mean | GPU mean | Time to first frame |
|---|---|---|---|---|---|
| Genesis (Nyx) | 1,776 | 1,046 | 79% | 49% | 3.89 s |
| Isaac Sim | 5,808 | 2,842 | 105% | 81% | 6.26 s |
| Nexus | 487 | 3,355 | 53% | 59% | 0.35 s |
The headline fps folds physics and rendering together — and the rows do not fold them the same way. genesis_rt_native.py and isaac_rt_native.py time only the render call, so their published fps is render-only; nexus_rt_native.py and genesis_nyx_native.py time the whole loop. So the fps column above does not compare like with like, and separating the stages changes the conclusion: on the cube, Nyx and Nexus are within ~7% as path tracers (474 vs 442 render-only fps) rather than the ~1.7× the combined number suggests — and on the robot Nexus's renderer is the faster of the two (347 vs 229), losing only because its physics costs 24.4 ms/frame against Genesis's 3.1. Physics ms is derived from physics_steps_s at each script's steps-per-frame where segments were not recorded.
| Backend | Physics ms/frame | Render ms/frame | Render-only fps | Published fps | Published fps measures |
|---|---|---|---|---|---|
| Genesis (Nyx) | 1.17 | 2.11 | 474 | 320 | whole loop |
| Genesis | 1.75 | 82.00 | 12.2 | 12.1 | render-only |
| Backend | Physics ms/frame | Render ms/frame | Render-only fps | Published fps | Published fps measures |
|---|---|---|---|---|---|
| Genesis (Nyx) | 3.11 | 4.37 | 229 | 132 | whole loop |
The cube ray-traced row above is measured at 480×368 because that is what every other native-RT row uses — but at that size the frame is small enough that fixed per-frame overhead, not ray tracing, sets the cost. Per-sample cost keeps falling as the frame grows, which means the 480×368 row understates Nyx: 28× the pixels costs only ~5× the time, and it still path-traces 2560×1920 at 91 fps. Reproduce with tools/nyx_res_sweep.py.
| Resolution | Pixels | Render ms/frame | Render fps | ns/sample | |
|---|---|---|---|---|---|
| 480x368 | 177 k | 2.12 | 472 | 0.187 | 1.0× cheaper/sample |
| 960x736 | 707 k | 2.81 | 356 | 0.062 | 3.0× cheaper/sample |
| 1280x960 | 1229 k | 3.67 | 273 | 0.047 | 4.0× cheaper/sample |
| 1920x1440 | 2765 k | 6.29 | 159 | 0.036 | 5.2× cheaper/sample |
| 2560x1920 | 4915 k | 11.00 | 90.9 | 0.035 | 5.3× cheaper/sample |
The native-RT rows above do not light the same scene, so read that column as indicative rather than exact:
| Row | Light setup | |
|---|---|---|
| Genesis | lights=[radius 1.5] + env_surface=Emission | soft shadows + emissive env — genesis_rt_native.py |
| Genesis (Nyx) | lights=[radius 1.5] | soft shadows; matched to the LuisaRender row — genesis_nyx_native.py |
| Isaac Sim | UsdLux.DomeLight + UsdLux.DistantLight | dome env sampling; its row note attributes ~73 ms/frame to the rebuild — isaac_rt_native.py |
| Nexus | add_directional_light() | hard shadows, cheapest of the three — nexus_rt_native.py |
How much is the disagreement worth? LuisaRender, Isaac and Nexus cannot be re-measured on this machine (no from-source LuisaRender build, no isaac-venv, no nexus3d installed), so tools/nyx_light_sweep.py sweeps the regimes on Nyx instead. The answer: ~10% at a tracing-bound resolution, inside the noise at the row's 480×368 — and soft vs hard shadows costs nothing measurable. So lighting choice does not explain cross-engine gaps of 24×/58×. Isaac is the exception its own row note already records: its dome light costs ~73 ms/frame of env-sampling rebuild.
| Lighting | Render ms/frame | Render fps | |
|---|---|---|---|
| unlit | 1.74 | 575 | — |
| point (radius 0, hard shadow) | 2.08 | 481 | +20% vs unlit |
| area (radius 1.5, soft shadow) | 1.94 | 516 | +11% vs unlit |
| area (radius 4.0, very soft) | 2.11 | 474 | +21% vs unlit |
| 3 area lights (radius 1.5) | 2.10 | 477 | +21% vs unlit |
| Lighting | Render ms/frame | Render fps | |
|---|---|---|---|
| unlit | 6.25 | 160 | — |
| point (radius 0, hard shadow) | 6.79 | 147 | +9% vs unlit |
| area (radius 1.5, soft shadow) | 6.72 | 149 | +8% vs unlit |
| area (radius 4.0, very soft) | 6.23 | 161 | -0% vs unlit |
| 3 area lights (radius 1.5) | 7.11 | 141 | +14% vs unlit |
22 shown measurements · generated 2026-07-09T19:29:24 · fps are the no-frame-readback loop (frames stay on the GPU; GL renderers sync via a 1×1 readPixels); rows marked * were not re-measured and still include readback; rows marked † include it inherently (the renderer returns the frame as part of rendering) but it is ≤1% of the frame time.
| Backend | Mode | Render fps (no readback) | ms/frame | Breakdown ms (physics / sync / render) | Physics steps/s | Resolution | spp | GPU | Source |
|---|---|---|---|---|---|---|---|---|---|
| MuJoCo | Cube drop — Rasterized (native renderer) | 1,684 * | 0.59 | 0.02 / — / 0.58 | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | readme 2026-07-08 |
| mjlab (MuJoCo-Warp) | Cube drop — Rasterized (native renderer) | 565 * | 1.77 | — | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | readme 2026-07-08 |
| Genesis | Cube drop — Rasterized (native renderer) | 487 | 2.05 | 1.07 / — / 0.99 | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 |
| Nexus (cuda-oxide + CUDA graph) | Cube drop — Rasterized (native renderer) | 264 | 3.79 | 3.60 / 0.01 / 0.18 | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 (idle GPU) |
| Nexus | Cube drop — Rasterized (native renderer) | 85.2 | 12 | 11 / 0.16 / 0.24 | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-08 |
| Nexus (CPU) | Cube drop — Rasterized (native renderer) | 37.5 * | 27 | — | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-08 |
| Nexus (cuda-oxide) | Cube drop — Rasterized (native renderer) | 18.2 | 55 | 55 / 0.02 / 0.24 | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 (idle GPU) |
| mjlab (MuJoCo-Warp) | Cube drop — Ray traced — shared tracer (Mitsuba) | 38.5 * | 26 | — | 7,000 | 480x360 | 96 | NVIDIA GeForce RTX 5080 Laptop GPU | readme 2026-07-08 |
| Genesis | Cube drop — Ray traced — shared tracer (Mitsuba) | 37.7 * | 27 | — | 3,300 | 480x360 | 96 | NVIDIA GeForce RTX 5080 Laptop GPU | readme 2026-07-08 |
| Isaac Sim | Cube drop — Ray traced — shared tracer (Mitsuba) | 37.2 * | 27 | — | 5,400 | 480x360 | 96 | NVIDIA GeForce RTX 5080 Laptop GPU | readme 2026-07-08 |
| MuJoCo | Cube drop — Ray traced — shared tracer (Mitsuba) | 35.0 * | 29 | — | 408,000 | 480x360 | 96 | NVIDIA GeForce RTX 5080 Laptop GPU | readme 2026-07-08 |
| Genesis | Cube drop — Ray traced — engine's own path tracer | 14.3 * | 70 | — | 1,887 | 480x368 | 64 | NVIDIA GeForce RTX 5080 Laptop GPU | readme 2026-07-08 |
| Isaac Sim | Cube drop — Ray traced — engine's own path tracer | 12 * | 83 | — | — | 480x368 | 64 | NVIDIA GeForce RTX 5080 Laptop GPU | readme 2026-07-08 |
| Nexus | Cube drop — Ray traced — engine's own path tracer | 3.9 * | 257 | 9.46 / 0.31 / 244 | — | 480x368 | 64 | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 (idle GPU) |
| MuJoCo | LeRobot legs — Rasterized (native renderer) | 536 * | 1.87 | 0.06 / — / 1.81 | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-08 |
| Genesis | LeRobot legs — Rasterized (native renderer) | 118 | 8.48 | 5.09 / — / 3.39 | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 |
| Nexus (cuda-oxide + CUDA graph) | LeRobot legs — Rasterized (native renderer) | 35.1 | 28 | 26 / 0.02 / 2.67 | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 (idle GPU) |
| Nexus | LeRobot legs — Rasterized (native renderer) | 6.6 | 152 | 143 / 3.98 / 4.62 | — | 640x480 | — | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-08 |
| Isaac Sim | LeRobot legs — Ray traced — engine's own path tracer | 70.1 * | 14 | — | 3,351 | 640x480 | 32 | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 (idle GPU) |
| Nexus (cuda-oxide + CUDA graph) | LeRobot legs — Ray traced — engine's own path tracer | 4.9 * | 204 | 27 / 0.06 / 0.84 | — | 640x480 | 32 | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 (idle GPU) |
| Nexus | LeRobot legs — Ray traced — engine's own path tracer | 3.2 * | 312 | 101 / 0.65 / 207 | — | 640x480 | 32 | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 (idle GPU) |
| Genesis | LeRobot legs — Ray traced — engine's own path tracer | 2.7 * | 365 | — | 758 | 640x480 | 32 | NVIDIA GeForce RTX 5080 Laptop GPU | measured 2026-07-09 (idle GPU) |