Work in progress

Godot documentation is being updated to reflect the latest changes in version 4.0. Some documentation pages may still state outdated information. This banner will tell you if you're reading one of such pages.

The contents of this page are up to date. If you can still find outdated information, please open an issue.

SoftBody3D

Inherits: MeshInstance3D < GeometryInstance3D < VisualInstance3D < Node3D < Node < Object

A soft mesh physics body.

Description

A deformable physics body. Used to create elastic or deformable objects such as cloth, rubber, or other flexible materials.

Note: There are many known bugs in SoftBody3D. Therefore, it's not recommended to use them for things that can affect gameplay (such as a player character made entirely out of soft bodies).

Tutorials

Properties

int

collision_layer

1

int

collision_mask

1

float

damping_coefficient

0.01

DisableMode

disable_mode

0

float

drag_coefficient

0.0

float

linear_stiffness

0.5

NodePath

parent_collision_ignore

NodePath("")

float

pressure_coefficient

0.0

bool

ray_pickable

true

int

simulation_precision

5

float

total_mass

1.0

Methods

void

add_collision_exception_with ( Node body )

PhysicsBody3D[]

get_collision_exceptions ( )

bool

get_collision_layer_value ( int layer_number ) const

bool

get_collision_mask_value ( int layer_number ) const

RID

get_physics_rid ( ) const

Vector3

get_point_transform ( int point_index )

bool

is_point_pinned ( int point_index ) const

void

remove_collision_exception_with ( Node body )

void

set_collision_layer_value ( int layer_number, bool value )

void

set_collision_mask_value ( int layer_number, bool value )

void

set_point_pinned ( int point_index, bool pinned, NodePath attachment_path=NodePath("") )


Enumerations

enum DisableMode:

DisableMode 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.

DisableMode DISABLE_MODE_KEEP_ACTIVE = 1

When Node.process_mode is set to Node.PROCESS_MODE_DISABLED, do not affect the physics simulation.


Property Descriptions

int collision_layer = 1

  • void set_collision_layer ( int value )

  • int get_collision_layer ( )

The 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

  • void set_collision_mask ( int value )

  • int get_collision_mask ( )

The 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

  • void set_damping_coefficient ( float value )

  • float get_damping_coefficient ( )

There is currently no description for this property. Please help us by contributing one!


DisableMode disable_mode = 0

Defines the behavior in physics when Node.process_mode is set to Node.PROCESS_MODE_DISABLED. See DisableMode for more details about the different modes.


float drag_coefficient = 0.0

  • void set_drag_coefficient ( float value )

  • float get_drag_coefficient ( )

There is currently no description for this property. Please help us by contributing one!


float linear_stiffness = 0.5

  • void set_linear_stiffness ( float value )

  • float get_linear_stiffness ( )

There is currently no description for this property. Please help us by contributing one!


NodePath parent_collision_ignore = NodePath("")

  • void set_parent_collision_ignore ( NodePath value )

  • NodePath get_parent_collision_ignore ( )

NodePath to a CollisionObject3D this SoftBody3D should avoid clipping.


float pressure_coefficient = 0.0

  • void set_pressure_coefficient ( float value )

  • float get_pressure_coefficient ( )

There is currently no description for this property. Please help us by contributing one!


bool ray_pickable = true

  • void set_ray_pickable ( bool value )

  • bool is_ray_pickable ( )

If true, the SoftBody3D will respond to RayCast3Ds.


int simulation_precision = 5

  • void set_simulation_precision ( int value )

  • int get_simulation_precision ( )

Increasing this value will improve the resulting simulation, but can affect performance. Use with care.


float total_mass = 1.0

  • void set_total_mass ( float value )

  • float get_total_mass ( )

The SoftBody3D's mass.


Method Descriptions

void add_collision_exception_with ( Node body )

Adds a body to the list of bodies that this body can't collide with.


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

Returns 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

Returns 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

There is currently no description for this method. Please help us by contributing one!


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

Returns true if vertex is set to pinned.


void remove_collision_exception_with ( 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 )

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 )

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("") )

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.