IK и как оно работает
Привет! Сегодня поговорим о инверсной киниматике. Солверы IK во всех программах мало чем отличаются на самом деле. Многие проблемы которые возникают при работе с IK солвером возникают из за банального незнания того как этот солвер устроен. Лично я не люблю инверсную киниматику в ЛЮБОМ чуть позже покажу почему. Начнем с основ. Цепочка IK представляет из себя 3 точки в которых 1 и 3 распределяют вращение второй за счет перемещения 3ей:
В данном конкретном примере цепочка будет работать не корректно. Так как все кости выстроены параллельно друг другу солвер не поймет какая конкретная ось является основной и выставит "мировую" ось сцены как ось аима:
Для того чтобы этого не происходило нужно соблюдать всего 3 правила во время сетапа персонажа:
- первый и последяя кость должны быть как можно более параллельны друг другу, в идеале они вообще должны идентичными
- первый и последяя кость должны быть как можно более параллельны друг другу, в идеале они вообще должны идентичными
- серединный контроллер не должен быть в параллели с первым и третим
- кости должны быть одинаково ориентированны
Последний пункт кстати самый забавный у Эпиков UE4 Маникене какой то ад с ориентациями последних костей в цепи. Почему они так сделали - бог его знает, как по мне это не корректно, но вероятней всего я просто не шарю. Mystery of UE4 Mannequin :)
На руке какой то ад:
На ноге все ок:
WTF Эпики? :D
Вернемся же к нашему пациенту:
Пофиксить проблемную часть можно на двух уровнях:
- на уровне костей
- на уровне костей и геометрии
На уровне костей - просто заанбайндив скин и подвинув кость, потом вернув скин. Так мы решим проблему но потеряем точку вращения. Так делать не нужно. Я предпочитаю делать всегда на втором уровне. Обычно ты просишь коллег моделить персонажей в слегка "согнутой позе". Ах да позы. Раз начали говорить за них давайте заодно закрою тему по позам.
Позы для моделинга под игровой движок существуют 3х видов:
- T поза
- A поза
- A relaxed поза
В комьюнити идет постоянное не понимание что это такое и нафиг оно нужно, а так как у меня совсем НЕ БОМБИТ я постараюсь в чиловой форме кратко пояснить почему вы (БЛЯТЬ) скорее всего делаете не правильно.
T поза - Это поза была популярной в начале нулевых до десятых. Потому что тогда не было нормального инструмента для моделинга персонажей и все делалось ручками обычно тот кто моделил тот и ригал а иногда еще и анимировал. Модели были простыми риги не замороченным. Чтобы делать все быстро ребятки старались не нарушать стандартные требования к ригу дабы не заниматься решением проблем пост факту. Картинка ниже вариация Т позы с растопыренными ногами для упрощения скининга паховой области. Кости в такой позе ставить не удобно. КГАМ как говориться.
- на уровне костей
- на уровне костей и геометрии
На уровне костей - просто заанбайндив скин и подвинув кость, потом вернув скин. Так мы решим проблему но потеряем точку вращения. Так делать не нужно. Я предпочитаю делать всегда на втором уровне. Обычно ты просишь коллег моделить персонажей в слегка "согнутой позе". Ах да позы. Раз начали говорить за них давайте заодно закрою тему по позам.
Позы для моделинга под игровой движок существуют 3х видов:
- T поза
- A поза
- A relaxed поза
В комьюнити идет постоянное не понимание что это такое и нафиг оно нужно, а так как у меня совсем НЕ БОМБИТ я постараюсь в чиловой форме кратко пояснить почему вы (БЛЯТЬ) скорее всего делаете не правильно.
T поза - Это поза была популярной в начале нулевых до десятых. Потому что тогда не было нормального инструмента для моделинга персонажей и все делалось ручками обычно тот кто моделил тот и ригал а иногда еще и анимировал. Модели были простыми риги не замороченным. Чтобы делать все быстро ребятки старались не нарушать стандартные требования к ригу дабы не заниматься решением проблем пост факту. Картинка ниже вариация Т позы с растопыренными ногами для упрощения скининга паховой области. Кости в такой позе ставить не удобно. КГАМ как говориться.
НормальнаяТ поза выглядит вот так:
Руки параллельны и слегка согнуты. Ноги параллельны и слегка согнуты. Угадали зачем они СЛЕГКА согнуты? А поза так же является инициализирующей во большинстве пакетом для моушен кепчура так ее ПРОЩЕ ВСЕГО ЗАНЯТЬ актерам.
А поза пришла к нам где то в начале нулевых с эрой PS3 игр. Графика стала лучше, качество поднялось, начали добавлять всякие ништяки в виде сменной одежды поэтому начали делать A позу иии с этого момента Бог покинул CG риггинг:
А поза пришла к нам где то в начале нулевых с эрой PS3 игр. Графика стала лучше, качество поднялось, начали добавлять всякие ништяки в виде сменной одежды поэтому начали делать A позу иии с этого момента Бог покинул CG риггинг:
Почему спросите вы? Погуглите A позу. Если в T позе были некоторые вариации (говна) то тут креатив (ебантяев) попер из всех шелей. Какой только дичи не придумали. Тем не менее нормальная A поза отличается от T позы только тем что руки опущены вниз:
Сделано это было чтобы скульптор мог сделать детальные складки в серединной позиции сгиба. Если вы слышите от коллеги что в A позе нельзя поднять руки вверх - знайте ваш коллега говнарь и дайте ему ссылку на этот пост, пусть образовывается. В A позе не ломаются принципы математического построения рига то есть есть вариант, как и в T позе делать автоматическое наследование позиций костей из рига в риг. А позу так же просто взять как калибровочную в мокапе.
Третья поза самая новая A relaxed - это изобретение Эпиков. Спасибо им за это. Отличается от A позы еще большем "расслаблением" делая мешик какбЭ застывшим посередине своей деформации. Это лучшая и самая балансная поза в плане математика\красивости:
Третья поза самая новая A relaxed - это изобретение Эпиков. Спасибо им за это. Отличается от A позы еще большем "расслаблением" делая мешик какбЭ застывшим посередине своей деформации. Это лучшая и самая балансная поза в плане математика\красивости:
Эту позу редко используют для инициализации мокапа, поэтому рекомендуется потом из этой позы сделать A или T без модификации меша. Надеюсь эту тему я закрыл.
Вернемся все же к нашему IK. Теперь вы понимаете различия в инишинал позах и знаете лимиты солвера. Поэтому пойдем решать проблему!:
Вернемся все же к нашему IK. Теперь вы понимаете различия в инишинал позах и знаете лимиты солвера. Поэтому пойдем решать проблему!:
Правим!:
Проверяем:
Теперь когда мы знаем общие критерии проверки технического качества мешей на ригинг, мы можем поговорить о топологии... в следующий раз! :D
Теперь когда вы будете получать нечто подобное в работу:
Теперь когда вы будете получать нечто подобное в работу:
У вас будут аргументы для того чтобы модель отправить на доработку хотя бы до такого состояния:
Эта модель все еще не достаточно хороша для ригинга, но с ней не будет килограмм проблем с векторами как с предыдущей. Опытные риггеры могут меня заклевать на эту тему и будут правы. У меня такой принцип - не поломано? - не чини. Если есть четкие критерии которые позволяют стабильно работать - незачем ужиматься в условия которые тебе дают, изобретая велосипед - вы делаете и себе и индустрии только хуже продвигая бездарность и лень в массы.
Что делать если вы уже все заскинили и поняли что вот эти все проблемы начинают мешать вам в анимации. Я бы рекомендовал забить и попробовать сделать лучше в следующий раз, но если у вас готовиться прям серийный продакшн - решайте сразу. Чтобы не потерять скин - достаточно сохранить его с помощью либо моей тулзы либо с помощью любой другой. Моя тулза умеет только переносить веса по vertex id поэтому если нарушится вертекс ордер - она работать не бует. Если вы решите вносить радикальные изменения в моделе - используйте ngSkinTools он умеет переносить веса по UV space. Алгоритм действий:
- Сохранить скин
- Убить скин в сцене
- Внести изменения в модель
- Проверить вертекс ID
- Переставить кости согласно новым позициям
- Прискинить модель и восстановить скин по ID.
При незначительных изменениях позиций костей - доп работы не потребуются. Если с этим будут траблы могу записать видео демонстрацию как это делать.
Ну а закончу топик короткой демонстрацией почему я, как аниматор, не люблю инверсную кинематику в целом. Она не позволяет контролировать импульс каждой отдельной части своей цепи:
Что делать если вы уже все заскинили и поняли что вот эти все проблемы начинают мешать вам в анимации. Я бы рекомендовал забить и попробовать сделать лучше в следующий раз, но если у вас готовиться прям серийный продакшн - решайте сразу. Чтобы не потерять скин - достаточно сохранить его с помощью либо моей тулзы либо с помощью любой другой. Моя тулза умеет только переносить веса по vertex id поэтому если нарушится вертекс ордер - она работать не бует. Если вы решите вносить радикальные изменения в моделе - используйте ngSkinTools он умеет переносить веса по UV space. Алгоритм действий:
- Сохранить скин
- Убить скин в сцене
- Внести изменения в модель
- Проверить вертекс ID
- Переставить кости согласно новым позициям
- Прискинить модель и восстановить скин по ID.
При незначительных изменениях позиций костей - доп работы не потребуются. Если с этим будут траблы могу записать видео демонстрацию как это делать.
Ну а закончу топик короткой демонстрацией почему я, как аниматор, не люблю инверсную кинематику в целом. Она не позволяет контролировать импульс каждой отдельной части своей цепи:
Но это и не ее задача! Задача IK контроллера облегчить момент контакта с объектами которые этот импульс сьедают. Поэтому IK уместно использовать на контактах чего угодно с чем угодно, в остальное время нужно использовать FK контроллеры так как ими проще контролировать спейсинг и арки. Но вы тут здраво возразите что FK контроллеры не удобны для ног или при ударе. Для вас я открою прекрасный мир Aim FK. Все что нам нужно это сегментно разбить контроллеры FK цепочки на отдельные участки по средствам создания прокси Aim контроллера:
Я на примере показал разбите на 2 сегмента, но ничто не мешает и 3ий так же выставить. Таким образом мы получим схожую по функционалу с IK цепочку но с более точным контролем спейсинга на каждой частью потому что у каждого сегмента появляется свой собственный "рычаг" взаимодействия. Если закодить все вариации переключения FK - AIM_FK - IK у вас никогда не будет проблем с трекингом ипульса у вас ВСЕГДА будет на руках нужные графики. Работает такой сетап примерно так:
gif
aimfk.gif2.00 Mb
Удобно неправда ли? :)
#компетенция
#риг
#ue4