Если вы хотите «врезаться» в уже существующую инверсную кинематику с «куском» прямой кинематики, сначала поставьте ключи на атрибуты IK Handle и ikBlend на границах этого диапазона. Внутри этого диапазона выключите инверсную кинематику (ikBlend=0), не забудьте поставить ключ на ikBlend и анимируйте на здоровье суставы вручную.
Переключение и смешивание FK и IK
Вы могли также заметить, что до сих пор речь шла только о переключении видов кинематики, то есть о мгновенном переходе в соседних кадрах от одного типа управления к другому. В этом случае все работает достаточно предсказуемо.
Несложно проверить, что если значение атрибута ikBlend будет равно, например, 0.5, на кинематическую цепочку будут усредненно влиять и перемещения IK Handle и вращения суставов. Поэтому если ключевые кадры, в которых атрибут ikBlend принимает значения 0 и 1, не будут
соседними, вы получите плавный переход от одной кинематики к другой. Это, конечно, удобно в некоторых случаях, однако, в отличие от обычного смешивания типов анимации (например, констрейнов и ключей), полностью отсутствует контроль над смешиванием вращений, чреватым всякими перекручиваниями. Внешне все выглядит так, как будто происходит переход от одного значения для вращений суставов, указанных в Channel Box до следующего значения. Таким образом, используется смешивание эйлеровских углов, а об использовании кватернионов и речи нет.
Откройте, например, файл ikFkBlendBug.ma и прокрутите, не торопясь, анимацию.
Значение атрибута ikBlend для единственного IK Handle в сцене плавно убывает от единицы до нуля, постепенно «выключая» инверсную кинематику и переходя к прямой за 10 кадров.
Однако скелет движется совсем не так, как можно предсказать. И заставить его переходить от инверсной кинематики к прямой адекватными методами невозможно. Поэтому все, что я могу посоветовать - это использовать смешивание разных типов кинематики с большой осторожностью.
Что касается данной сцены, остается применить только «метод тыка». Так как анимационной кривой для вращения главного сустава не существует, применить эйлеровскую фильтрацию или сменить тип интерполяции не представляется возможным. Остается лишь безнадежно обратиться к порядку вращений. Выберите основной сустав и в Attribute Editor установите для него Rotate Order=xzy. Убедитесь, что остальные варианты тоже существенно улучшают ситуацию. Попробуйте объяснить происходящее.
В процессе перехода от инверсной кинематики к прямой IK Handle иногда «зависает» в пространстве, как в только что рассмотренной сцене. Это, очевидно, связано с тем, где стоят ключи на его перемещения. Если вы захотите вернуться обратно к инверсной кинематике, хорошо бы этот IK Handle «пригнать» в нужное место, то есть в последний сустав кинематической цепочки. Это можно сделать, выбрав его и выполнив Animate=>IK/FK Keys=>Move IK to FK. Можно, конечно, воспользоваться привязкой к точкам, но это вряд ли поможет, если таких IK-манипуляторов будет двадцать.
Операция ConnectIK/FK
Как вы могли заметить, операция Set IK/FK Key применяется, когда выбран конкретный IK Handle. Однако в управлении кинематической цепочкой могут принимать участие и другие объекты. Например, локатор, управляющий плоскостью сгибания, через Pole Vector Constrain. Такой локатор «ничего не знает» про атрибут ikBlend и про операцию Set IK/FK Key, однако было бы весьма удобно, «держась» за локатор, иметь возможность включать/выключать ikBlend и ставить на него ключи.