stride3d/stride · error · NotImplementedException
SoftBody processing is not yet available
Error message
SoftBody processing is not yet available
What it means
Stride's Simulation constructor maps PhysicsEngineFlags.SoftBodySupport to the creation of a Bullet soft-rigid dynamics world, but that code path was never implemented — the relevant lines are commented out and the constructor throws NotImplementedException. Requesting soft body support always fails.
Solutions
- Remove PhysicsEngineFlags.SoftBodySupport from the PhysicsEngineFlags in your PhysicsConfiguration
- Simulate soft bodies with rigid-body composites or other workarounds (e.g. many connected rigid colliders)
- Wait for/implement soft body support in the Stride.Physics engine binding (uncomment and complete the SoftRigidDynamicsWorld setup)
Example fix
// before
var config = new PhysicsConfiguration { Flags = PhysicsEngineFlags.SoftBodySupport };
var simulation = new Simulation(scene, config); // throws
// after
var config = new PhysicsConfiguration { Flags = PhysicsEngineFlags.DiscreteDynamicsWorld };
var simulation = new Simulation(scene, config); Defensive patterns
Strategy: validation
Validate before calling
if (configuration.Flags.HasFlag(PhysicsEngineFlags.SoftBodySupport))
throw new NotSupportedException("Stride does not implement SoftBody processing; remove the flag."); Try / catch
try
{
simulation = new Simulation(scene, configuration);
}
catch (NotImplementedException ex) when (ex.Message.Contains("SoftBody"))
{
// retry without SoftBodySupport flag
configuration.Flags &= ~PhysicsEngineFlags.SoftBodySupport;
simulation = new Simulation(scene, configuration);
} Prevention
- Never enable PhysicsEngineFlags.SoftBodySupport with current Stride versions
- Model soft objects with rigid-body constraints instead
- Check the Stride.Physics source for implemented world types before enabling engine flags
When it happens
Trigger: Creating a Simulation (or running the Stride physics engine) with a PhysicsConfiguration whose Flags include PhysicsEngineFlags.SoftBodySupport.
Common situations: Enabling soft-body physics (cloth, ropes, deformables) via the physics engine flags; copying configuration from projects or Bullet samples that assumed soft body support exists in Stride.
Related errors
- Mesh seems to have no volume; triangle rasterization…
- Collider type is missing in , please fill an issue or fix it
- Reset is not supported by the asset tracker.
- Can't match pattern that uses '['
- Unknown node type
AI-assisted analysis of stride3d/stride@96fad776d2 (2026-09-14).
Data as JSON: /api/errors/48a237286c84aa14.
Report an issue: GitHub.
Appendix: source
Thrown at sources/engine/Stride.Physics/Simulation.cs:130
dispatcher.RegisterCollisionCreateFunc(BulletSharp.BroadphaseNativeType.Convex2DShape, BulletSharp.BroadphaseNativeType.Convex2DShape, convexAlgo);
//dispatcher.RegisterCollisionCreateFunc(BulletSharp.BroadphaseNativeType.Box2DShape, BulletSharp.BroadphaseNativeType.Convex2DShape, convexAlgo);
//dispatcher.RegisterCollisionCreateFunc(BulletSharp.BroadphaseNativeType.Convex2DShape, BulletSharp.BroadphaseNativeType.Box2DShape, convexAlgo);
//dispatcher.RegisterCollisionCreateFunc(BulletSharp.BroadphaseNativeType.Box2DShape, BulletSharp.BroadphaseNativeType.Box2DShape, new BulletSharp.Box2DBox2DCollisionAlgorithm.CreateFunc());
//~2D pipeline
//default solver
var solver = new BulletSharp.SequentialImpulseConstraintSolver();
if (configuration.Flags.HasFlag(PhysicsEngineFlags.CollisionsOnly))
{
collisionWorld = new BulletSharp.CollisionWorld(dispatcher, broadphase, collisionConfiguration);
}
else if (configuration.Flags.HasFlag(PhysicsEngineFlags.SoftBodySupport))
{
//mSoftRigidDynamicsWorld = new BulletSharp.SoftBody.SoftRigidDynamicsWorld(mDispatcher, mBroadphase, solver, mCollisionConf);
//mDiscreteDynamicsWorld = mSoftRigidDynamicsWorld;
//mCollisionWorld = mSoftRigidDynamicsWorld;
throw new NotImplementedException("SoftBody processing is not yet available");
}
else
{
discreteDynamicsWorld = new BulletSharp.DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
discreteDynamicsWorld.Gravity = configuration.Gravity;
collisionWorld = discreteDynamicsWorld;
}
if (discreteDynamicsWorld != null)
{
solverInfo = discreteDynamicsWorld.SolverInfo; //we are required to keep this reference, or the GC will mess up
dispatchInfo = discreteDynamicsWorld.DispatchInfo;
solverInfo.SolverMode |= BulletSharp.SolverModes.CacheFriendly; //todo test if helps with performance or not
if (configuration.Flags.HasFlag(PhysicsEngineFlags.ContinuousCollisionDetection))
{
CanCcd = true;View on GitHub (pinned to 96fad776d2)