Review: effects that take another layer as a parameter (Set Matte, Displacement Map, time
effects…) read it through Renderer::nested in layer space, and the motion tracker reads
layer_source; both could get only the part of the layer the frame shows. The nested renderer and
layer_source now rasterise whole.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A 3D text or shape layer close to the camera was rasterised whole at its on-screen scale, up to
~16 million pixels (a quarter gigabyte as f32) per frame worker, though the frame showed a small
part of it; behind the camera it was rasterised and not drawn. With 16 preview workers one such
layer took the app to 8-14 GB.
Renderer::raster_clip projects the output frame back onto the layer's plane (as the Classic 3D
compositor draws it) and rasterises only those cells of an 8 x 8 grid over the content, in a
window of the whole raster's pixel grid; nothing when the content is behind the camera. Cells
keep a moving camera on one cached raster. Layers whose off-frame pixels can matter (effects,
styles, masks, motion blur, depth of field, lights, Advanced 3D, per-character 3D, collapsed 2D
transforms) are rasterised whole as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- render --progress with a piped stderr writes well-formed
`progress <done> <total> <elapsed> <left|->` lines, one per change, and
the same render without the flag writes none.
- A template's Media Replacement control takes {"path"|"file"|"media": …},
is found by name ignoring case, and a path that cannot be imported fails
with an error naming the control and the path.