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.
Propriétés
|
||
|
Méthodes
Énumérations
enum BoneDirection: 🔗
BoneDirection BONE_DIRECTION_PLUS_X = 0
Valeur d'énumération pour l'axe +X.
BoneDirection BONE_DIRECTION_MINUS_X = 1
Valeur d'énumération pour l'axe -X.
BoneDirection BONE_DIRECTION_PLUS_Y = 2
Valeur d'énumération pour l'axe +Y.
BoneDirection BONE_DIRECTION_MINUS_Y = 3
Valeur d'énumération pour l'axe -Y.
BoneDirection BONE_DIRECTION_PLUS_Z = 4
Valeur d'énumération pour l'axe +Z.
BoneDirection BONE_DIRECTION_MINUS_Z = 5
Valeur d'énumération pour l'axe -Z.
BoneDirection BONE_DIRECTION_FROM_PARENT = 6
Valeur d’énumération pour l'axe qui va d'un os parent vers l'os enfant.
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.
enum RotationAxis: 🔗
RotationAxis ROTATION_AXIS_X = 0
Valeur d'énumération pour la rotation de l'axe X.
RotationAxis ROTATION_AXIS_Y = 1
Valeur d'énumération pour la rotation de l'axe Y.
RotationAxis ROTATION_AXIS_Z = 2
Valeur d'énumération pour la rotation de l'axe Z.
RotationAxis ROTATION_AXIS_ALL = 3
Valeur d'énumération pour la rotation sans contraintes.
RotationAxis ROTATION_AXIS_CUSTOM = 4
Valeur d'énumération pour un axe de rotation optionnel. Voir aussi set_joint_rotation_axis_vector().
Descriptions des propriétés
Vector3 external_force = Vector3(0, 0, 0) 🔗
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é.
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 🔗
Renvoie la longueur de la queue de l'os de fin de la chaîne d'os lorsque is_end_bone_extended() vaut 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 joint 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 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 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 la 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) 🔗
Définit l'axe de rotation de la liaison joint dans la liste des liaisons de la chaîne d'os lorsque is_config_individual() vaut true.
Les axes sont basés sur l'espace de Skeleton3D.get_bone_rest(), si axis vaut ROTATION_AXIS_CUSTOM, vous pouvez spécifier n'importe quel axe.
Note : L'axe de rotation et le vecteur avant ne devraient pas être colinéaires pour éviter une rotation intempestive car SpringBoneSimulator3D ne prend pas en compte les forces de torsion.
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 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) 🔗
Définit l'axe de rotation de la chaîne d'os. S'il est défini à un axe spécifique, il agit comme une liaison avec charnière. La valeur est mise en cache dans chaque paramètre de liaison dans la liste des liaisons.
Les axes sont basés sur l'espace de Skeleton3D.get_bone_rest(), si axis vaut ROTATION_AXIS_CUSTOM, vous pouvez spécifier n'importe quel axe.
Note : Le vecteur d'axe de rotation et le vecteur avant ne devraient pas être colinéaires pour éviter une rotation intempestive car SpringBoneSimulator3D ne prend pas en compte les forces de torsion.
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 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.