---
title: Performance
order: 2
---

The v4 renderer runs the heavy work on the GPU and refines the frame in rungs. While you orbit, pan, or drag a gizmo it renders at a coarse rung that holds your target framerate; once you stop, it climbs rung by rung to full quality. On top of that, shapes bake into sparse brick volumes incrementally and in the background, so editing a detail no longer re-bakes the whole object.

![the v4 Performance panel](../assets/rendersettings-performance.webp)

## Progressive refinement

Instead of a hard navigation/settled split, the renderer walks a ladder of quality rungs. Rung 0 is the coarse interactive pass; the top rung is full [Quality](quality.md). Any motion — camera move, an edit, a modal property change — drops back to the interactive rung and restarts the climb.

- **Progressive Refinement** — default *on*. Off = full quality every frame, no ramp.
- **Target FPS** — `5–200`, default `144`. The framerate the interactive rung aims to hold. The picker drops to a lower rung on heavy frames and rises back up when the GPU has headroom.
- **Refinement Steps** — `1–12`, default `4`. How many rungs sit between the minimums and full quality. More rungs = a smoother ramp but more passes; `1` = always full quality, no ramp.
- **Min Resolution** — `1–100%`, default `20%`. Rung 0's resolution — the coarsest the interactive pass will drop to.
- **Min Steps** — `4–128`, default `64`. Rung 0's ray-march step budget. Kept high enough that the march still reaches surfaces while moving.
- **Min Threshold** — `0.0001–0.05`, default `0.002`. Rung 0's hit threshold, tightening toward *Hit Threshold* as it refines. Set it equal to *Hit Threshold* to keep the surface exact across all rungs, with no silhouette shift while refining.

## Edge refinement

- **Edge Refinement** — default *on*. On settled frames, re-march only the detected edge pixels — silhouettes, boolean seams, small objects — at a higher resolution than the base frame. Sharp edges over a cheap low-resolution base.
- **Edge Resolution** — `1–100%`, default `50%`. The resolution those edge pixels are re-marched at, relative to the viewport. It only has an effect above the base *Resolution*; `100%` gives native-resolution edges.

This is usually a better trade than raising *Resolution* outright: edges are where low resolution is visible, and they are a small fraction of the pixels.

## Incremental brick bakes

Shapes bake into sparse brick volumes rather than being evaluated from scratch every frame. In v4 those bakes are:

- **Incremental** — only the edited region of a shape re-bakes
- **Asynchronous** — the bake runs in the background, so dragging and drag-release no longer hitch
- **Coarsening under load** — large shapes coarsen while you drag and sharpen on release, so scaling stays smooth
- **Move-aware** — moving a whole chain rigidly around the scene skips the proxy re-bake entirely; a content signature detects that the result would be bit-identical
- **Instance-aware** — static camera orbits no longer re-bake unchanged mirror or array shapes

## Brick budget warnings

When a chain's bricks exceed the page budget, the panel lists the offending objects by name:

- **detail coarsened N×** — the object rendered, but past the smart cap, so it is blurrier than *World Cell Size* implies
- **analytic fallback (slow)** — the object fell back to the analytic march, the measured performance cliff

Fix by lowering *Resolution*, raising [World Cell Size](quality.md#brick-detail), or splitting the object. A second box lists chains where **adaptive fine detail** kicked in, with the region count and how much finer they went — useful for confirming that a fine feature is actually getting the resolution you think it is.

## Per-chain limits

Each chain is capped at **256 primitives** and **512 instructions**. The modifier panel's toolbar shows an `Objects N/256` readout for the active object's chain, turning red past ~80% of the budget; a `Modifiers M/…` readout appears once that cap is half used. Over-limit primitives are dropped and the instruction list is truncated, with at most a console warning.

## See also

- [Quality](quality.md) — settings the top rung and the F12 render use
- [F12 Render](f12-render.md) — the camera render forces full quality (no ramp)
- [Display → Proxy Mesh](display.md#proxy-mesh) — alternative viewport for EEVEE/Cycles
