Batch authoring
Preflight, generate, validate and regenerate destructible setups across a multi-selection of Static Meshes, with per-item states and CSV reporting.
Batch authoring runs the same single-asset services across a selection. It adds no separate fracture
or regeneration logic: every eligible row delegates to FSDFDestructionAuthoringService or
FSDFDestructionRegenerationService.
Workflow
Select multiple Static Meshes
↓
Souls Destruction -> Batch Generate / Validate / Regenerate
↓
Preflight All
↓
Review Ready / Warning / Blocked
↓
Explicit confirmation
↓
Sequential processing
↓
Exported CSV report
Selecting meshes
Select any number of Static Meshes in the Content Browser, right-click, open Souls Destruction and choose a batch operation. The batch tab opens with the selection loaded.
The selection is deduplicated and sorted by stable object path before anything else happens, so the same selection always produces the same processing order.
The three operations
| Operation | What it does | Requires an existing manifest |
|---|---|---|
| Batch Generate | Publishes new setups using one shared preset and option set | No — an existing manifest blocks the row |
| Batch Validate | Validates managed setups, writes no assets | Yes |
| Batch Regenerate | Re-runs protected regeneration with per-setup backups | Yes |
Shared options
One preset and option set applies to the whole batch:
- authoring preset;
- interior material override;
- fracture density;
- destruction mode;
- output folder policy and custom folder;
- custom fragment count;
- create destructible Actor;
- fragile runtime profile;
- Max Health (0 = Family Default) — applied to every profile the batch publishes: a positive
value ships each one with
Use Healthon, that value, and single-hit destruction off; hidden while the fragile profile is checked; - whether rows with warnings are allowed to run.
Physics is not a separate option of the batch window: every setup Batch Generate publishes takes its
preset family’s default — Simulated, with an SDF-owned simulation collision copy when a source
cannot simulate as it stands, and fall damage on Ceramic and Glass Vessel profiles. Generate a prop
that must stay fixed individually with Create Destructible… and Physics set to Static. The
physics fields are part of the request signature. See
Intact physics and fall damage.
One preset per batch
Mixed material families should be processed as separate batches, or with a custom preset that suits all of them. There is no semantic per-mesh auto-classification, and none is claimed.
Preflight All
Preflight is mandatory and read-only. It runs before the first write and produces an
FSDFBatchReport with the total selected count and the number of Ready, Warning and Blocked
rows, plus one FSDFBatchItemReport per mesh containing its status, summary, resolved output folder,
manifest path and issue list.
Per-item states
| State | Meaning |
|---|---|
Ready | Eligible with no issues |
Warning | Eligible, but preflight raised non-blocking issues |
Blocked | Not eligible; the row will be skipped |
Running | Currently processing |
Success | Completed successfully |
Failed | Attempted and failed; other rows continue |
Skipped | Not attempted (blocked, or excluded by the warning policy) |
Cancelled | Not attempted because the batch was cancelled |
Common blocking issues
| Code | Meaning |
|---|---|
SDF-BATCH-GLOBAL-001 | No authoring preset is selected |
SDF-BATCH-GLOBAL-002 | The preset has no interior material and no batch override was supplied |
SDF-BATCH-GEN-001 | The mesh already has an SDF manifest — use Batch Regenerate |
SDF-BATCH-GEN-002 | The resolved backend is not supported by automatic batch generation |
SDF-BATCH-GEN-003 | A planned output package already exists |
SDF-BATCH-GEN-004 | Several selected meshes resolve to the same output path |
SDF-BATCH-MANIFEST-001 | No SDF authoring manifest references this mesh |
Blocked rows can be synchronised directly in the Content Browser from the batch tab, so you can inspect the offending asset without losing the batch.
Stale preflight
The report stores a RequestSignature: a stable hash of the selection and every shared option.
Changing the operation, preset, density, output policy, material override or selection invalidates
the approved preflight, and execution is refused until you preflight again.
This is deliberate: the confirmation you gave applies to the batch you reviewed, not to a different one.
Output collisions
Before writing, the planned Geometry Collection, profile, Blueprint and manifest paths of every row are compared against each other and against existing packages. Any row colliding with another selected row, or with an existing asset, is blocked.
Two meshes named SM_Crate in different folders can resolve to the same output when the output
policy is Project Default Folder. Switch to the source-sibling policy or rename the sources.
Progress and cancellation
Processing is strictly sequential on the editor thread. There is no parallel UObject or Chaos mutation.
Progress is displayed as current / total — mesh — processing stage. Cancellation is sampled
between assets: the current single-asset staged transaction always completes or rolls back before
the queue stops, so cancelling never leaves a half-written setup.
Editor responsiveness
One expensive Geometry Collection fracture can occupy the editor thread until that asset finishes. Progress and cancellation are responsive between assets, not inside a single fracture.
Reports
Every execution exports a CSV to:
Saved/SoulsDestructionFramework/BatchReports/SDF_Batch_<timestamp>_<GUID>.csv
Each row contains the source path, final status, summary, output folder, manifest path, issue codes and the actionable issue messages. That makes a partial failure inspectable without reading the Message Log line by line.
The completion dialog reports success, warning, failure, skipped and cancelled totals, and the exported report path.
Recommended workflow for large libraries
- Group meshes by material family — process wood props, then ceramics, then stone.
- Run Batch Generate on a small pilot selection (5–10 meshes) with
Lowdensity. - Open two or three generated setups in Play In Editor and confirm the break reads correctly.
- Adjust the preset in your own project content, not the shipped asset.
- Run the full family batch.
- Keep the CSV report with the commit that introduced the assets.
- Use Batch Validate after a source-art update to find which setups drifted.
- Use Batch Regenerate only on the rows that Validate flagged.
Note
Batch processing is sequential and synchronous by design in this version. That is a deliberate safety trade-off: no parallel mutation of UObjects or Geometry Collections.
Last updated: 2026-09-15