With the comp's and the layer's motion-blur switches on, the renderer
hands effects the shutter (angle, phase, samples) — CC Particle World
now uses it: eight to sixty-four sprite fields sampled across the shutter
are averaged into the transfer, so fast particles draw the motion trails
After Effects shows instead of one sharp frozen field.
The GPU particle pass defers to the CPU while the shutter is open
(catalog::gpu_supported), keeping the oracle identical on both backends.
Tests: sim::particle_world_motion_blur_trails (blurred differs from
sharp, lights more pixels, keeps alpha energy) and a catalog assertion
for the CPU gate; effects 450 and gpu 212 lib tests pass; fmt and
clippy -D warnings clean.
GPU render passes for CC Particle World / Systems II, Particle Playground,
CC Ball Action, CC Pixel Polly, CC Scatterize and Curl Noise (fx_particles,
chunked multi-pass raster); Shatter wireframe views, Foam extras, Timewarp
with a Matte Layer, strong Warp Fisheye/Twist (CPU f64 inverse map) and
custom .ocio configs no longer fall back to the CPU. CPU refactors pinned by
particle_golden / timewarp_golden / sim_golden hashes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Timewarp without a Matte Layer is now planned once (time_fx::timewarp_plan: frames, shutter
instants, motion fields) and built by the CPU or the GPU from the plan; with a Matte Layer it
renders on the CPU (catalog::gpu_supported).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Apply Color LUT, OCIO CDL / Color Space / Display / File / Look Transform and
Color Profile Converter compile to colour programs (effects::color_program,
built next to the CPU effects) that fx_lut.wgsl interprets per pixel; LUTs
(1D, 3D, cineSpace shapers, inverses) are read from the storage buffer with the
CPU's nearest / trilinear / tetrahedral interpolation. Lumetri's Input LUT and
Look no longer force the CPU. Custom .ocio configs stay on the CPU.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- gpu: pooled working textures (released once every encoder that could read
them is submitted), shared zero images, reused readback staging buffers,
direct readback into Image; NaN-poisoned scratch images under test and
NaN-aware diffs; validation errors panic under test
- render: AutoPick (per comp / scale / path EWMA of CPU vs GPU frame times,
warm-up and periodic re-probe) behind Backend::Auto; viewer uses it too;
cached adjustment footprints (uploaded once)
- gpu fx_warp: Warp, Bezier Warp, CC Bend It, CC Page Turn, Smear, Reshape,
Color Emboss, Cartoon; sliding-histogram median for large radii; CC Power
Pin perspective < 100
- cli: bench --gpu reports Auto and per-frame upload / readback MB
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Transform: Use Composition's Shutter Angle / Shutter Angle, sampling the transform across
the shutter via EffectHost::params_at (EffectEnv::shutter carries the comp shutter when
motion blur is on); the GPU path defers to the CPU when blurring.
- Glow: Glow Operation (blend modes) and Glow Colors > Arbitrary Map.
- Cartoon: Advanced > Edge Enhancement (shock-filter sharpening / softening).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Wave Type: Polygon, Image Contours (source layer channel threshold, pre-blur, tolerance,
contour index, source centre) and Mask, rippling outward from the outline (exact signed
distance transform, util::signed_distance).
- Parameters Are Set At Birth via the new EffectHost::params_at; Render Quality; Reflection
off the layer edges; Stroke Profile.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Fill: Fill Mask, All Masks, Horizontal / Vertical Feather, Invert outside the mask
(GPU falls back to the CPU when masks are used).
- Refine Soft / Hard Matte: Reduce Chatter (temporal steadying of oscillating edges) and
Use Motion Blur (samples, shutter angle, higher quality) from neighbouring frames.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Particle Exploder, Ephemeral Property Mapper (operators), Affects groups on every
producer / force / mapper (source, selection map, characters, age + feather).
- Full mapper target list (angle, torque, scale, gradient velocity/force, lifespan,
character, font size, time offset, scale speed...); old saves remap by label.
- Cannon / Grid text particles (stroke font), Auto-Orient Rotation, Layer Map draws the
map layer per particle with Time Offset Type / Time Offset.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- card3d: shared Camera System (Camera Position with rotations, X/Y position and
Transform Order; Corner Pins with focal length; Comp Camera via EffectHost::comp_scene),
Lighting (Distant / Point / First Comp Light, colour, position, depth, ambient) and
Material (diffuse, specular, highlight sharpness).
- Shatter: Custom Shatter Map (+ White Tiles Fixed), Gradient group, Textures group
(front/side/back modes and layers, colour, opacity) and extrusion side rendering.
- Card Wipe: true 3D cards, Back Layer as a layer parameter (old None/Self popup migrated),
Flip Direction, Position / Rotation Jitter.
- Renderer supplies the comp camera and first light to effects.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Lumetri: HSL Secondary key/refine/correction with Show Mask, Hue vs Sat/Hue/Luma,
Luma vs Sat, Sat vs Sat and per-channel RGB curves, High Dynamic Range (HDR White /
Specular), Input LUT and Look (custom .cube + built-in looks).
- Hue/Saturation: Channel Control with Reds..Magentas ranges (range + fall-offs).
- Levels: Channel popup and Red/Green/Blue/Alpha controls; Curves: Channel parameter.
- catalog::param_shown: Effect Controls shows only what a popup selects.
- Timewarp Pixel Motion: block-matching flow (raster::flow::block_flow_window) with
Vector Detail, Smoothing, Error Threshold, Block Size, Weighting, Correct Luminance,
Filtering, Build From One Image; Matte Layer/Channel, Warp Layer, Show, Source Crops.
- GPU falls back to CPU when channel/range controls are used.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>