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 и его кости не масштабированы.

Свойства

Vector3

external_force

Vector3(0, 0, 0)

int

setting_count

0

Методы

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)


Перечисления

enum BoneDirection: 🔗

BoneDirection BONE_DIRECTION_PLUS_X = 0

Перечисленное значение для оси +X.

BoneDirection BONE_DIRECTION_MINUS_X = 1

Перечисленное значение для оси -X.

BoneDirection BONE_DIRECTION_PLUS_Y = 2

Перечисленное значение для оси +Y.

BoneDirection BONE_DIRECTION_MINUS_Y = 3

Перечисленное значение для оси -Y.

BoneDirection BONE_DIRECTION_PLUS_Z = 4

Перечисленное значение для оси +Z.

BoneDirection BONE_DIRECTION_MINUS_Z = 5

Перечисленное значение для оси -Z.

BoneDirection BONE_DIRECTION_FROM_PARENT = 6

Перечисленное значение для оси от родительской кости до дочерней кости.


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 рассматривается как центр.


enum RotationAxis: 🔗

RotationAxis ROTATION_AXIS_X = 0

Перечисленное значение для вращения оси X.

RotationAxis ROTATION_AXIS_Y = 1

Перечисленное значение для вращения оси Y.

RotationAxis ROTATION_AXIS_Z = 2

Перечисленное значение для вращения оси Z.

RotationAxis ROTATION_AXIS_ALL = 3

Перечисленное значение для неограниченного вращения.

RotationAxis ROTATION_AXIS_CUSTOM = 4

Перечисленное значение для необязательной оси вращения. См. также set_joint_rotation_axis_vector().


Описания свойств

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

  • void set_external_force(value: Vector3)

  • Vector3 get_external_force()

Постоянная сила, которая всегда воздействует на кости. Она равна результату, когда родитель Skeleton3D движется с этой скоростью в противоположном направлении.

Это полезно для таких эффектов, как ветер и антигравитация.


int setting_count = 0 🔗

  • void set_setting_count(value: int)

  • int get_setting_count()

Количество настроек.


Описания метода

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() равен 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 🔗

Возвращает вектор оси вращения костной цепи. Этот вектор представляет ось, вокруг которой может вращаться костная цепь. Он определяется на основе оси вращения, установленной для костной цепи.

Если get_rotation_axis() равен ROTATION_AXIS_ALL, этот метод возвращает 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) 🔗

Устанавливает ось вращения в joint в списке суставов цепочки костей, когда is_config_individual() равен true.

Оси основаны на пространстве Skeleton3D.get_bone_rest(), если axis равен ROTATION_AXIS_CUSTOM, вы можете указать любую ось.

Примечание: Ось вращения и прямой вектор не должны быть коллинеарными, чтобы избежать непреднамеренного вращения, поскольку SpringBoneSimulator3D не учитывает скручивающие силы.


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

Задает вектор оси вращения для указанного сустава в костной цепи.

Этот вектор нормализуется внутренним процессом и представляет собой ось, вокруг которой может вращаться костная цепь.

Если длина вектора равна 0, он считается синонимом 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) 🔗

Устанавливает ось вращения цепи костей. Если задана конкретная ось, она действует как шарнирное сочленение. Значение кэшируется в каждой настройке сочленения в списке сочленений.

Оси основаны на пространстве Skeleton3D.get_bone_rest(), если axis — это ROTATION_AXIS_CUSTOM, вы можете указать любую ось.

Примечание: Вектор оси вращения и прямой вектор не должны быть коллинеарными, чтобы избежать непреднамеренного вращения, поскольку SpringBoneSimulator3D не учитывает скручивающие силы.


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

Задает вектор оси вращения цепи костей. Значение кэшируется в каждой настройке сустава в списке суставов.

Этот вектор нормализуется внутренним процессом и представляет собой ось, вокруг которой может вращаться цепь костей.

Если длина вектора равна 0, он считается синонимом 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) 🔗

Устанавливает кривую демпфирования силы жесткости костной цепи.