Class reference
SoftBody3D
Inherits MeshInstance3D
A deformable 3D physics mesh.
Description
A deformable 3D physics mesh. Used to create elastic or deformable objects such as cloth, rubber, or other flexible materials. Additionally, SoftBody3D is subject to wind forces defined in Area3D (see Area3D.wind_source_path, Area3D.wind_force_magnitude, and Area3D.wind_attenuation_factor). Note: It's recommended to use Jolt Physics when using SoftBody3D instead of the default GodotPhysics3D, as Jolt Physics' soft body implementation is faster and more reliable. You can switch the physics engine using the ProjectSettings.physics/3d/physics_engine project setting.
Properties
int collision_layer = 1
int collision_layer = 1The physics layers this SoftBody3D is in. Collision objects can exist in one or more of 32 different layers. See also collision_mask. Note: Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See Collision layers and masks in the documentation for more information.
int collision_mask = 1
int collision_mask = 1The physics layers this SoftBody3D scans. Collision objects can scan one or more of 32 different layers. See also collision_layer. Note: Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See Collision layers and masks in the documentation for more information.
float damping_coefficient = 0.01
float damping_coefficient = 0.01The body's damping coefficient. Higher values will slow down the body more noticeably when forces are applied.
int disable_mode = 0
int disable_mode = 0Defines the behavior in physics when Node.process_mode is set to Node.PROCESS_MODE_DISABLED.
float drag_coefficient = 0.0
float drag_coefficient = 0.0The body's drag coefficient. Higher values increase this body's air resistance. Note: This value is currently unused by Redot's default physics implementation.
float linear_stiffness = 0.5
float linear_stiffness = 0.5Higher values will result in a stiffer body, while lower values will increase the body's ability to bend. The value can be between 0.0 and 1.0 (inclusive).
NodePath parent_collision_ignore = NodePath("")
NodePath parent_collision_ignore = NodePath("")NodePath to a CollisionObject3D this SoftBody3D should avoid clipping.
float pressure_coefficient = 0.0
float pressure_coefficient = 0.0The pressure coefficient of this soft body. Simulate pressure build-up from inside this body. Higher values increase the strength of this effect.
bool ray_pickable = true
bool ray_pickable = trueIf true, the SoftBody3D will respond to RayCast3Ds.
float shrinking_factor = 0.0
float shrinking_factor = 0.0Scales the rest lengths of SoftBody3D's edge constraints. Positive values shrink the mesh, while negative values expand it. For example, a value of 0.1 shortens the edges of the mesh by 10%, while -0.1 expands the edges by 10%. Note: shrinking_factor is best used on surface meshes with pinned points.
int simulation_precision = 5
int simulation_precision = 5Increasing this value will improve the resulting simulation, but can affect performance. Use with care.
float total_mass = 1.0
float total_mass = 1.0The SoftBody3D's mass.
Methods
void add_collision_exception_with(Node body)
Node body)Adds a body to the list of bodies that this body can't collide with.
void apply_central_force(Vector3 force)
Vector3 force)Distributes and applies a force to all points. A force is time dependent and meant to be applied every physics update.
void apply_central_impulse(Vector3 impulse)
Vector3 impulse)Distributes and applies an impulse to all points. An impulse is time-independent! Applying an impulse every frame would result in a framerate-dependent force. For this reason, it should only be used when simulating one-time impacts (use the "_force" functions otherwise).
void apply_force(int point_index, Vector3 force)
int point_index, Vector3 force)Applies a force to a point. A force is time dependent and meant to be applied every physics update.
void apply_impulse(int point_index, Vector3 impulse)
int point_index, Vector3 impulse)Applies an impulse to a point. An impulse is time-independent! Applying an impulse every frame would result in a framerate-dependent force. For this reason, it should only be used when simulating one-time impacts (use the "_force" functions otherwise).
PhysicsBody3D[] get_collision_exceptions()
Returns an array of nodes that were added as collision exceptions for this body.
bool get_collision_layer_value(int layer_number) const
bool get_collision_layer_value(int layer_number) constReturns whether or not the specified layer of the collision_layer is enabled, given a layer_number between 1 and 32.
bool get_collision_mask_value(int layer_number) const
bool get_collision_mask_value(int layer_number) constReturns whether or not the specified layer of the collision_mask is enabled, given a layer_number between 1 and 32.
RID get_physics_rid() const
RID get_physics_rid() constReturns the internal RID used by the PhysicsServer3D for this body.
Vector3 get_point_transform(int point_index)
Vector3 get_point_transform(int point_index)Returns local translation of a vertex in the surface array.
bool is_point_pinned(int point_index) const
bool is_point_pinned(int point_index) constReturns true if vertex is set to pinned.
void remove_collision_exception_with(Node body)
Node body)Removes a body from the list of bodies that this body can't collide with.
void set_collision_layer_value(int layer_number, bool value)
int layer_number, bool value)Based on value, enables or disables the specified layer in the collision_layer, given a layer_number between 1 and 32.
void set_collision_mask_value(int layer_number, bool value)
int layer_number, bool value)Based on value, enables or disables the specified layer in the collision_mask, given a layer_number between 1 and 32.
void set_point_pinned(int point_index, bool pinned, NodePath attachment_path = NodePath(""), int insert_at = -1)
int point_index, bool pinned, NodePath attachment_path = NodePath(""), int insert_at = -1)Sets the pinned state of a surface vertex. When set to true, the optional attachment_path can define a Node3D the pinned vertex will be attached to.
Constants
DISABLE_MODE_REMOVE = 0
When Node.process_mode is set to Node.PROCESS_MODE_DISABLED, remove from the physics simulation to stop all physics interactions with this SoftBody3D. Automatically re-added to the physics simulation when the Node is processed again.
DISABLE_MODE_KEEP_ACTIVE = 1
When Node.process_mode is set to Node.PROCESS_MODE_DISABLED, do not affect the physics simulation.