CARNAGE GRAINS / DOCUMENTATION

Post Processing

Clean up a loaded point cache, add positional jitter, or create a denser grain cache without re-running the original simulation.

Load a cache first

Use Cache → Load Point Cache to load the simulation. Post Processing groups the tools into Remove Grains, Jitter, Upres and Post Processing Cache.

  1. Set Start and End in Post Processing Cache to the source frames you want to process.
  2. Open Remove Grains and enable the filters you need. Use Preview Removal and switch Display to Spheres to see the highlight. Clear Preview removes it.
  3. Choose a separate output path in Post Processing Cache, then click Apply. Review the compatibility notice and confirm. The processed cache loads when complete.

Removal filters select whole grain tracks across the chosen range, including frames where a grain did not fail the test. Boolean Per Frame applies its test independently to each frame.

Processing frame range

StartDefault: Scene Start

First source-cache frame to analyze and process, including removal preview and Upres. Follows the scene’s Start until you edit it.

EndDefault: Scene End

Last source-cache frame to analyze and process. Follows the scene’s End until you edit it.

End must be at or after Start, and every source frame in the range must exist. Removal needs consistent grain tracks across that range. A fresh output contains only the processed frames; the source cache stays unchanged.

Boolean

BooleanDefault: Off

Remove cached grains based on whether they are inside the selected mesh volume.

Object

Closed mesh defining the removal volume. Its shape and transform at the current scene frame are used for the operation.

EvaluateDefault: Current Frame

Whether the volume test removes whole grain tracks or removes grains separately on each frame.

  • Current Frame: Test the current cache frame and remove the selected grains throughout the selected range.
  • Any Frame: Remove a grain throughout the selected range if it meets the removal condition on any frame in the selected range.
  • Per Frame (die & be born): Apply removal independently on each frame, allowing grains to disappear and reappear. The output omits glue bonds and UV/mask sidecar data.
Invert (Keep Inside)Default: Off

Keep grains inside the volume and remove those outside it.

Per Frame (die & be born) can change the particle count from frame to frame. Its output omits glue bonds and UV/mask sidecar data. The selected Boolean object’s shape and transform are taken from the current scene frame for the operation.

For Current Frame, a timeline position outside Start/End uses the nearest frame within the processing range. The Boolean object’s pose is taken from the current scene frame.

To retain Recorded Motion, use Current Frame with complete source recordings and leave post-processing Jitter off or at Strength 0. See Processed cache attributes.

Velocity & stray grains

VelocityDefault: Off

Remove a grain throughout the selected range if its stored speed exceeds Max Speed on any frame in the selected range.

Max SpeedDefault: 20.0

Stored speed above which a grain is removed, in scene units per second.

Stray GrainsDefault: Off

Remove grains that have fewer than Min Neighbors within Search Radius.

Search RadiusDefault: 0.1

Distance around each grain within which other grains count as neighbors.

Min NeighborsDefault: 2

Minimum number of other grains required within Search Radius for a grain to be kept.

EvaluateDefault: Current Frame

Frames checked for isolated grains. Grains selected for removal are removed throughout the chosen processing range.

  • Current Frame: Identify isolated grains on the current cache frame and remove them throughout the selected range.
  • Any Frame: Remove a grain throughout the selected range if it is isolated on any frame in the selected range.

Stray Grains → Current Frame uses the nearest frame inside Start/End when the timeline is outside the processing range.

Teleport

TeleportDefault: Off

Remove a grain throughout the selected range if its position changes by more than Max Jump between consecutive source frames.

Max JumpDefault: 1.0

Maximum allowed distance between a grain’s positions in consecutive source frames, in scene units.

Jitter

JitterDefault: Off

Add a repeatable random offset to each grain's cached position to break up regular patterns. Updates live and can be saved with Apply.

StrengthDefault: 0.25

Maximum jitter distance as a multiple of each grain's radius. Each grain keeps the same offset across frames. Strength 0 leaves positions unchanged and is treated as Jitter being off.

SeedDefault: 0

Random pattern used for grain offsets. Change this to generate a different pattern.

Jitter is a live preview with a stable per-grain random offset. Apply saves the result; it does not add a new force to the simulation.

Non-zero post-processing Jitter discards Reference Surface data and Recorded Motion. The initial Jitter setting under Grains → Packing does not have this restriction.

Upres

UpresDefault: Off

Preview a denser set of smaller grains generated from the cached simulation.

Points per PointDefault: 1

Number of finer grains generated for each source grain. Their radii decrease to preserve the source grain's combined spherical volume.

Motion BlendingDefault: 1.5

Neighborhood size used to blend source-grain velocities onto the finer grains. Higher values average velocities over a wider area.

Separation PassesDefault: 4

Number of passes used to reduce overlaps between the finer grains. Higher values allow more separation work and increase calculation time.

Upres CacheDefault: Empty

Folder and base filename for the generated Upres NPZ cache. Use a different path from the source cache.

  1. Enable Upres and increase Points per Point above 1. Scrub to preview the denser result.
  2. Tune Motion Blending and Separation Passes for the motion and spacing you need.
  3. Choose a separate Upres Cache path and click Apply Upres. The generated cache loads when complete.

Upres derives finer-grain motion from the cached source velocities; it is not a new high-resolution physics simulation. Child radius decreases with the cube root of Points per Point, preserving combined spherical volume. The original and generated counts are shown in the panel.

Upres drops the parent set’s glue, mask, and UV sidecar data. Live Jitter can be included by Apply Upres, but the ordinary removal filters must be applied in a separate cleanup step.

Post Processing Cache

Post Processing CacheDefault: Empty

Folder and base filename for the processed NPZ cache. Use a different path from the source cache.

The output path and Apply button live in Post Processing Cache, below the frame range. When Upres is enabled, the panel uses Upres Cache and shows Apply Upres. Apply removal first, then upres the cleaned cache. Jitter can be included with Upres.

Before writing, Apply shows the selected frame range and which source attributes, Reference Surface data and Recorded Motion can be kept. Review the notice before confirming. An existing explicit destination requires Replace Existing Output; the source-cache path cannot be replaced. A blank or folder-only Upres path chooses an unused output name.

The processed cache keeps your current meshing choices where its data supports them. Without a Reference Surface reference, UV Mapping uses Dual Rest; without retained recordings, Motion Blur uses Particle Velocity. See Processed cache attributes for the data each operation keeps.

Use a new output name for a clean sequence. If you replace an existing output for only part of its range, files outside the processed range can remain.

Processed cache attributes

What survives depends on the operation and the data available in the source cache.

  • Fixed removal: keeps existing per-grain UVs, static masks and surviving glue bonds. With post-processing Jitter off or at Strength 0, it also keeps a valid Reference Surface reference.
  • Post Processing Jitter with non-zero Strength: keeps existing per-grain UVs, static masks and surviving glue bonds for a fixed grain set. It discards the Reference Surface reference.
  • Per Frame removal: omits glue bonds, UVs, static masks and the Reference Surface reference because the grain set can change each frame.
  • Upres: creates new grains and omits the parent set’s glue, UVs, static masks and Reference Surface reference.

Per Frame and Upres omit these attributes even when combined with Jitter. Switching UV Mapping to Dual Rest cannot recreate UV data that was omitted.

Recorded Motion is kept for surviving grains when Boolean → Current Frame is enabled, the source recordings are complete, and post-processing Jitter is off or at Strength 0. You can combine Current Frame Boolean with Velocity, Stray Grains and Teleport filters.

Any Frame Boolean, Per Frame removal, Upres, non-zero post-processing Jitter, and removal without Current Frame Boolean use Particle Velocity. See UV mapping and Motion blur for output setup.

Reference checked against Carnage Grains 1.0.0, 15 November 2026. Defaults describe a fresh setup; saved scenes may use different values.