LOCAL REVIEW · New content and source imagery await owner approvalEvidence & image credits

Library / Real-time workflows

Production guide / 3 min read

Give every demanding shot a frame-time budget

Frame rate is the reciprocal of time: turn the stage target into milliseconds, then profile the actual heaviest node configuration.

Prepared 19 September 2026 · Local draft · Site publication: not published
Reader question: Convert a show-level real-time target into shot-level tests that can catch bottlenecks before stage time.

Start with arithmetic, not a mood

A target cadence gives a maximum frame time: 24 fps permits about 41.67 ms per frame; 25 fps permits 40 ms; 30 fps permits about 33.33 ms; 60 fps permits about 16.67 ms. This is a ceiling, not a promise of a usable stage. The Unreal profiling introduction defines frame time in milliseconds and frames per second as complementary measures. Use milliseconds for the budget because CPU, GPU, sync, and rendering work are easier to compare there.

Allocate a provisional safety margin before the scene spends the whole ceiling. For example, a 40 ms show may reserve 8 ms for uncertainty, leaving a 32 ms content threshold for an early test. That 8 ms is an Atlas planning choice, not a universal engine recommendation. Change it only with a written reason, such as measured stage overhead or a revised target.

Test the shot’s actual node, not its friendliest viewport

For ICVFX, the relevant configuration is the most heavily tasked render node with the actual inner/outer-frustum resolution and representative stage conditions. Epic’s ICVFX best-practice page says the common two-to-three-times target-rate rule is only a rough artist guideline and specifically calls for regular documented tests on comparable machines and, where possible, the stage. A high frame rate on a content workstation is useful evidence, but not acceptance.

Illustrative targetFrame ceilingEarly content threshold with 20% reserve
24 fps41.67 ms33.33 ms
25 fps40.00 ms32.00 ms
30 fps33.33 ms26.67 ms
60 fps16.67 ms13.33 ms

Build a shot test card

For each likely worst case, name the camera range, lens range, output topology, feature toggles, media or effects state, and expected frame cadence. Run the shot long enough to expose streaming, warm-up, and variation rather than recording one favorable sample. Capture average, typical high, and worst observed frame time; identify whether CPU, GPU, or another measured lane appears limiting. Avoid adding up unrelated profiler numbers as if they were independent invoices.

Illustrative example: a bright exterior may be light in a static viewport but become the test case because its tracking move widens the inner frustum, activates atmosphere, and crosses high-detail geometry. The test-card title should say exactly that. “Exterior performance” is too vague to repeat after an environment revision.

Use results to make a choice

  • Pass: measured behavior stays within the written threshold in the target configuration.
  • Conditional: it works only with a stated camera, feature, or content limit.
  • Fail: preserve the trace and the shot state; do not replace it with a verbal recollection.
  • Retest after changes that affect the tested load, not only after visible art changes.

A budget is useful when it forces a tradeoff early: simplify an effect, restrict a move, improve the node configuration, or accept a different target. It is not a vendor-independent prediction of stage performance.

Sources & evidence

Primary documentation establishes tool behavior or a reported production. Checklists and illustrative examples are Atlas editorial guidance, not results of independent testing. Match documentation to your installed version.

Introduction to Performance Profiling and Configuration in Unreal Engine

Frame-time and FPS concepts and profiling framing.

Source published: Not established · Retrieved 19 September 2026

In-Camera VFX Best Practices in Unreal Engine

Comparable-node and on-stage ICVFX profiling guidance; roughness of rate multipliers.

Source published: Not established · Retrieved 19 September 2026