-
Notifications
You must be signed in to change notification settings - Fork 329
Description
@AlbanBERGERET-Epic made the excellent suggestion that it may be possible to dynamically filter physics collisions and line traces using Chaos ESimCallbackOptions. This may allow us to make clipping polygons clip physics, too, without needing to cut actual geometry.
See Alban's tutorial that shows how to set up hooks into Chaos:
https://dev.epicgames.com/community/learning/tutorials/lydy/unreal-engine-using-chaos-callbacks-for-a-custom-gravity-system-working-with-round-worlds#thekeypoint:addingthecustomasynccallback
And he provided this information about the various ESimCallbackOptions:
None = 0
- No callbacks enabled.
- Used as a default or to explicitly disable all simulation callbacks.
Presimulate = 1 << 0
- Fired before the physics step begins, once per tick.
- Use case: set up per-step state, update forces or constraints before the solver starts.
MidPhaseModification = 1 << 1
- Runs after midphase collision detection (broadphase → midphase).
- Lets you modify or filter pairs before narrowphase contact generation.
- Useful for disabling collisions between specific shape pairs dynamically.
CCDModification = 1 << 2
- Called during continuous collision detection (CCD) pass.
- Lets you modify or filter CCD interactions (e.g., tunneling fixes for fast-moving projectiles).
ContactModification = 1 << 3
- Runs once contacts are generated but before they are solved.
- You can edit friction, restitution, contact normals, or cull contacts.
- Expensive, used sparingly.
StrainModification = 1 << 5
- Triggered for geometry collections / strain fields in Chaos Destruction.
- Lets you adjust fracture strain thresholds dynamically before they're applied.
ParticleRegister = 1 << 6
- Called when a particle (rigid body, etc.) is registered with the solver.
- Use case: initialize per-particle data structures or gameplay bookkeeping.
ParticleUnregister = 1 << 7
- Called when a particle is removed/unregistered from the solver.
- Use case: cleanup any external state tied to that body.
RunOnFrozenGameThread = 1 << 8
- Special option: forces the callback to be run on the game thread, even when the solver is frozen or detached.
- Helps ensure deterministic updates or when engine/game thread sync is required.
Rewind = 1 << 9
- Invoked when rewind is needed for networked physics rollback (Chaos supports a rollback mechanism for net prediction).
- Use case: restore state to a previous frame for correction.
PhysicsObjectUnregister = 1 << 10
- Fired when a PhysicsObject wrapper (higher-level than particle) is unregistered.
- Slightly different from
ParticleUnregister: this is about Chaos "physics objects" (proxy entities that wrap particles/constraints).
PreIntegrate = 1 << 11
- Called right before velocity/position integration.
- Use case: last chance to apply forces/impulses before integration runs.
PostIntegrate = 1 << 12
- Called immediately after integration, before constraint solving.
- Use case: inspect/update particle transforms, velocities after they've been integrated.
PreSolve = 1 << 13
- Runs just before the solver applies constraints.
- Good place for last-minute constraint modifications.
PostSolve = 1 << 14
- Runs after constraint solving is complete, before final state is committed.
- Use case: inspect impulses, detect high forces, or run gameplay responses.