Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

SpringBoneSimulator3D

Hérite de : SkeletonModifier3D < Node3D < Node < Object

Un SkeletonModifier3D pour appliquer des ondes inertielles à des chaînes d'os.

Description

This SkeletonModifier3D can be used to wiggle hair, cloth, and tails. This modifier behaves differently from PhysicalBoneSimulator3D as it attempts to return the original pose after modification.

If you setup set_root_bone() and set_end_bone(), it is treated as one bone chain. Note that it does not support a branched chain like Y-shaped chains.

When a bone chain is created, an array is generated from the bones that exist in between and listed in the joint list.

Several properties can be applied to each joint, such as set_joint_stiffness(), set_joint_drag(), and set_joint_gravity().

For simplicity, you can set values to all joints at the same time by using a Curve. If you want to specify detailed values individually, set set_individual_config() to true.

For physical simulation, SpringBoneSimulator3D can have children as self-standing collisions that are not related to PhysicsServer3D, see also SpringBoneCollision3D.

Warning: A scaled SpringBoneSimulator3D will likely not behave as expected. Make sure that the parent Skeleton3D and its bones are not scaled.

Note: Most methods in this class take an index parameter. This parameter specifies which setting list entry to return if the IK has multiple entries (e.g. settings/<index>/root_bone_name).

Propriétés

Vector3

external_force

Vector3(0, 0, 0)

bool

mutable_bone_axes

true

int

setting_count

0

Méthodes

bool

are_all_child_collisions_enabled(index: int) const

void

clear_collisions(index: int)

void

clear_exclude_collisions(index: int)

void

clear_settings()

int

get_center_bone(index: int) const

String

get_center_bone_name(index: int) const

CenterFrom

get_center_from(index: int) const

NodePath

get_center_node(index: int) const

int

get_collision_count(index: int) const

NodePath

get_collision_path(index: int, collision: int) const

float

get_drag(index: int) const

Curve

get_drag_damping_curve(index: int) const

int

get_end_bone(index: int) const

BoneDirection

get_end_bone_direction(index: int) const

float

get_end_bone_length(index: int) const

String

get_end_bone_name(index: int) const

int

get_exclude_collision_count(index: int) const

NodePath

get_exclude_collision_path(index: int, collision: int) const

float

get_gravity(index: int) const

Curve

get_gravity_damping_curve(index: int) const

Vector3

get_gravity_direction(index: int) const

int

get_joint_bone(index: int, joint: int) const

String

get_joint_bone_name(index: int, joint: int) const

int

get_joint_count(index: int) const

float

get_joint_drag(index: int, joint: int) const

float

get_joint_gravity(index: int, joint: int) const

Vector3

get_joint_gravity_direction(index: int, joint: int) const

float

get_joint_radius(index: int, joint: int) const

RotationAxis

get_joint_rotation_axis(index: int, joint: int) const

Vector3

get_joint_rotation_axis_vector(index: int, joint: int) const

float

get_joint_stiffness(index: int, joint: int) const

float

get_radius(index: int) const

Curve

get_radius_damping_curve(index: int) const

int

get_root_bone(index: int) const

String

get_root_bone_name(index: int) const

RotationAxis

get_rotation_axis(index: int) const

Vector3

get_rotation_axis_vector(index: int) const

float

get_stiffness(index: int) const

Curve

get_stiffness_damping_curve(index: int) const

bool

is_config_individual(index: int) const

bool

is_end_bone_extended(index: int) const

void

reset()

void

set_center_bone(index: int, bone: int)

void

set_center_bone_name(index: int, bone_name: String)

void

set_center_from(index: int, center_from: CenterFrom)

void

set_center_node(index: int, node_path: NodePath)

void

set_collision_count(index: int, count: int)

void

set_collision_path(index: int, collision: int, node_path: NodePath)

void

set_drag(index: int, drag: float)

void

set_drag_damping_curve(index: int, curve: Curve)

void

set_enable_all_child_collisions(index: int, enabled: bool)

void

set_end_bone(index: int, bone: int)

void

set_end_bone_direction(index: int, bone_direction: BoneDirection)

void

set_end_bone_length(index: int, length: float)

void

set_end_bone_name(index: int, bone_name: String)

void

set_exclude_collision_count(index: int, count: int)

void

set_exclude_collision_path(index: int, collision: int, node_path: NodePath)

void

set_extend_end_bone(index: int, enabled: bool)

void

set_gravity(index: int, gravity: float)

void

set_gravity_damping_curve(index: int, curve: Curve)

void

set_gravity_direction(index: int, gravity_direction: Vector3)

void

set_individual_config(index: int, enabled: bool)

void

set_joint_drag(index: int, joint: int, drag: float)

void

set_joint_gravity(index: int, joint: int, gravity: float)

void

set_joint_gravity_direction(index: int, joint: int, gravity_direction: Vector3)

void

set_joint_radius(index: int, joint: int, radius: float)

void

set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis)

void

set_joint_rotation_axis_vector(index: int, joint: int, vector: Vector3)

void

set_joint_stiffness(index: int, joint: int, stiffness: float)

void

set_radius(index: int, radius: float)

void

set_radius_damping_curve(index: int, curve: Curve)

void

set_root_bone(index: int, bone: int)

void

set_root_bone_name(index: int, bone_name: String)

void

set_rotation_axis(index: int, axis: RotationAxis)

void

set_rotation_axis_vector(index: int, vector: Vector3)

void

set_stiffness(index: int, stiffness: float)

void

set_stiffness_damping_curve(index: int, curve: Curve)


Énumérations

enum CenterFrom: 🔗

CenterFrom CENTER_FROM_WORLD_ORIGIN = 0

L'origine du monde est définie comme le centre.

CenterFrom CENTER_FROM_NODE = 1

Le Node3D spécifié par set_center_node() est défini comme centre.

Si le Node3D n'est pas trouvé, le Skeleton3D parent est traité comme centre.

CenterFrom CENTER_FROM_BONE = 2

L'origine de la pose de l'os du Skeleton3D parent spécifié par set_center_bone() est définie comme centre.

Si le Node3D n'est pas trouvé, le Skeleton3D parent est traité comme centre.


Descriptions des propriétés

Vector3 external_force = Vector3(0, 0, 0) 🔗

  • void set_external_force(value: Vector3)

  • Vector3 get_external_force()

La force constante qui affecte toujours les os. Elle est égale au résultat lorsque le Skeleton3D parent se déplace à cette vitesse dans la direction opposée.

Ceci est utile pour des effets tels que le vent et l'antigravité.


bool mutable_bone_axes = true 🔗

  • void set_mutable_bone_axes(value: bool)

  • bool are_bone_axes_mutable()

If true, the solver retrieves the bone axis from the bone pose every frame.

If false, the solver retrieves the bone axis from the bone rest and caches it, which increases performance slightly, but position changes in the bone pose made before processing this SpringBoneSimulator3D are ignored.


int setting_count = 0 🔗

  • void set_setting_count(value: int)

  • int get_setting_count()

Le nombre de paramètres.


Descriptions des méthodes

bool are_all_child_collisions_enabled(index: int) const 🔗

Returns true if all child SpringBoneCollision3Ds are contained in the collision list at index in the settings.


void clear_collisions(index: int) 🔗

Efface toutes les collisions de la liste de collisions à l'index index dans les paramètres lorsque are_all_child_collisions_enabled() vaut false.


void clear_exclude_collisions(index: int) 🔗

Efface toutes les collisions exclues de la liste de collisions à l'index index dans les paramètres lorsque are_all_child_collisions_enabled() vaut false.


void clear_settings() 🔗

Efface tous les paramètres.


int get_center_bone(index: int) const 🔗

Renvoie l’index de l’os central de la chaîne d’os.


String get_center_bone_name(index: int) const 🔗

Renvoie le nom de l'os central de la chaîne d'os.


CenterFrom get_center_from(index: int) const 🔗

Renvoie d'où provient l'origine du centre dans la chaîne d'os.


NodePath get_center_node(index: int) const 🔗

Renvoie le chemin du nœud central de la chaîne d'os.


int get_collision_count(index: int) const 🔗

Renvoie le nombre de collisions de la liste de collisions de la chaîne d'os lorsque are_all_child_collisions_enabled() vaut false.


NodePath get_collision_path(index: int, collision: int) const 🔗

Renvoie le chemin de nœud du SpringBoneCollision3D de la collision dans la liste de collisions de la chaîne d'os lorsque are_all_child_collisions_enabled() vaut false.


float get_drag(index: int) const 🔗

Renvoie la courbe d'amortissement de la force de traînée de la chaîne d'os.


Curve get_drag_damping_curve(index: int) const 🔗

Renvoie la courbe d'amortissement de la force de traînée de la chaîne d'os.


int get_end_bone(index: int) const 🔗

Renvoie l'index de l'os de fin de la chaîne d'os.


BoneDirection get_end_bone_direction(index: int) const 🔗

Renvoie la direction de la queue de l'os de fin de la chaîne d'os lorsque is_end_bone_extended() vaut true.


float get_end_bone_length(index: int) const 🔗

Returns the end bone tail length of the bone chain when is_end_bone_extended() is true.


String get_end_bone_name(index: int) const 🔗

Renvoie le nom de l'os de fin de la chaîne d'os.


int get_exclude_collision_count(index: int) const 🔗

Renvoie le nombre de collisions exclues de la liste de collisions de la chaîne d'os lorsque are_all_child_collisions_enabled() vaut true.


NodePath get_exclude_collision_path(index: int, collision: int) const 🔗

Renvoie le chemin de nœud du SpringBoneCollision3D de la collision dans la liste de collisions exclues de la chaîne d'os lorsque are_all_child_collisions_enabled() vaut true.


float get_gravity(index: int) const 🔗

Renvoie la quantité de gravité de la chaîne d'os.


Curve get_gravity_damping_curve(index: int) const 🔗

Renvoie la courbe d'amortissement de la quantité de gravité de la chaîne d'os.


Vector3 get_gravity_direction(index: int) const 🔗

Renvoie la direction de la gravité de la chaîne d'os.


int get_joint_bone(index: int, joint: int) const 🔗

Renvoie l'index de l'os à la liaison joint dans la liste de liaisons de la chaîne d'os.


String get_joint_bone_name(index: int, joint: int) const 🔗

Renvoie le nom de l'os à la liaison joint dans la liste de liaisons de la chaîne d'os.


int get_joint_count(index: int) const 🔗

Renvoie la quantité de liaisons dans la liste des liaisons de la chaîne d'os.


float get_joint_drag(index: int, joint: int) const 🔗

Renvoie la force de traînée à la liaison joint dans la liste des liaisons de la chaîne d'os.


float get_joint_gravity(index: int, joint: int) const 🔗

Renvoie la quantité de gravité à la liaison joint dans la liste des liaisons de la chaîne d'os.


Vector3 get_joint_gravity_direction(index: int, joint: int) const 🔗

Renvoie la direction de la gravité à la liaison joint dans la liste des liaisons de la chaîne d'os.


float get_joint_radius(index: int, joint: int) const 🔗

Renvoie le rayon à la liaison joint dans la liste des liaisons de la chaîne d'os.


RotationAxis get_joint_rotation_axis(index: int, joint: int) const 🔗

Renvoie l'axe de rotation à la liaison joint dans la liste des liaisons de la chaîne d'os.


Vector3 get_joint_rotation_axis_vector(index: int, joint: int) const 🔗

Renvoie le vecteur de l'axe de rotation à la liaison spécifiée dans la liste des liaisons de la chaîne d'os. Ce vecteur représente l'axe autour duquel la liaison peut tourner. Il est déterminé en fonction de l'axe de rotation défini pour la liaison.

Si get_joint_rotation_axis() vaut SkeletonModifier3D.ROTATION_AXIS_ALL, cette méthode renvoie Vector3(0, 0, 0).


float get_joint_stiffness(index: int, joint: int) const 🔗

Renvoie la force de rigidité à la liaison joint dans la liste des liaisons de la chaîne d'os.


float get_radius(index: int) const 🔗

Renvoie le rayon de liaison de la chaîne d'os.


Curve get_radius_damping_curve(index: int) const 🔗

Renvoie la courbe d'amortissement du rayon de liaison de la chaîne d'os.


int get_root_bone(index: int) const 🔗

Renvoie l'index de l'os racine de la chaîne d'os.


String get_root_bone_name(index: int) const 🔗

Renvoie le nom de l'os racine de la chaîne d'os.


RotationAxis get_rotation_axis(index: int) const 🔗

Renvoie l'axe de rotation de la chaîne d'os.


Vector3 get_rotation_axis_vector(index: int) const 🔗

Renvoie le vecteur de l'axe de rotation de la chaîne d'os. Ce vecteur représente l'axe autour duquel la chaîne d'os peut tourner. Il est déterminé en fonction de l'axe de rotation défini pour la chaîne d'os.

Si get_rotation_axis() vaut SkeletonModifier3D.ROTATION_AXIS_ALL, cette méthode renvoie Vector3(0, 0, 0).


float get_stiffness(index: int) const 🔗

Renvoie la force de rigidité de la chaîne d'os.


Curve get_stiffness_damping_curve(index: int) const 🔗

Renvoie la courbe d'amortissement de la force de rigidité de la chaîne d'os.


bool is_config_individual(index: int) const 🔗

Renvoie true si la configuration peut être modifiée individuellement pour chaque liaison.


bool is_end_bone_extended(index: int) const 🔗

Renvoie true si l'os final est prolongé pour avoir une queue.


void reset() 🔗

Réinitialise un état de simulation par rapport à la pose d'os actuelle.

Ceci est utile pour empêcher le résultat de la simulation de devenir violent. Par exemple, appelez ceci immédiatement après un appel à AnimationPlayer.play() sans fondu, ou dans le signal SkeletonModifier3D.modification_processed précédent si sa condition change considérablement.


void set_center_bone(index: int, bone: int) 🔗

Définit l'index de l'os central de la chaîne d'os.


void set_center_bone_name(index: int, bone_name: String) 🔗

Définit le nom de l'os central de la chaîne d'os.


void set_center_from(index: int, center_from: CenterFrom) 🔗

Définit d'où provient l'origine du centre dans la chaîne d'os.

Le mouvement des os est calculé en fonction de la différence de distance relative entre le centre et l'os dans les trames précédentes et suivantes.

Par exemple, si le Skeleton3D parent est utilisé comme centre, les os sont considérés comme n'ayant pas bougé si le Skeleton3D se déplace dans le monde.

Dans ce cas, seule une modification de la pose d'os est considérée comme un mouvement d'os.


void set_center_node(index: int, node_path: NodePath) 🔗

Définit le chemin du nœud central de la chaîne d'os.


void set_collision_count(index: int, count: int) 🔗

Définit le nombre de collisions dans la liste de collisions à l'index index dans les paramètres lorsque are_all_child_collisions_enabled() vaut false.


void set_collision_path(index: int, collision: int, node_path: NodePath) 🔗

Définit le chemin de nœud du SpringBoneCollision3D à la collision dans la liste des collisions de la chaîne d'os lorsque are_all_child_collisions_enabled() vaut false.


void set_drag(index: int, drag: float) 🔗

Définit la force de traînée de la chaîne d'os. Plus la valeur est grande, plus le gigotement est réduit.

La valeur est redimensionnée par set_drag_damping_curve() et est mise en cache dans chaque réglage de liaison dans la liste des liaisons.


void set_drag_damping_curve(index: int, curve: Curve) 🔗

Définit la courbe d'amortissement de la force de traînée de la chaîne d'os.


void set_enable_all_child_collisions(index: int, enabled: bool) 🔗

Si enabled vaut true, tous les SpringBoneCollision3D enfants sont en collision et set_exclude_collision_path() est activé comme une liste d'exclusion à l'index index dans les paramètres.

Si enabled vaut false, vous devez enregistrer manuellement toutes les collisions valides avec set_collision_path().


void set_end_bone(index: int, bone: int) 🔗

Définit l'index de l'os de fin de la chaîne d'os.


void set_end_bone_direction(index: int, bone_direction: BoneDirection) 🔗

Définit la direction de la queue de l'os de fin de la chaîne d'os lorsque is_end_bone_extended() vaut true.


void set_end_bone_length(index: int, length: float) 🔗

Définit la longueur de la queue de l'os de fin de la chaîne d'os lorsque is_end_bone_extended() vaut true.


void set_end_bone_name(index: int, bone_name: String) 🔗

Définit le nom de la queue de l'os de fin de la chaîne d'os.

Note : L'os de fin doit être l'os racine ou un enfant de l'os racine. S'ils sont les mêmes, la queue doit être étendue par set_extend_end_bone() pour faire gigoter l'os.


void set_exclude_collision_count(index: int, count: int) 🔗

Définit le nombre de collisions exclues dans la liste de collisions à l'index index dans les paramètres lorsque are_all_child_collisions_enabled() vaut true.


void set_exclude_collision_path(index: int, collision: int, node_path: NodePath) 🔗

Définit le chemin de nœud du SpringBoneCollision3D à la collision dans la liste des collisions exclues de la chaîne d'os lorsque are_all_child_collisions_enabled() vaut true.


void set_extend_end_bone(index: int, enabled: bool) 🔗

Si enabled vaut true, l'os de fin est prolongé pour avoir la queue.

La configuration de la queue prolongée est attribuée au dernier élément de la liste des liaisons. En d'autres termes, si vous définissez enabled à false, la configuration du dernier élément de la liste de liaisons n'a aucun effet sur le résultat simulé.


void set_gravity(index: int, gravity: float) 🔗

Définit la quantité de gravité de la chaîne d'os. Cette valeur n'est pas une accélération, mais une vitesse constante de mouvement dans set_gravity_direction().

Si gravity n'est pas 0, la pose modifiée ne reviendra pas à la pose d'origine car elle est toujours affectée par la gravité.

La valeur est redimensionnée par set_gravity_damping_curve() et est mise en cache dans chaque réglage de liaison dans la liste des liaisons.


void set_gravity_damping_curve(index: int, curve: Curve) 🔗

Définit la courbe d'amortissement de la quantité de gravité de la chaîne d'os.


void set_gravity_direction(index: int, gravity_direction: Vector3) 🔗

Définit la direction de gravité de la chaîne d'os. Cette valeur est normalisée en interne et ensuite multipliée par set_gravity().

La valeur est mise en cache dans chaque paramètre de liaison dans la liste des liaisons.


void set_individual_config(index: int, enabled: bool) 🔗

Si enabled vaut true, la configuration peut être modifiée individuellement pour chaque liaison.


void set_joint_drag(index: int, joint: int, drag: float) 🔗

Définit la force de traînée à la liaison joint dans la liste de liaisons de la chaîne d'os lorsque is_config_individual() vaut true.


void set_joint_gravity(index: int, joint: int, gravity: float) 🔗

Définit la quantité de gravité de la liaison joint dans la liste des liaisons de la chaîne d'os lorsque is_config_individual() vaut true.


void set_joint_gravity_direction(index: int, joint: int, gravity_direction: Vector3) 🔗

Définit la direction de la gravité de la liaison joint dans la liste des liaisons de la chaîne d'os lorsque is_config_individual() vaut true.


void set_joint_radius(index: int, joint: int, radius: float) 🔗

Définit le rayon de liaison à la liaison joint dans la liste de liaisons de la chaîne d'os lorsque is_config_individual() vaut true.


void set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis) 🔗

Sets the rotation axis at joint in the bone chain's joint list when is_config_individual() is true.

The axes are based on the reference pose's space, if axis is SkeletonModifier3D.ROTATION_AXIS_CUSTOM, you can specify any axis.

In here, the reference pose is the bone pose immediately before the simulation.

Note: The rotation axis and the forward vector shouldn't be colinear to avoid unintended rotation since SpringBoneSimulator3D does not factor in twisting forces.


void set_joint_rotation_axis_vector(index: int, joint: int, vector: Vector3) 🔗

Définit le vecteur d'axe de rotation pour la liaison spécifiée dans la chaîne d'os.

Ce vecteur est normalisé par un processus interne et représente l'axe autour duquel la chaîne d'os peut tourner.

Si la longueur du vecteur est de 0, il est considéré comme synonyme de SkeletonModifier3D.ROTATION_AXIS_ALL.


void set_joint_stiffness(index: int, joint: int, stiffness: float) 🔗

Définit la force de rigidité de la liaison joint dans la liste des liaisons de la chaîne d'os lorsque is_config_individual() vaut true.


void set_radius(index: int, radius: float) 🔗

Définit le rayon de liaison de la chaîne d'os. Il est utilisé pour déplacer et glisser avec le SpringBoneCollision3D dans la liste de collisions.

La valeur est redimensionnée par set_radius_damping_curve() et est mise en cache dans chaque réglage de liaison dans la liste des liaisons.


void set_radius_damping_curve(index: int, curve: Curve) 🔗

Définit la courbe d'amortissement du rayon de liaison de la chaîne d'os.


void set_root_bone(index: int, bone: int) 🔗

Définit l'index de l'os racine de la chaîne d'os.


void set_root_bone_name(index: int, bone_name: String) 🔗

Définit le nom de l'os racine de la chaîne d'os.


void set_rotation_axis(index: int, axis: RotationAxis) 🔗

Sets the rotation axis of the bone chain. If set to a specific axis, it acts like a hinge joint. The value is cached in each joint setting in the joint list.

The axes are based on the reference pose's space, if axis is SkeletonModifier3D.ROTATION_AXIS_CUSTOM, you can specify any axis.

In here, the reference pose is the bone pose immediately before the simulation.

Note: The rotation axis vector and the forward vector shouldn't be colinear to avoid unintended rotation since SpringBoneSimulator3D does not factor in twisting forces.


void set_rotation_axis_vector(index: int, vector: Vector3) 🔗

Définit le vecteur d'axe de rotation de la chaîne d'os. La valeur est mise en cache dans chaque paramètre de liaison dans la liste des liaisons.

Ce vecteur est normalisé par un processus interne et représente l'axe autour duquel la chaîne d'os peut tourner.

Si la longueur du vecteur est de 0, il est considéré comme synonyme de SkeletonModifier3D.ROTATION_AXIS_ALL.


void set_stiffness(index: int, stiffness: float) 🔗

Définit la force de rigidité de la chaîne d'os. Plus la valeur est grande, plus vite la chaîne se remet à sa pose initiale.

Si stiffness vaut 0, la pose modifiée ne reviendra pas à la pose originale.

La valeur est redimensionnée par set_stiffness_damping_curve() et est mise en cache dans chaque paramètre de liaison dans la liste des liaisons.


void set_stiffness_damping_curve(index: int, curve: Curve) 🔗

Définit la courbe d'amortissement de la force de rigidité de la chaîne d'os.