FormWren
Pre-release docs

What can grow

Cost Model By Rendering Path

World MeshDominant cost

Generated geometry, renderer/material state, transparency, and overdraw.

Watch when

Mesh detail, object count, or transparent overlap grows.

Canvas Mesh UIDominant cost

Generated topology submitted through Canvas rebuild and batching.

Watch when

Shape changes frequently or many unique materials split batches.

Canvas SDFDominant cost

Pixel coverage, overlapping soft effects, UI rebuilds, and per-instance material state.

Watch when

Large translucent areas, glow/shadow ranges, or animated parameters grow.

Cached DisplayDominant cost

Capture work, render-texture memory, sampling, and recapture frequency.

Watch when

The result changes often, captures are large, or many cached surfaces overlap.

A Canvas SDF graphic may own a per-instance material so its parameters can differ. Inspect the actual batches; do not infer a fixed draw-call count from the component count.

Repeatable comparison

Five-Minute Profiling Recipe

  1. Use the same scene, camera, resolution, device, and UI state for every comparison.
  2. Capture a live result, then a cached or alternative-path result without changing the composition.
  3. Record batches/draw calls with the Frame Debugger.
  4. Record CPU and GPU frame time, and inspect transparent overdraw or fill-rate pressure.
  5. For cache, also record render-texture memory and the frame-time spike when a recapture occurs.

Repeat long enough to include the steady state and any update/recapture event.

When cache is worth testing

When Cache May Help

Cached mode samples a captured result instead of evaluating the full live SDF presentation each frame. The net result depends on capture frequency, capture resolution, render-texture memory, overlap, platform, and what the live path was doing.

Reasonable candidate
A visually stable result that is expensive enough to justify capture and remains unchanged for many frames.
Poor candidate
A frequently animated or resized result, a large high-resolution capture, or a screen already constrained by memory/bandwidth.

Cache textures returned to the pool are kept for bounded reuse: by default, idle textures are limited to 64 MiB total, 64 entries globally, and two entries for one exact size/format key. Oldest idle entries are removed first, and a low-memory notification clears the idle pool. Active cached displays are counted separately and are not discarded by the idle-pool limit.

Disable cached rendering before judging live SDF edits. Re-enable it only after the live appearance is correct, then measure both states.

When Another Output May Be Better

  • Choose World Mesh when Scene geometry and direct handles are the real requirement.
  • Choose Canvas Mesh UI when generated topology matters more than SDF effects.
  • Choose a static sprite or 9-slice when the visual is fixed, already approved, and does not need procedural variation.
  • Reduce effect range, overlap, or covered screen area before adding a more complex optimization system.

Runtime Changes

Runtime animation can trigger geometry changes, Canvas rebuilds, SDF parameter updates, or cache recaptures depending on the chosen path. Profile the exact property and update frequency. A visually small change is not automatically a small rendering cost.

Compare Results in Context

Keep the Unity version, render pipeline, target device, resolution, scene, object count, effect settings, and live/cached state consistent while you compare results. Save those conditions with the Frame Debugger and Profiler counters so you can repeat the same test later. Profile again after changing the layout, effects, resolution, platform, or update frequency; the earlier result describes only the setup you measured.