Инверсная кинематика (только для Pro версий). Скелетная анимация, прямая и инверсная кинематика

Что такое «Инверсная кинематика»?

Задачей инверсной кинематики является поиск такого набора конфигураций сочленений, который обеспечил бы максимально мягкое, быстрое и точное движение к заданным точкам. Однако, множество существующих ныне методов страдают от таких недостатков как высокая вычислительная сложность и неестественность результирующих поз. В этой статье описан новый (вероятно, на момент написания статьи - 2010 г. ) эвристический метод под названием «Метод прямого и обратного следования» (Forward and Backward Reaching Inverse Kinematics , далее просто FABRIK),
FABRIK избегает использования вращений и матриц в пользу непосредственного получения точки на прямой. Благораря этому, дело обходится всего несколькими итерациями, имеет низкую стоимость вычислений и визуально естественную позу в результате. FABRIK так-же без проблем справляется с наложением ограничений а так-же использованием нескольких цепей и/или конечных точек. Именно об этом методе этот пост.

Прошу отнестись с пониманием к этой выжимке, потому-что оригинал довольно большой, имеет много воды, уместных и неуместных повторений и отстранений от темы, а так-же сравнений с другими алгоритмами. Этим я решил все-таки пренебречь, поэтому, тут содержится лишь малая часть текста, которая, однако, отражает суть - прим. перев.

1. Искусственная модель тела

Система из множества твёрдых тел состоит из набора твёрдых тел, называемых узлами, соединёнными вместе рёбрами. Все рёбра являются компонентами concerned с движением: они ограничивают перемещения в пределах некоторого угла относительно соседних рёбер. Моделирование виртуального тела важно для вычисления позы человека. Модель с правильно расставленными ограничениями позволит получить набор правильных поз, что даст возможность получить более реалистичное движение. Большинство моделей подразумевают твёрдость частей тела, хотя это просто примерное приближение к реальности.
Скелет обычно смоделирован в виде иерархии твёрдых сегментов соединённых рёбрами, каждое из которых задано такими свойствами как длинна, форма, обьём и масса. Манипулятор, на манер робо-руки или анимированного персонажа, смоделиован как цепь, собранная из твёрдых узлов, сопряженных друг с другом рёбрами. Каждое перемещение и/или вращение кости с индексом i влияет на все последующие элементы цепи. Цепь можно формализовать следующим образом: всякий узел без дочерних элементов следует величать конечной точкой; для каждой конечной точки цепь может быть сформирована движением обратно по скелету, от родителя к родителю до тех пор, пока не будет встречен корневой узел цепи (начало цепи). По определению, в задаче IK предполагается статичность корневого узла. Однако, методы обычно справляются с перемещением корня.

Алгоритм полного цикла алгоритма FABRIK (псевдокод, первый элемент массива под индексом 1)

Исходные данные: массив позиций узлов p[i] с i = 1...n, целевая позиция t и значения дистанций между сопряжёнными узлами. d[i] = | p -t | for i = 1, ... , n-1 Выходные данные: Новые позиции p[i], i = 1...n //Дистанция между корнем и целью dist = | p - t | //Проверяем достижимость цели if dist > d + d + ... + d { //цель недостижима for i = 1, ..., n-1 do { //Найдем дистанцию r[i] между целью t и узлом p[i] r[i] = | t - p[i] | lambda[i] = d[i] / r[i] //Находим новую позицию узла p[i] p = (1 - lambda[i]) * p[i] + lambda[i] * t } } else { //Дель достижима; т.о. b будет новой позицией узла p b = p //Проверяем, не выше ли дистанция между конечным узлом p[n] и //целевой позицией t значения терпимости (tolerance) DIFa = | p[n] - t | while DIFa > tol do { //Этап 1: прямое следование //Устанавливаем конечный узел p[n] в качестве цели (вероятно, имелось ввиду "ставим на позицию цели" - прим. перев.) p[n] = t for i=n -1 , ..., 1 do { //Получаем расстояние r[i] между узлом p[i] и новой позицией p r[i] = | p - p[i] | lambda[i] = d[i] / r[i] //Вычисляем новую позицию узла p[i] p[i] = (1 - lambda[i]) * p + lambda[i] * p[i] } //Этап 2: обратное следование //Устанавливаем корневому элементу p начальную позицию p[i] = b for i=1 ,..., n - 1 do { //Получаем дистанцию r[i] между узлом p и позицией p[i] r[i] = | p - p[i] | lambda[i] = d[i] / r[i] //Получаем новую позицию p[i] p = (1-lambda[i]) * p[i] + lambda[i] * p } DIFa = | p[n] - t | } }

2.FABRIK - новое эвристическое решение задачи IK

В этой части предоставляется суть метода FABRIK. Он использует позиции, уже рассчитанные в режимах прямого и обратного следования. FABRIK достигает минимизации ошибки путём единоразовой подстройки угла каждого узла. Т.е. происходит обход всей цепи, начиная с последнего узла, с подстройкой угла каждого обойдённого узла, после чего, происходит обход цепи уже в обратном направлении. Этот метод, в отличие от преобразования вращений, обращает задачу поиска позиции узла в задачу поиска точки на прямой; следовательно, можно сэкономить время и уменьшить количество вычислений. Предположим что множество p,…, p[n] является множеством позиций узлов манипулятора. Также, предположим что p является корневым узлом и p[n] является конечным узлом, т.о. для простоты оставим один конечный узел. Цель представлена позицией t и начальной базовой позицией b . Метод FABRIK представлен в листинге выше и графической интерпретации полного цикла на рисунке слева, с одной целевой точкой и четырьмя узлами в цепи. Рассмотрим полный цикл алгоритма на рисунке:

  • a - Начальные позиции манипулятора и цели.
  • b - Двигаем конечный узел p к цели.
  • c - Обнаруживаем позицию p" p" и p , на дистанции d от точки p" .
  • d - Повторяем для всех узлов.
  • e - Вторая стадия алгоритма: передвигаем крневой элемент с позиции p" на его начальную позицию.
  • f - Повторяем для всех узлов, но на этот раз начинаем с базы и двигаемся к конечному узлу. Алгоритм повторяется до тех пор, пока позиция конечного элемента не приблизится к цели на достаточное расстояние.

Более подробно:
Сначала считаются позиции между узлами (массив d ), после чего идёт проверка, достижима ли целевая точка; считается расстояние между корневым узлом и целью (dist ), и если эта дистанция меньше общей суммы дистанций между узлами, то цель достижима, иначе нет. Если цель достижима, полный цикл ограничивается двумя этапами. На первом этапе, алгоритм оценивает начальную позицию каждого узла, начиная с конечного элемента p[n] двигаясь к базе манипулятора p . Таким образом, позволим целевой позиции быть позицией конечного узла, p"[n] = t . Получим прямую l , лежащую на точках p и p"[n] . Новая позиция узла с индексом n-1 , p" , лежит на этой линии на дистанции d от p"[n] . Аналогично, новая позиция узла с индексом n-2 , p" , может быть вычислена используя прямую l , лежащую на точках p и p" на дистанции d от p" . Алгоритм повторяется до тех пор, пока все не будут посчитаны новые позиции для всех узлов, включая конечный. В случаях, когда корневой элемент перемещается на необходимую позицию, FABRIK срабатывает как было описано, тем лишь отличием, что новая позиция p"" корневого узла будет желаемой позицией, а не начальной.
После одной полной итерации, почти во всех случаях (по наблюдениям) конечный узел приблизится к цели. Процедура повторется необходимое количество раз, до тех пор, пока конечный узел не ляжет на позицию цели или не приблизится к ней на допустимую дистанцию. Реализация метода FABRIK без введения ограничителей сойдётся на любой целевой точке/цепи, если цель достижима. Однако, если цель находится дальше достанции, на которую может вытянуться цепь, необходимо прерывающее условие, которое сравнит прошлую и текущую позицию конечного узла, и которое прекратит выполнение алгоритма если смещение конечного узла будет меньше некоторого значения (эпсилона). Так-же, в особых случаях, алгоритм прерывается по истечению некоторого числа итераций (впрочем, пока-что такая ситуация не была встречена).
Для более быстрого результата и решения в несколько итераций, возможна оптимизация с применением Конформной Геометрической Алгебры (Conformal Geometric Algebra, далее CGA); CGA имеет преимущество на базовых фигурах, такие как сферы, прямые, плоскости и окружности, достаточно просто отображаемые алгебраическими обьектами. Поэтому, поиск позиции узла, находящегося между двумя известными узлами, может быть выражен пересечением двух сфер с центрами на соответствующих этим узлам позициям, и радиусом, равным расстоянию между позициям искомого узла и имеющимися; новая позиция узла будет лежать на ближайшей точке окружности, сформированной пересечением двух сфер. Другая простая оптимизация заключается в прямом построении прямой в направлении цели, когда последняя недоступна.

3. Модель с множеством конечных узлов


Как и в случае с одним конечным узлом, алгоритм разбивается на два этапа:

  • Первый этап точно такой-же, только на этот раз начинается от каждого конечного узла с движением внутрь по цепи от этого узла, вплоть до суб-базы (вероятно, суб-базой является узел с несколькими примыкающими к нему рёбрами - прим. перев.). Таким образом, получим столько разных позиций для суб-базы, сколько соединённых с ней конечных узлов у нас имеется. Итоговая же позиция может быть взята как центроид (тобиш, просто среднее арифметическое - прим. перев.) из этих позиций. После этого, выполнение алгоритма продолжается в нормальном режиме, двигаясь от суб-базы до корня. Если суб-базы имеют собственные суб-базы, то по отношению к ним производятся аналогичные действия - так-же составляется список возможных позиций, после чего эта суб-база устанавливается на центроид из всего списка позиций.
  • На втором этапе, обычный алгоритм применяется к каждому узлу, двигаясь всё дальше от корневого узла. При этом, каждая цепь должна быть обработана отдельно вплоть до конечного узла: чем больше суб-баз, тем больше повторений для каждой из них. Процесс повторяется до тех пор, пока конечные узлы не достигнут своей цели или пока не сработает условие прерывания.

4. Ограничители

Ну и наконец, самая вкусная часть этой статьи - рассчёты с применением ограничителей. Нужны они, как уже стоило догадаться, для большего сходства с реальными организмами. Сам же узел, обычно, характеризуется тремя степенями свободы. Вращение узла может быть характеризовано как «простое вращение» (2 степени свободы), которое отражает его конечную позицию, и вращение вокруг собственной оси (1 степень свободы). Таким образом, разделив передвижение узла на две такие фазы, и применив к ним ограничители, можно управлять положением узла. Сами же ограничения можно наложить подобным образом: т.к. алгоритм итеративный, можно применять ограничения вращений на каждой итерации алгоритма. Ограничители, при этом, не повлияют на сходимость алгоритма. Основная же идея применения ограничителей заключается в репозициионировании и переориентации узлов в пределах ограничений.

  • a - Начальные конфигурации манипулятора и цели.
  • b - Двигаем конечный узел p к цели и ориентируем его на неё.
  • c - Обнаруживаем позицию p" , лежащую на линии между позициями p" и p , на дистанции d от точки p" .
  • d - Переориентируем узел на позиции p" таким образом, чтобы он смотрел вдоль ребра, соединяющего p" и p" .
  • e - Вычисление ограничивающего эллипса: разрешённые позиции находятся в затенённом участке. Ни одна из вершин на этом этапе никуда не двигается.
  • f - Узел p перемещается на позицию p^ , который является ближайшей позицией на затенённом эллипсе, удостоверяясь таким образом в том, что новая позиция p^ будет лежать в допустимых пределах.
  • g - Двигаем узел p^ на точку p" , чтобы сохранить длинну ребра.
  • h - Переориентируем p" , чтобы удовлетворить ограниение ориентации.

Эта процедура повторяется для всех узлов, в прямом и обратном порядке, аналогично тому, как в варианте без ограничений осуществлялись перемещения. При этом, ограничение «эллипс», вероятно, является характеристикой ребра, а не узла, т.о. на второй фазе перемещаться на эллипс должен узел p - прим. перев.


Скелетная анимация - это тот самый случай, когда совсем общую теорию объяснить очень просто, а вот добиться реальных результатов, тем более, результатов серьёзных оказывается очень сложно.

Никто, однако, не считает зазорным изучать анимацию годами, натыкаясь на каждом углу на справедливость поговорки «Век живи - век учись».

Если в общем, то скелетная анимация - это анимирование 3D-фигуры посредством относительно небольшого количества управляющих элементов, и внешне и по принципу работы, напоминающие скелет - или строение марионетки.

Как он «изготавливается», мы рассматривали в статье «Риггинг» . От того, насколько разумно и правильно риггинг был выполнен, зависит и результаты первых попыток анимировать что-либо. Если иерархия костей сделана как надо, то и поведение цепочки, равно как и привязанных к ней вершин, будет «жизнеподобным». Ошибки же могут привести к совершенно нелепым последствиям: ноги могут «уехать» за голову, например.

При умелом использовании скелетная анимация позволяет значительнейшим образом экономить на усилиях - естественно, гораздо проще двигать несколько «костей», нежели тягать с места на место группы вершин и полигонов.

Существуют два основных типа планирования движения «скелета» - это прямая кинематика (Forward Kinematics - FK) и инверсная, или обратная кинематика (Inverse Kinematics - IK). Их также выбирают на этапе риггинга, - впрочем, этот процесс от скелетной анимации вообще неотделим.

Итак: создадим отдельно взятую цепочку «костей» - без добавления мяса пока что. Все операции осуществляются в пакете Blender3D, скриншоты, стало быть, тоже оттуда.



Видим четыре кости, где первая - «родительская», все последующие - находятся в последовательной иерархической зависимости от предыдущих.

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



Повернули кость 2 , вместе с ней повернулись (но остались на одной прямой) кости 3 и 4 .

Это прямая кинематика: перемещение старших по иерархии костей приводят к тому, что перемещаются и младшие.

При использовании обратной кинематики алгоритм получается ровно противоположный:




Задав режим автоматического выбора инверсной кинематики (Blender делает вид, что подбирает оптимальный вариант, и иногда вполне успешно), сдвигаем самую младшую в иерархии кость 4 ; вся цепочка послушно изогнулась.

Звено цепочки, изменение положения которого приводит к изменению положения других звеньев, называется effector (существует диковинный перевод «влиятель», но как на самом деле это слово переводить?..).



Подвигали кость 3 . Звенья 1-2 поменяли своё положение, а 4 - осталось на одной прямой со звеном 3 . Кость 3 теперь является effector"ом, и всё, что находится ниже его по иерархии подчиняется алгоритмам прямой кинематики.

Инверсная кинематика применяется главным образом там, где требуется точное расположение конечного звена в нужной точке (например, чтобы при ходьбе ноги персонажа не «проскальзывали» по поверхности или не утопали в полигонах, изображающих твердь земную).

Самое же важное - это грамотная расстановка ограничителей (constraints) для подвижных элементов на этапе риггинга. Конечности модели персонажа должны вести себя «в разумных антропоморфических пределах», например, чтобы колени не прогибались не в ту сторону или пальцы рук не заворачивались за запястье.

Далее начинается процесс автоматизации движений - тут всё делается так же, как и при обычной анимации. Задаются ключевые кадры для отдельных управляющих элементов, и они тащат за собой все остальные. При этом анимационные пакеты вполне могут регистрировать ключевые положения только для индивидуальных костей, для всех звеньев разом или для отдельных их групп. При этом генерируются кривые движения/вращения/масштаба для каждого элемента, участвующего в анимации. Современные пакеты, разумеется, предоставляют в избытке средства, позволяющие экономить на усилиях - например, «глобализовать» управление сразу множеством элементов, группируя их более-менее удобным способом. На скриншоте ниже представлено всё рабочее окно Blender с активированными Action Editor и Timeline Editor.

Тем не менее, сделать качественную анимацию - чудовищно кропотливый процесс, требующий учитывать огромное количество факторов влияния отдельных элементов друг на друга. Как уже сказано в статье про риггинг, при анимации антропо- или зооморфных персонажей следует иметь в виду анатомические особенности их прообразов в реальном мире и соответствующую взаимосвязь элементов.

Ну, и напоследок, добавим, что если целью стоит сделать не «реалистичную» анимацию, а стилизацию под анимацию рисованную, то необходимо иметь в виду пресловутые 12 принципов, заложенные

Мы поработали с инструментом Joint и разобрались, как он работает. Теперь давайте посмотрим, как можно управлять суставами более простым способом. В этой главе я расскажу про некоторые из таких средств, и затем мы сможем использовать их далее для риггинга нашего персонажа. И первым инструментом, с которым я вас познакомлю, это один из самых важных инструментов, о которых вы должны узнать – это инструмент IK Handle. Я просто расскажу, что такое инверсная кинематика (Inverse Kinematics), как она работает и основы того как ее настроить.

Инверсная кинематика - один из двух способов управлять суставами скелета. Первый способ называется Forward Kinematics (прямая кинематика), и по сути это вращение. С помощью него вы поворачиваете и возвращаете суставы на место и это, вероятнее всего, наиболее естественный способ манипулярования, так как наши суставы как раз просто поворачиваются в различных направлениях, а также вокруг друг друга. То есть каждое движение нашего тела - это поворот какого-то сустава.

Инверсная кинематика основана на понятии Goal - цель, то есть места, куда должен повернуться сустав. Это позволяет нам указать конечную позицию сустава при повороте. Самый простой способ запомнить это – понять что, прямая кинематика основана на вращении сустава, а инверсная кинематика основана на позиции сустава, в которой он должен оказаться в пространстве, когда мы вращаем его.

Давайте я вам быстро покажу пример. У меня здесь две одинаковые цепочки суставов. Первая цепочка суставов не имеет обратной кинематики, поэтому управление ею происходит через Forward kinematics, а на нашей правой цепочке у нас установлен IK Handle, позволяющий управлять суставами с использованием Inverse Kinematics. Я перейду к окну проекции вид сбоку. И я немного приближу модель в окне проекции, чтобы лучше видеть.

Еще раз, Forward Kinematics - это поворот. Я хочу выбрать конец этой цепочки суставов и переместить вот этот сустав в центр координат. Я буду вращать все эти суставы вокруг одной точки. Давайте сразу начнем это делать. Я нажму клавишу E, чтобы включить инструмент Rotate, и как видите, когда мы начинаем его вращать, то довольно непросто достичь цели при помощи одних только поворотов. Так что я поверну этот сустав вот так, а этот так, а этот снова поверну немного назад, и возможно нужно опять повернуть этот. Я сейчас делаю все на глаз, и не делаю слишком аккуратно при расположении этих суставов, потому что вращение и положение суставов не слишком совпадают друг с другом.

Inverse kinematics делает этот процесс гораздо более простым. Если мы хотим точно куда-то переместить эту цепочку с инверсной кинематикой, все, что мне нужно сделать, щелкнуть по этому крестику внизу, он называется IK Handle1. Теперь я могу нажать W, чтобы перейти к инструменту Move, и просто переместить мой сустав в цель.

Вот так просто. Мауа автоматически поворачивает все суставы равномерно, чтобы достичь цели. Но если же я например выведу сустав за пределы этой цели, у нас появляются проблемы. Поэтому мы не можем достичь любой точки, какой хотим, но если выбирать точки поближе, все получится. Как вы могли заметить, эти два метода используются в различных ситуациях.

Обычно Forward Kinematics дает нам более естественное перемещение, так как оно основано на поворотах, что очень натурально выглядит в анимации персонажей. Но оба метода имеют место быть. Я показал вам, как это работает, теперь давайте я покажу вам, как быстро их настроить. Давайте создадим новую сцену File / New Scene и получим пустое пространство. И перейдем к окну проекции вид сбоку. Я выберу Skeleton / Joint tool.

Давайте сделаем очень простую цепь суставов, состоящую из двух костей. Я щелкаю левой кнопкой здесь и создам сустав. Я немного смещусь сюда относительно центральной оси, и создам еще один сустав здесь. Мы получили небольшой угол здесь, который укажет Inverse kinematics, в какую сторону мы хотим поворачивать сустав. Мы делали это раньше, в предыдущей главе, и теперь я покажу вам, зачем мы это делаем. Сейчас у нас есть цепочка суставов, поэтому давайте установим Inverse kinematics на эту цепь.

Мы можем перейти в Skeleton, IK handle tool, или можно использовать вот этот значок, они оба работают одинаково. Теперь нам нужно выбрать первый сустав, из которого будем делать IK цепочку, пусть он будет верхним. И теперь последний сустав, он будет нижним. У нас есть промежуточные суставы, но это важно, что я именно выбираю сразу последний.

И у нас появился IKHandle1. Мы можем выбрать его, нажать W, и как видите, мой сустав посередине сгибается в этом направлении. Если бы я сделал мою цепь прямой, IKHandle бы не сработал, так как не понял бы, в каком направлении сгибать сустав, поэтому мы и сделали тут небольшой изгиб. Давайте заглянем в Аутлайнер. Видите, вот наши суставы.

А IKHandle - это отдельный объект и он не находится на цепочке суставов. Поэтому мы можем перемещать его отдельно и менять положение суставов. Вот основы того, как работать с IK Handles и инверсной кинематикой в Мауа.

Поэтому нужно запомнить, что у нас есть два способа управлять суставами, прямая кинематика и инверсная кинематика, и каждый имеет свои преимущества

Инверсная кинематика (инверсная кинематическая анимация , англ. inverse kinematics , IK) - процесс определения параметров связанных гибких объектов (например, кинематическая пара или кинематическая цепь) для достижения необходимой позиции, ориентации и расположения этих объектов. Инверсная кинематика является типом планирования движения (англ. ) . Инверсная кинематика активно используется в робототехнике , трёхмерной компьютерной анимации и в разработке компьютерных игр . Она используется в основном в тех ситуациях, когда необходимо точное позиционирование гибких сочленений одного объекта относительно других объектов окружающей среды. Алгоритм инверсной кинематики противоположен алгоритму прямой кинематики .

Энциклопедичный YouTube

    1 / 3

    Прямая и инверсная кинематика в 3DS Max

    Anime Studio Pro 10, 11(Moho Pro) - Как подключить инверсную кинематику на костяного персонажа

    Полная костная инверсная кинематика в Anime Studio Pro (Moho Pro) / Full Inverse Kinematics

    Субтитры

Описание

Инверсная кинематика, как и прямая , применяются к моделям каких-либо персонажей или объектов, которые созданы с использованием скелетной анимации . Суть скелетной анимации состоит в том, что объект состоит из набора твёрдых сегментов (компонентов), соединённых сочленениями (англ. joint ). При этом сегменты могут объединяться в кинематические пары , которые в свою очередь объединяются в кинематические цепи . Данные сегменты образуют иерархические цепочки, которые имеют «верхний» и «нижний» уровень. Сегменты (компоненты) верхних уровней называются компонентами-предками (или родительскими сегментами), а компоненты нижних - компонентами-потомками (или дочерними сегментами). Например, если рассмотреть руку человека, то плечевой сустав будет самым верхним уровнем, а кончик пальца - самым нижним, т. е. компонентом-потомком к плечевому суставу. Локтевой сустав находится внутри цепочки, он будет иметь как родительские (плечо), так и дочерние (запястье, пальцы) сегменты.

Основным отличием прямой кинематики от инверсной кинематики является то, что при прямой любое воздействие передается по иерархической цепочке сверху вниз. Например, при движении тазобедренного сустава двигаются все потомки, т. е. коленный сустав и все остальные. Инверсная кинематика использует принцип, диаметрально противоположный принципу прямой - перемещение компонентов-потомков приводит к изменению положения компонентов-предков, то есть алгоритм рассчитывает положение и ориентацию компонентов-предков, исходя из положения и ориентации компонентов-потомков.

В инверсной кинематике дочерний сегмент (компонент-потомок), который вызывает изменение положения и ориентацию других объектов и расположен в середине отдельной иерархической цепочке сегментов, называется эффектором (англ. effector ) . Если эффектор является конечным объектом данной иерархической цепочки, то он называется конечным эффектором (англ. end effector ). Именно через эффектор осуществляется манипулирование всей иерархической цепочкой. Изменение положения и/или ориентации конечного эффектора приводит к изменению положения и/или ориентации всех сегментов иерархической цепочки по законам инверсной кинематики. Изменение положения и/или ориентации простого (не конечного) эффектора приводит к тому, что положение объектов, стоящих по иерархии ниже его, меняется по законам прямой кинематики, а объектов с более высокой иерархией - по законам инверсной кинематики.

Ключом к успешной реализации инверсной кинематики является анимация в пределах ограничений (англ. constraints ): конечности модели персонажа должны вести себя в разумных антропоморфических пределах. Точно такая же ситуация и с робототехническими устройствами, которые имеют физические ограничения, такие как среда, в которой они работают, ограничения движения их суставов и ограниченные физические нагрузки и скорости, с которыми они в состоянии работать.

Использование и примеры

Инверсная кинематика является инструментом, который часто используют художники трёхмерной графики . Для художника проще выразить желаемое пространственное действие, чем непосредственно манипулировать углами сочленений. Например, инверсная кинематика позволяет художнику двигать рукой модели трёхмерного гуманоидного персонажа к желаемой позиции и ориентации. При этом сам алгоритм, а не художник, выбирает правильные углы запястья, локтя и плечевого сустава.

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

Другими приложениями, где используется инверсная кинематика, являются приложения компьютерной графики и анимации . Например, аниматоры хотят управлять моделью гуманоидного персонажа, анимация которого генерируется компьютером, однако очень трудно анимировать индивидуальные сочленения. Решение состоит в том, чтобы смоделировать виртуальные сочленения «марионеточной куклы» и позволить аниматору двигать руками, ногами и туловищем куклы, а компьютер с использованием инверсной кинематики автоматически сгенерирует необходимые позиции конечностей для достижения результата.

Инверсная кинематика часто используется в компьютерных играх для создания анимации гуманоидных персонажей. В основном инверсная кинематика используется для создания анимации ног моделей человекоподобного существа или человека. Например, довольно просто создать анимацию передвижения (ходьба, бег) человека или наземного животного, если он движется по ровной плоскости. Однако если ландшафт неровный (бугристый, ухабистый, пересечённая или горная местность), то создание точной анимации ходьбы является фактически невозможной задачей. Анимация ног не будет соответствовать рельефу поверхности, что проявится в таких эффектах, как проскальзывание ног по поверхности и неточном позиционировании ног относительно её (ступня будет «утопать» в поверхность или «не доставать» до неё). Именно для качественного и эффективного решения этих проблем используется инверсная кинематика.

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

Примечания

Внешние ссылки

Англоязычные источники

  • Hugo Elias. Inverse Kinematics Архивировано 13 августа 2011 года.
  • Hugo Elias. Inverse Kinematics - Improved Methods (англ.) . freespace.virgin.net. Проверено 5 июня 2009. Архивировано 13 августа 2011 года.
  • Robot Inverse Kinematics (англ.) . www.learnaboutrobots.com. Проверено 5 июня 2009. Архивировано 13 августа 2011 года.
  • How do the characters in video games move so fluidly? (англ.) . Проверено 5 июня 2009. Архивировано 13 августа 2011 года.
  • Martin John Baker. 3D Theory - Kinematics - Joints  Inverse Kinematics (англ.) . www.euclideanspace.com. Проверено 5 июня 2009. Архивировано 13 августа 2011 года.
  • Lydia E. Kavraki. Protein Inverse Kinematics and the Loop Closure Problem (англ.) . cnx.org. Проверено 5 июня 2009. Архивировано 13 августа 2011 года.
  • Diego Park. Computer Graphics (англ.) . diegopark.googlepages.com. Проверено 5 июня 2009. Архивировано 13 августа 2011 года.
  • Bill Baxter.
В продолжение темы:
Apple

Информация о марке, модели и альтернативных названиях конкретного устройства, если таковые имеются. ДизайнИнформация о размерах и весе устройства, представленная в разных...

Новые статьи
/
Популярные