The scene, more than anything
A 3.5x spread on identical settings. Dense geometry, foliage and reflective surfaces all bill per frame, and they bill again in every warm-up render.
Measured, not estimated: on one mid-range desktop, a labelled 300-frame dataset takes between ten minutes and half an hour end to end, and which end of that range you land on is decided almost entirely by the scene. The numbers below are twelve real captures, most of them downloadable from this site, timed from their own file timestamps.
All of these are 300-frame runs on the same machine, and every one includes 16 warm-up renders per frame, the settling that keeps ray-traced lighting from arriving as speckle. That quality cost is inside the numbers rather than waiting to surprise you.
| Scene | Resolution | 300 frames | Per frame |
|---|---|---|---|
| Beach at sunset | 1280×720 | 7.5 min | 1.5 s |
| Parisian street, flyover | 1280×720 | 7.6 min | 1.5 s |
| Parisian street, dawn to dusk | 1280×720 | 7.4 min | 1.5 s |
| Football pitch at night | 1280×960 | 13.5 min | 2.7 s |
| Quarry | 1280×960 | 17.6 min | 3.5 s |
| Prison yard | 1280×960 | 18.3 min | 3.7 s |
| Beach, aerial stills | 1280×960 | 18.7 min | 3.8 s |
| Barnyard | 1280×960 | 19.2 min | 3.8 s |
| Mountain village | 1280×960 | 19.3 min | 3.9 s |
| Russian winter town | 1280×960 | 20.6 min | 4.1 s |
| Airbase | 1280×960 | 21.3 min | 4.3 s |
| Parisian street, determinism corpus | 1280×960 | 26.2 min | 5.3 s |
The spread is the finding. A sea horizon renders in 1.5 seconds and a street with three and a half thousand actors takes 5.3, on identical settings. Nobody can quote you a time without seeing your scene, and anyone who does is quoting their fastest one.
The bottom row is also carrying more than geometry: the determinism corpus re-scatters its whole population before every frame and changes the weather every five, and each of those changes is settled before the shutter. Variety is paid for in seconds per frame.
Capture dominates. On the beach run, the two stages that turn rendered frames into a training-ready dataset cost this:
| Stage | Time | What happened |
|---|---|---|
| Capture | 7.5 to 26 min | renders every frame, plus its truth buffers |
| Labelling | 0.5 min | 23,560 instances derived from the identity buffers |
| Export to YOLO and COCO | 1.0 min | both formats at once, with the train/val split |
Half a minute for 23,560 labelled instances is the part worth pausing on, because it is the part that replaces human work. Hand annotation at even ten seconds a box, which is optimistic for aerial objects a few pixels wide, puts the same count at over sixty hours. The labels here are read from the engine’s identity buffers instead, so the cost does not scale with how many objects are in the frame.
A 3.5x spread on identical settings. Dense geometry, foliage and reflective surfaces all bill per frame, and they bill again in every warm-up render.
1280×960 carries twice the pixels of 1280×720 and roughly tracks it in cost. Capture at the resolution your model trains at, not above it.
Re-scattering the population and changing the weather are paid before every frame, and each change has to settle. A placed-once scene skips both bills.
The 16 warm-ups in these numbers exist because unsettled lighting arrives as noise in the pixels. Cutting them makes the timer look better and the frames worse.
The honest part of this page. The minutes above start when a finished scene starts capturing, and most of a real project happens before that: building or buying the level, placing the zones, deciding the classes, and the test runs where the composition turns out wrong. Our beach capture took 7.5 minutes; the two 12-frame test runs and the reframing before it took most of an hour.
A 12-frame test costs seconds and answers the questions that matter, which is why the workflow is test first, capture second. Budget your calendar for the scene and the iteration, and your machine time for the capture.
The pipeline these numbers come from is three commands, and the captures behind most of the rows are published in full so the timings can be checked against their own file timestamps.
nameframe capture-unreal job.json
nameframe label D:/runs/beach D:/runs/beach/labels
nameframe dataset D:/runs/beach D:/runs/beach/dataset --format yolo,cocoThe datasets themselves, with their validation reports, are on the datasets page. The reason the warm-up renders are not optional is measured on the determinism page.