{"record":{"id":"48a237286c84aa14","repo":"stride3d/stride","slug":"softbody-processing-is-not-yet-available","errorCode":null,"errorMessage":"SoftBody processing is not yet available","messagePattern":"SoftBody processing is not yet available","errorType":"exception","errorClass":"NotImplementedException","httpStatus":null,"severity":"error","filePath":"sources/engine/Stride.Physics/Simulation.cs","lineNumber":130,"sourceCode":"            dispatcher.RegisterCollisionCreateFunc(BulletSharp.BroadphaseNativeType.Convex2DShape, BulletSharp.BroadphaseNativeType.Convex2DShape, convexAlgo);\n            //dispatcher.RegisterCollisionCreateFunc(BulletSharp.BroadphaseNativeType.Box2DShape, BulletSharp.BroadphaseNativeType.Convex2DShape, convexAlgo);\n            //dispatcher.RegisterCollisionCreateFunc(BulletSharp.BroadphaseNativeType.Convex2DShape, BulletSharp.BroadphaseNativeType.Box2DShape, convexAlgo);\n            //dispatcher.RegisterCollisionCreateFunc(BulletSharp.BroadphaseNativeType.Box2DShape, BulletSharp.BroadphaseNativeType.Box2DShape, new BulletSharp.Box2DBox2DCollisionAlgorithm.CreateFunc());\n            //~2D pipeline\n\n            //default solver\n            var solver = new BulletSharp.SequentialImpulseConstraintSolver();\n\n            if (configuration.Flags.HasFlag(PhysicsEngineFlags.CollisionsOnly))\n            {\n                collisionWorld = new BulletSharp.CollisionWorld(dispatcher, broadphase, collisionConfiguration);\n            }\n            else if (configuration.Flags.HasFlag(PhysicsEngineFlags.SoftBodySupport))\n            {\n                //mSoftRigidDynamicsWorld = new BulletSharp.SoftBody.SoftRigidDynamicsWorld(mDispatcher, mBroadphase, solver, mCollisionConf);\n                //mDiscreteDynamicsWorld = mSoftRigidDynamicsWorld;\n                //mCollisionWorld = mSoftRigidDynamicsWorld;\n                throw new NotImplementedException(\"SoftBody processing is not yet available\");\n            }\n            else\n            {\n                discreteDynamicsWorld = new BulletSharp.DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);\n                discreteDynamicsWorld.Gravity = configuration.Gravity;\n                collisionWorld = discreteDynamicsWorld;\n            }\n\n            if (discreteDynamicsWorld != null)\n            {\n                solverInfo = discreteDynamicsWorld.SolverInfo; //we are required to keep this reference, or the GC will mess up\n                dispatchInfo = discreteDynamicsWorld.DispatchInfo;\n\n                solverInfo.SolverMode |= BulletSharp.SolverModes.CacheFriendly; //todo test if helps with performance or not\n\n                if (configuration.Flags.HasFlag(PhysicsEngineFlags.ContinuousCollisionDetection))\n                {\n                    CanCcd = true;","sourceCodeStart":112,"sourceCodeEnd":148,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/engine/Stride.Physics/Simulation.cs#L112-L148","documentation":"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.","triggerScenarios":"Creating a Simulation (or running the Stride physics engine) with a PhysicsConfiguration whose Flags include PhysicsEngineFlags.SoftBodySupport.","commonSituations":"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.","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)"],"exampleFix":"// before\nvar config = new PhysicsConfiguration { Flags = PhysicsEngineFlags.SoftBodySupport };\nvar simulation = new Simulation(scene, config); // throws\n// after\nvar config = new PhysicsConfiguration { Flags = PhysicsEngineFlags.DiscreteDynamicsWorld };\nvar simulation = new Simulation(scene, config);","handlingStrategy":"validation","validationCode":"if (configuration.Flags.HasFlag(PhysicsEngineFlags.SoftBodySupport))\n    throw new NotSupportedException(\"Stride does not implement SoftBody processing; remove the flag.\");","typeGuard":null,"tryCatchPattern":"try\n{\n    simulation = new Simulation(scene, configuration);\n}\ncatch (NotImplementedException ex) when (ex.Message.Contains(\"SoftBody\"))\n{\n    // retry without SoftBodySupport flag\n    configuration.Flags &= ~PhysicsEngineFlags.SoftBodySupport;\n    simulation = new Simulation(scene, configuration);\n}","preventionTips":["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"],"tags":["physics","softbody","not-implemented","unsupported"],"backgroundTag":"method-not-implemented","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}