IterateIK3D

Наследует: ChainIK3D < IKModifier3D < SkeletonModifier3D < Node3D < Node < Object

Наследуется от: CCDIK3D, FABRIK3D, JacobianIK3D

SkeletonModifier3D, позволяющий приблизиться к цели путем повторения небольших вращений.

Описание

Базовый класс SkeletonModifier3D используется для достижения цели путем повторения небольших вращений.

Каждая цепочка костей (настройка) имеет один эффектор, который обрабатывается в порядке списка настроек. Для каждого сустава можно установить определенные ограничения.

Свойства

float

angular_delta_limit

0.034906585

bool

deterministic

false

int

max_iterations

4

float

min_distance

0.001

int

setting_count

0

Методы

JointLimitation3D

get_joint_limitation(index: int, joint: int) const

SecondaryDirection

get_joint_limitation_right_axis(index: int, joint: int) const

Vector3

get_joint_limitation_right_axis_vector(index: int, joint: int) const

Quaternion

get_joint_limitation_rotation_offset(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

NodePath

get_target_node(index: int) const

void

set_joint_limitation(index: int, joint: int, limitation: JointLimitation3D)

void

set_joint_limitation_right_axis(index: int, joint: int, direction: SecondaryDirection)

void

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

void

set_joint_limitation_rotation_offset(index: int, joint: int, offset: Quaternion)

void

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

void

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

void

set_target_node(index: int, target_node: NodePath)


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

float angular_delta_limit = 0.034906585 🔗

  • void set_angular_delta_limit(value: float)

  • float get_angular_delta_limit()

Максимальное значение, на которое каждая кость может повернуться за одну итерацию.

Примечание: Это ограничение применяется на каждой итерации. Например, если max_iterations равно 4 и angular_delta_limit равно 5 градусам, то максимальное возможное вращение за один кадр составляет 20 градусов.


bool deterministic = false 🔗

  • void set_deterministic(value: bool)

  • bool is_deterministic()

Если false, результат вычисляется на основе результата IterateIK3D предыдущего кадра в качестве начального состояния.

Если true, результат IterateIK3D предыдущего кадра отбрасывается. В этот момент новый результат вычисляется на основе положения кости без учета IterateIK3D в качестве начального состояния. Это означает, что результат всегда будет равен, пока целевая позиция и предыдущая позиция кости совпадают. Однако, если значения angular_delta_limit и max_iterations установлены слишком мало, конечная кость цепочки никогда не достигнет цели.


int max_iterations = 4 🔗

  • void set_max_iterations(value: int)

  • int get_max_iterations()

Количество итераций, используемых решателем обратной кинематики для получения более точных результатов.


float min_distance = 0.001 🔗

  • void set_min_distance(value: float)

  • float get_min_distance()

Минимальное расстояние между конечной костью и целью. Если расстояние меньше этого значения, решатель обратной кинематики прекращает дальнейшие итерации.


int setting_count = 0 🔗

  • void set_setting_count(value: int)

  • int get_setting_count()

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


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

JointLimitation3D get_joint_limitation(index: int, joint: int) const 🔗

Возвращает ограничение по суставу в joint в списке суставов костной цепи.


SecondaryDirection get_joint_limitation_right_axis(index: int, joint: int) const 🔗

Возвращает ограничение по оси правого сустава в точке joint в списке суставов костной цепи.


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

Возвращает вектор правой оси ограничения сустава в точке joint в списке суставов костной цепи.

Если get_joint_limitation_right_axis() равен SkeletonModifier3D.SECONDARY_DIRECTION_NONE, этот метод возвращает Vector3(0, 0, 0).


Quaternion get_joint_limitation_rotation_offset(index: int, joint: int) const 🔗

Возвращает смещение вращения ограничения сустава в joint в списке суставов костной цепи.

Вращение выполняется в локальном пространстве, которое строится на основе направления кости (как правило, от родителя к потомку) как оси +Y и get_joint_limitation_right_axis_vector() как оси +X.

Если оси +X и +Y не ортогональны, ось +X неявно изменяется, чтобы сделать её ортогональной.

Также, если длина get_joint_limitation_right_axis_vector() равна нулю, пространство создаётся путём вращения опоры кости с использованием кратчайшей дуги, которая поворачивает ось +Y опоры кости в соответствии с направлением кости.


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


NodePath get_target_node(index: int) const 🔗

Возвращает целевой узел, до которого пытается добраться конечная кость.


void set_joint_limitation(index: int, joint: int, limitation: JointLimitation3D) 🔗

Устанавливает ограничение на количество суставов в joint в списке суставов костной цепи.


void set_joint_limitation_right_axis(index: int, joint: int, direction: SecondaryDirection) 🔗

Устанавливает ограничение по оси вращения сустава справа в точке joint в списке суставов костной цепи.


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

Устанавливает необязательный вектор оси ограничения сустава справа в joint в списке суставов костной цепи.


void set_joint_limitation_rotation_offset(index: int, joint: int, offset: Quaternion) 🔗

Устанавливает смещение вращения ограничения сустава в joint в списке суставов костной цепи.

Вращение выполняется в локальном пространстве, которое строится на основе направления кости (как правило, от родителя к потомку) как оси +Y и get_joint_limitation_right_axis_vector() как оси +X.

Если оси +X и +Y не ортогональны, ось +X неявно изменяется, чтобы сделать её ортогональной.

Также, если длина get_joint_limitation_right_axis_vector() равна нулю, пространство создаётся путём вращения опоры кости с использованием кратчайшей дуги, которая поворачивает ось +Y опоры кости в соответствии с направлением кости.


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

Устанавливает ось вращения в точке joint в списке суставов цепочки костей.

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

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


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

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

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

Если длина вектора равна 0, он считается синонимом SkeletonModifier3D.ROTATION_AXIS_ALL.


void set_target_node(index: int, target_node: NodePath) 🔗

Задает целевой узел, до которого пытается добраться конечная кость.