SpringBoneSimulator3D
Наследует: SkeletonModifier3D < Node3D < Node < Object
SkeletonModifier3D для применения инерционных колебаний к цепям костей.
Описание
Этот SkeletonModifier3D можно использовать для покачивания волос, ткани и хвостов. Этот модификатор ведет себя иначе, чем PhysicalBoneSimulator3D, поскольку он пытается вернуть исходную позу после модификации.
Если вы настроите set_root_bone() и set_end_bone(), он будет рассматриваться как одна цепочка костей. Обратите внимание, что он не поддерживает разветвленную цепь, например, Y-образные цепи.
Когда создается цепочка костей, из костей, которые находятся между ними и перечислены в списке суставов, генерируется массив.
К каждому суставу можно применить несколько свойств, например set_joint_stiffness(), set_joint_drag() и set_joint_gravity().
Для простоты вы можете задать значения для всех суставов одновременно с помощью Curve. Если вы хотите указать подробные значения по отдельности, установите set_individual_config() на true.
Для физического моделирования SpringBoneSimulator3D может иметь дочерние элементы для самостоятельного столкновения, не связанным с PhysicsServer3D, см. также SpringBoneCollision3D.
Предупреждение: Масштабированный SpringBoneSimulator3D скорее всего не будет вести себя так, как ожидается. Убедитесь, что родительский Skeleton3D и его кости не масштабированы.
Свойства
|
||
|
||
|
Методы
Перечисления
enum CenterFrom: 🔗
CenterFrom CENTER_FROM_WORLD_ORIGIN = 0
Начало координат мира определяется как центр.
CenterFrom CENTER_FROM_NODE = 1
Node3D, указанный set_center_node(), определяется как центр.
Если Node3D не найден, родительский Skeleton3D рассматривается как центр.
CenterFrom CENTER_FROM_BONE = 2
Начало позы кости родителя Skeleton3D, указанное в set_center_bone(), определяется как центр.
Если Node3D не найден, родитель Skeleton3D рассматривается как центр.
Описания свойств
Vector3 external_force = Vector3(0, 0, 0) 🔗
Постоянная сила, которая всегда воздействует на кости. Она равна результату, когда родитель Skeleton3D движется с этой скоростью в противоположном направлении.
Это полезно для таких эффектов, как ветер и антигравитация.
bool mutable_bone_axes = true 🔗
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.
Количество настроек.
Описания метода
bool are_all_child_collisions_enabled(index: int) const 🔗
Возвращает true, если все дочерние SpringBoneCollision3D содержатся в списке столкновений по адресу index в настройках.
void clear_collisions(index: int) 🔗
Удаляет все столкновения из списка столкновений по адресу index в настройках, когда are_all_child_collisions_enabled() имеет значение false.
void clear_exclude_collisions(index: int) 🔗
Удаляет все исключенные столкновения из списка столкновений по адресу index в настройках, когда are_all_child_collisions_enabled() имеет значение true.
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 🔗
Возвращает количество столкновений в списке столкновений цепочки костей, когда are_all_child_collisions_enabled() равен false.
NodePath get_collision_path(index: int, collision: int) const 🔗
Возвращает путь к узлу SpringBoneCollision3D в collision в списке столкновений цепочки костей, когда are_all_child_collisions_enabled() имеет значение false.
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 🔗
Возвращает направление хвоста конечной кости цепочки костей, когда is_end_bone_extended() имеет значение true.
float get_end_bone_length(index: int) const 🔗
Возвращает длину хвостовой части конечной кости цепочки костей, когда is_end_bone_extended() имеет значение true.
String get_end_bone_name(index: int) const 🔗
Возвращает имя конечной кости цепочки костей.
int get_exclude_collision_count(index: int) const 🔗
Возвращает количество исключенных столкновений из списка исключенных столкновений цепочки костей, когда are_all_child_collisions_enabled() имеет значение true.
NodePath get_exclude_collision_path(index: int, collision: int) const 🔗
Возвращает путь к узлу SpringBoneCollision3D в collision в списке исключений столкновений цепочки костей, когда are_all_child_collisions_enabled() имеет значение true.
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 🔗
Возвращает индекс кости в joint в списке суставов цепочки костей.
String get_joint_bone_name(index: int, joint: int) const 🔗
Возвращает имя кости в joint в списке суставов цепочки костей.
int get_joint_count(index: int) const 🔗
Возвращает количество суставов в списке суставов цепочки костей.
float get_joint_drag(index: int, joint: int) const 🔗
Возвращает силу сопротивления в joint в списке суставов цепочки костей.
float get_joint_gravity(index: int, joint: int) const 🔗
Возвращает величину гравитации в точке joint в списке суставов цепи костей.
Vector3 get_joint_gravity_direction(index: int, joint: int) const 🔗
Возвращает направление гравитации в точке joint в списке суставов цепочки костей.
float get_joint_radius(index: int, joint: int) const 🔗
Возвращает радиус в точке joint в списке суставов цепочки костей.
RotationAxis get_joint_rotation_axis(index: int, joint: int) const 🔗
Возвращает ось вращения в joint в списке суставов цепочки костей.
Vector3 get_joint_rotation_axis_vector(index: int, joint: int) const 🔗
Возвращает вектор оси вращения для указанного сустава в костной цепи. Этот вектор представляет ось, вокруг которой может вращаться сустав. Он определяется на основе оси вращения, заданной для сустава.
Если get_joint_rotation_axis() равен SkeletonModifier3D.ROTATION_AXIS_ALL, этот метод возвращает Vector3(0, 0, 0).
float get_joint_stiffness(index: int, joint: int) const 🔗
Возвращает силу жесткости в joint в списке суставов цепи костей.
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 🔗
Returns the rotation axis vector of the bone chain. This vector represents the axis around which the bone chain can rotate. It is determined based on the rotation axis set for the bone chain.
If get_rotation_axis() is SkeletonModifier3D.ROTATION_AXIS_ALL, this method returns Vector3(0, 0, 0).
float get_stiffness(index: int) const 🔗
Возвращает силу жесткости костной цепи.
Curve get_stiffness_damping_curve(index: int) const 🔗
Возвращает кривую демпфирования силы жесткости костной цепи.
bool is_config_individual(index: int) const 🔗
Возвращает true, если конфигурацию можно редактировать индивидуально для каждого сочленения.
bool is_end_bone_extended(index: int) const 🔗
Возвращает true, если конечная кость удлинена и имеет хвост.
void reset() 🔗
Сбрасывает состояние симуляции относительно текущей позы кости.
Полезно для предотвращения резкого изменения результата симуляции. Например, вызов этого метода сразу после вызова AnimationPlayer.play() без затухания или в предыдущем сигнале SkeletonModifier3D.modification_processed, если его состояние существенно изменилось.
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) 🔗
Устанавливает, откуда в цепочке костей берется центр.
Движение костей рассчитывается на основе разницы в относительном расстоянии между центром и костью в предыдущем и следующем кадрах.
Например, если родительский Skeleton3D используется в качестве центра, кости считаются не перемещенными, если Skeleton3D перемещается в мире.
В этом случае только изменение позы кости считается перемещением кости.
void set_center_node(index: int, node_path: NodePath) 🔗
Устанавливает путь центрального узла цепочки костей.
void set_collision_count(index: int, count: int) 🔗
Устанавливает количество столкновений в списке столкновений в index в настройках, когда are_all_child_collisions_enabled() имеет значение false.
void set_collision_path(index: int, collision: int, node_path: NodePath) 🔗
Устанавливает путь узла SpringBoneCollision3D в collision в списке столкновений цепочки костей, когда are_all_child_collisions_enabled() имеет значение false.
void set_drag(index: int, drag: float) 🔗
Устанавливает силу сопротивления цепи костей. Чем больше значение, тем сильнее подавляется покачивание.
Значение масштабируется set_drag_damping_curve() и кэшируется в каждой настройке сустава в списке суставов.
void set_drag_damping_curve(index: int, curve: Curve) 🔗
Устанавливает кривую затухания силы сопротивления цепи костей.
void set_enable_all_child_collisions(index: int, enabled: bool) 🔗
Если enabled имеет значение true, все дочерние SpringBoneCollision3D сталкиваются, а set_exclude_collision_path() включен как список исключений в index в настройках.
Если enabled имеет значение false, вам необходимо вручную зарегистрировать все допустимые столкновения с помощью set_collision_path().
void set_end_bone(index: int, bone: int) 🔗
Устанавливает индекс конечной кости в костной цепи.
void set_end_bone_direction(index: int, bone_direction: BoneDirection) 🔗
Устанавливает направление хвоста конечной кости цепочки костей, когда is_end_bone_extended() имеет значение true.
void set_end_bone_length(index: int, length: float) 🔗
Устанавливает длину конечной кости цепи костей, когда is_end_bone_extended() имеет значение true.
void set_end_bone_name(index: int, bone_name: String) 🔗
Задает имя конечной кости цепочки костей.
Примечание: Конечная кость должна быть корневой костью или дочерней костью корневой кости. Если они одинаковы, хвост должен быть расширен set_extend_end_bone(), чтобы покачивать кость.
void set_exclude_collision_count(index: int, count: int) 🔗
Устанавливает количество исключаемых столкновений в списке исключаемых столкновений в index в настройках, когда are_all_child_collisions_enabled() имеет значение true.
void set_exclude_collision_path(index: int, collision: int, node_path: NodePath) 🔗
Устанавливает путь узла SpringBoneCollision3D в collision в списке исключений столкновений цепочки костей, когда are_all_child_collisions_enabled() имеет значение true.
void set_extend_end_bone(index: int, enabled: bool) 🔗
Если enabled равно true, конечная кость удлиняется, образуя хвост.
Конфигурация расширенного хвоста назначается последнему элементу в списке суставов. Другими словами, если вы установите enabled в false, конфигурация последнего элемента в списке суставов не повлияет на результат моделирования.
void set_gravity(index: int, gravity: float) 🔗
Устанавливает величину гравитации цепи костей. Это значение не является ускорением, а постоянной скоростью движения в set_gravity_direction().
Если gravity не равен 0, измененная поза не вернется к исходной позе, поскольку на нее всегда влияет гравитация.
Значение масштабируется set_gravity_damping_curve() и кэшируется в каждой настройке сочленения в списке сочленений.
void set_gravity_damping_curve(index: int, curve: Curve) 🔗
Устанавливает кривую затухания величины гравитации костной цепи.
void set_gravity_direction(index: int, gravity_direction: Vector3) 🔗
Устанавливает направление гравитации цепи костей. Это значение внутренне нормализуется, а затем умножается на set_gravity().
Значение кэшируется в каждой настройке сустава в списке суставов.
void set_individual_config(index: int, enabled: bool) 🔗
Если enabled имеет значение true, конфигурацию можно редактировать индивидуально для каждого соединения.
void set_joint_drag(index: int, joint: int, drag: float) 🔗
Устанавливает силу сопротивления в joint в списке суставов цепочки костей, когда is_config_individual() имеет значение true.
void set_joint_gravity(index: int, joint: int, gravity: float) 🔗
Устанавливает величину гравитации в joint в списке суставов цепочки костей, когда is_config_individual() имеет значение true.
void set_joint_gravity_direction(index: int, joint: int, gravity_direction: Vector3) 🔗
Устанавливает направление гравитации в joint в списке суставов цепочки костей, когда is_config_individual() имеет значение true.
void set_joint_radius(index: int, joint: int, radius: float) 🔗
Устанавливает радиус сустава в joint в списке суставов цепочки костей, когда is_config_individual() имеет значение 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 Skeleton3D.get_bone_rest()'s space, if axis is SkeletonModifier3D.ROTATION_AXIS_CUSTOM, you can specify any axis.
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) 🔗
Задает вектор оси вращения для указанного сустава в костной цепи.
Этот вектор нормализуется внутренним процессом и представляет ось, вокруг которой может вращаться костная цепь.
Если длина вектора равна 0, он считается синонимом SkeletonModifier3D.ROTATION_AXIS_ALL.
void set_joint_stiffness(index: int, joint: int, stiffness: float) 🔗
Устанавливает силу жесткости в joint в списке суставов костной цепи, когда is_config_individual() имеет значение true.
void set_radius(index: int, radius: float) 🔗
Устанавливает радиус сочленения цепочки костей. Используется для перемещения и скольжения с SpringBoneCollision3D в списке столкновений.
Значение масштабируется set_radius_damping_curve() и кэшируется в каждой настройке сочленения в списке сочленений.
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) 🔗
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 Skeleton3D.get_bone_rest()'s space, if axis is SkeletonModifier3D.ROTATION_AXIS_CUSTOM, you can specify any axis.
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) 🔗
Sets the rotation axis vector of the bone chain. The value is cached in each joint setting in the joint list.
This vector is normalized by an internal process and represents the axis around which the bone chain can rotate.
If the vector length is 0, it is considered synonymous with SkeletonModifier3D.ROTATION_AXIS_ALL.
void set_stiffness(index: int, stiffness: float) 🔗
Устанавливает силу жесткости цепи костей. Чем больше значение, тем быстрее она восстанавливается до исходной позы.
Если stiffness равен 0, измененная поза не вернется к исходной позе.
Значение масштабируется set_stiffness_damping_curve() и кэшируется в каждой настройке сустава в списке суставов.
void set_stiffness_damping_curve(index: int, curve: Curve) 🔗
Устанавливает кривую демпфирования силы жесткости костной цепи.