IterateIK3D
SkeletonModifier3D, позволяющий приблизиться к цели путем повторения небольших вращений.
SkeletonModifier3D, позволяющий приблизиться к цели путем повторения небольших вращений.
Базовый класс SkeletonModifier3D :: подход к достижению цели путем повторения небольших ротаций.
У каждой цепи костей есть один исполнитель, который обрабатывается в порядке списка. Вы можете установить некоторые ограничения для каждого сустава.
Примечание: Все методы в этом классе принимают index параметр. Этот параметр указывает, какая строка списка для возвращения, если IK имеет несколько записей (например. settings/<index>/target_node).
Примечание: Когда IterateIK3D.SetJointRotationAxis или IterateIK3D.SetJointLimitation Это происходит потому, что IK вычисляет путь через итерации, а в некоторых случаях он может достичь предела в ходе процесса и не решить его. SkeletonModifier3Ds и порядок итерации вручную.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства5
AngularDeltaLimitСвойство
public double AngularDeltaLimit { get; set; }Максимальное значение, на которое каждая кость может повернуться за одну итерацию.
Примечание: Это ограничение применяется на каждой итерации. Например, если IterateIK3D.MaxIterations равно 4 и IterateIK3D.AngularDeltaLimit равно 5 градусам, то максимальное возможное вращение за один кадр составляет 20 градусов.
DeterministicСвойство
public bool Deterministic { get; set; }Если false, результат вычисляется на основе результата IterateIK3D предыдущего кадра в качестве начального состояния.
Если true, результат IterateIK3D предыдущего кадра отбрасывается. В этот момент новый результат вычисляется на основе положения кости без учета IterateIK3D в качестве начального состояния. Это означает, что результат всегда будет равен, пока целевая позиция и предыдущая позиция кости совпадают. Однако, если значения IterateIK3D.AngularDeltaLimit и IterateIK3D.MaxIterations установлены слишком мало, конечная кость цепочки никогда не достигнет цели.
MaxIterationsСвойство
public int MaxIterations { get; set; }Количество итераций, используемых решателем обратной кинематики для получения более точных результатов.
MinDistanceСвойство
public double MinDistance { get; set; }Минимальное расстояние между конечной костью и целью. Если расстояние меньше этого значения, решатель обратной кинематики прекращает дальнейшие итерации.
SettingCountСвойство
public int SettingCount { get; set; }Количество настроек.
Методы24
GetAngularDeltaLimitdouble
public double GetAngularDeltaLimit();doubleGetJointLimitationJointLimitation3D
public JointLimitation3D GetJointLimitation(int index, int joint);Возвращает ограничение по суставу в joint в списке суставов костной цепи.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
JointLimitation3DGetJointLimitationRightAxisSkeletonModifier3D.SecondaryDirection
public SkeletonModifier3D.SecondaryDirection GetJointLimitationRightAxis(int index, int joint);Возвращает ограничение по оси правого сустава в точке joint в списке суставов костной цепи.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
SkeletonModifier3D.SecondaryDirectionGetJointLimitationRightAxisVectorVector3
public Vector3 GetJointLimitationRightAxisVector(int index, int joint);Возвращает вектор правой оси ограничения сустава в точке joint в списке суставов костной цепи.
Если IterateIK3D.GetJointLimitationRightAxis равен SkeletonModifier3D.SecondaryDirection.None, этот метод возвращает Vector3(0, 0, 0).
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
Vector3GetJointLimitationRotationOffsetQuaternion
public Quaternion GetJointLimitationRotationOffset(int index, int joint);Возвращает совместную ротацию ограничений, joint в суставном списке костей.
Вращение производится в местном пространстве, которое строится по направлению кости (в целом от родителя к ребенку) в качестве оси +Y и IterateIK3D.GetJointLimitationRightAxisVector как ось +X.
Если оси +X и +Y не являются ортогональными, то ось +X имплицитно изменяется для того, чтобы сделать ее ортогональной.
Кроме того, если длина IterateIK3D.GetJointLimitationRightAxisVector - ноль, пространство создается путем вращения исходной позы с использованием самой короткой дуги, которая вращается осью +Y исходной позы, с тем чтобы она соответствовала направлению кости.
Здесь эталонная поза представляет собой костный отсек или кость сразу же перед обработкой IK в зависимости от IterateIK3D.IsJointUsingRestForLimitation.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
QuaternionGetJointRotationAxisSkeletonModifier3D.RotationAxis
public SkeletonModifier3D.RotationAxis GetJointRotationAxis(int index, int joint);Возвращает ось вращения в joint в списке суставов цепочки костей.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
SkeletonModifier3D.RotationAxisGetJointRotationAxisVectorVector3
public Vector3 GetJointRotationAxisVector(int index, int joint);Возвращает вектор оси вращения для указанного сустава в костной цепи. Этот вектор представляет ось, вокруг которой может вращаться сустав. Он определяется на основе оси вращения, заданной для сустава.
Если IterateIK3D.GetJointRotationAxis равен SkeletonModifier3D.RotationAxis.All, этот метод возвращает Vector3(0, 0, 0).
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
Vector3GetMaxIterationsint
public int GetMaxIterations();intGetMinDistancedouble
public double GetMinDistance();doubleGetTargetEntityEntityPath
public EntityPath GetTargetEntity(int index);Возвращает целевой узел, до которого пытается добраться конечная кость.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
EntityPathIsDeterministicbool
public bool IsDeterministic();boolIsJointUsingRestForLimitationbool
public bool IsJointUsingRestForLimitation(int index, int joint);Возвращается ли ограничение на joint в суставном списке кости применяется на основе Skeleton3D.GetBoneRest.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
boolSetAngularDeltaLimitvoid
public void SetAngularDeltaLimit(double angularDeltaLimit);| Имя | Тип | По умолчанию |
|---|---|---|
angularDeltaLimit | double | — |
SetDeterministicvoid
public void SetDeterministic(bool deterministic);| Имя | Тип | По умолчанию |
|---|---|---|
deterministic | bool | — |
SetJointLimitationvoid
public void SetJointLimitation(int index, int joint, JointLimitation3D limitation);Устанавливает ограничение на количество суставов в joint в списке суставов костной цепи.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
limitation | JointLimitation3D | — |
SetJointLimitationRightAxisvoid
public void SetJointLimitationRightAxis(int index, int joint, SkeletonModifier3D.SecondaryDirection direction);Устанавливает ограничение по оси вращения сустава справа в точке joint в списке суставов костной цепи.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
direction | SkeletonModifier3D.SecondaryDirection | — |
SetJointLimitationRightAxisVectorvoid
public void SetJointLimitationRightAxisVector(int index, int joint, Vector3 vector);Устанавливает необязательный вектор оси ограничения сустава справа в joint в списке суставов костной цепи.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
vector | Vector3 | — |
SetJointLimitationRotationOffsetvoid
public void SetJointLimitationRotationOffset(int index, int joint, Quaternion offset);Устанавливает смещение вращения ограничения сустава в joint в списке суставов цепочки костей.
Вращение выполняется в локальном пространстве, которое строится по направлению кости (как правило, от родителя к потомку) в качестве оси +Y и IterateIK3D.GetJointLimitationRightAxisVector в качестве оси +X.
Если оси +X и +Y не ортогональны, ось +X неявно изменяется, чтобы сделать её ортогональной.
Также, если длина IterateIK3D.GetJointLimitationRightAxisVector равна нулю, пространство создаётся путём вращения эталонной позы с использованием кратчайшей дуги, которая поворачивает ось +Y эталонной позы в соответствии с направлением кости.
В данном случае эталонной позой является поза кости непосредственно перед обработкой обратной кинематики (IK).
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
offset | Quaternion | — |
SetJointRotationAxisvoid
public void SetJointRotationAxis(int index, int joint, SkeletonModifier3D.RotationAxis axis);Установить ось вращения на joint в суставном списке костей.
Ось основана на пространстве исходной позы, если axis это SkeletonModifier3D.RotationAxis.CustomВы можете указать любую ось.
Здесь исходная поза - это кость непосредственно перед обработкой IK.
Примечание: Ось вращения и вектор спереди не должны быть однолинейными, чтобы избежать непреднамеренного вращения, поскольку ChainIK3D не влияет на силу перегиба.
Примечание: С момента IterateIK3D никогда не изменяет поворот, поворот не фиксируется IterateIK3D.SetJointRotationAxis даже если IterateIK3D.IsJointUsingRestForLimitation это true.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
axis | SkeletonModifier3D.RotationAxis | — |
SetJointRotationAxisVectorvoid
public void SetJointRotationAxisVector(int index, int joint, Vector3 axisVector);Задает вектор оси вращения для указанного сустава в костной цепи.
Этот вектор нормализуется внутренним процессом и представляет ось, вокруг которой может вращаться костная цепь.
Если длина вектора равна 0, он считается синонимом SkeletonModifier3D.RotationAxis.All.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
axisVector | Vector3 | — |
SetJointUseRestForLimitationvoid
public void SetJointUseRestForLimitation(int index, int joint, bool enabled);Устанавливается ли ограничение и ось вращения на joint в суставном списке кости применяется на основе Skeleton3D.GetBoneRestСм. также IterateIK3D.SetJointRotationAxis.
Примечание: Это ограничение применяется к вращению, рассчитанному этим модификатором. Если исходная поза поворачивается вокруг одной и той же оси, то ограничение действует так, как если бы оно также ограничивало вращение исходной позы. Вращение, которое этот изменяющий не изменяется, например поворот, не ограничивается.
Примечание: Определённая форма ограничения Gizmo будет уважать исходную позу, только когда эта опция false и модификатор активирован.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
joint | int | — |
enabled | bool | — |
SetMaxIterationsvoid
public void SetMaxIterations(int maxIterations);| Имя | Тип | По умолчанию |
|---|---|---|
maxIterations | int | — |
SetMinDistancevoid
public void SetMinDistance(double minDistance);| Имя | Тип | По умолчанию |
|---|---|---|
minDistance | double | — |
SetTargetEntityvoid
public void SetTargetEntity(int index, EntityPath targetEntity);Задает целевой узел, до которого пытается добраться конечная кость.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
targetEntity | EntityPath | — |