×
Меню
Индекс

Анимация гибкой оболочки

Копипаста статьи.
Взято отсюда:
https://worldofplayers.ru/threads/40354/
Статья, к слову, для второй Готики.
 
См. основной раздел, об экспорте и в общем.
Т.е. в МВ это должно работать в полной мере.
Как в существах, так и в Базовой анимации при условии добавления туда новых костей.

Анимация гибкой оболочки на примере...
 
Настало время описать детально, как создать в редакторе гибкую оболочку, чтобы ее мог скушать движок и корректно воспроизвести в игре.
Если кто-то серьезно ковыряется с 3DsMax, то данный урок будет полезен еще и потому, что вы едва ли найдете в сети более простой и в то же время столь гибкий и эффективный способ.
 
На первом этапе берем заготовку любого скелета:
 (примечание - в случае МВ просто импортируем Base_Anim) и аттачим к нему KF.
Далее нам нужно добавить две кости в качестве extra в область груди. Лучше всего воспользоваться услугами Xtras:
Для МВ придется делать иначе.
см. примечания внизу страницы.
Поскольку у нас набор костей, а не "живой скелет" с кучей настроек.
 
Этой функции нет в старых версиях 3dsmax. Я ковырял на 2011.
Желательно сделать opposite Xtra, чтобы получить левую и правую кости (зеленая и синяя). Так удобнее и правильнее с точки зрения топологии скелета. Также важно, чтобы эти кости были прилинкованы к кости спины. В моем случае это Bip01 Spine3.
 
На скриншоте видно, что кости имеют свою геометрию. Если в свойствах кости указать Display as BOX, то они станут выглядеть также, как и все прочие кости в моей сцене. Потом так и сделаем. А пока запомним, что кость имеет свою геометрию.
 
Когда я сидел и думал, как анимировать такую сложную систему, как "женская грудь", то начал с проработки упрощенной модели. Представим себе обычную гибкую пружину с закрепленным основанием. Максимальное отклонение от точки покоя будет иметь точка, удаленная от неподвижного основания на расстояние, равное базовой длине пружины:
Посмотрим на нашу кость в редакторе. Если неподвижные точки это те, которые "ближе к телу", то максимально отклоняемая будет эта:
Движок игры работает таким образом, что позволяет анимировать всё, что опирается на кости. Если заставить деформироваться геометрию кости, как на рисунке, то, к сожалению, это будет лишь деформацией ее внешнего вида. Сами опорные точки кости, по которым она привязывается к другим костям, деформироваться не будет. А значит, вырисовывается нехитрая задача по созданию дополнительной кости, которую мы должны привязать к колебательной системе нашей базовой кости. А именно к точке, отмеченной красным на рисунке выше.
 
Для этого воспользуемся хелпером типа point. Лучше сразу его повернуть на такой же угол в мировой системе координат, что и наши симметричные кости груди. Затем применяем к нему attachment constraint с параметрами, как на рисунке:
Это означает, что наш точечный хелпер прилипнет навечно к нужной крайней точке колебательной системы и будет сориентирован строго по ней.
Время создать нашу рабочую кость. Для движка пофиг, как она будет выглядеть, главное, чтобы назвалась Bip01 xxx. Я беру обычный бокс:
К этому боксу применяем position constraint и выбираем в качестве цели наш хелпер point:
Если очень хочется, чтобы рабочая кость повторяла вращение, можно добавить orientation constraint, но для движка это не важно.
Вращая корневую кость (зеленую или синюю), можно видеть, как рабочая кость следует за ней. Т.е. она как бы прибита на гвоздь и болтается. Несложно понять, что если геометрия нашей корневой кости будет деформироваться, то точка привязки начнет плавать туда-сюда, а, значит, начнет плавать рабочая кость. Система работает!
 
Настало время завершить модель. То, что у меня сразу не получилось. Дело в том, что при использовании модификатора physique для привязки шкурки к скелету очень важно, чтобы любая кость заканчивалась хелпером. Если вы возьмете рабочий Biped скелет, то увидите, что все цепочки костей оканчиваются хелперами в виде боксов, в названии которых есть по умолчанию суффикс "Nub". У моделей от разработчиков игры они переименованы в Dummy##. И при экспорте в ASC они тупо отсеиваются.
Это означает одну простую вещь: к нашей рабочей кости, которую я делал обычным боксом, нужно приаттачить хелпер типа Dummy. Примерно вот так:
Система готова. Вот как оно выглядит после доводки и привязки:
Иерархия костей у меня вот такая:
Белым выделены рабочие кости. А корневые без приставки Bip01 - они нам в игре не нужны.
 
Ну а теперь завершающий этап. Именно то, что оживит подвижную систему.
 Это, товарищи, замечательный модификатор Flex.
Именно что замечательный, т.к. очень простой и весьма стабильный. В отличие от большей части того глючного говна, что несет в себе могучий 3д-пакет от Autodesc.
Применяем его к нашим корневым костям, которые должны деформироваться. Вот так это выглядит для правой рабочей кости груди:
Для левой аналогично.
Тут важны параметры, обведенные красным. Цифры определяют параметры колебательной системы, а кнопка reset возвращает кости в стартовое положение при работе с анимациями, т.к. они будут могут изменять положение, пока вы ковыряете модель.
0, 7 1,0 5,0 - это подходит для статичных положений, когда персонаж совершает фоновые движения.
0,4 0,75 5,0 - подходит для динамики, когда персонаж прыгает, бегает и пр.
 
В любом случае, подбирается опытным путем под вашу модель. При проигрывании анимации дайте ей прокрутиться пару циклов, чтобы колебательная систем подуспокоилась и зациклилась. Можно вручную слайдер временной шкалы повозить туда-сюда. Flex мне нравится потому, что он работает в режиме реального времени и сам стабилизируется.
Важную роль также играет то, как вы пришьете шкурку к рабочим костям. Помните, что корневые кости в привязке участвовать не должны. Для этого выделите их и снимите все галочки в этом поле:
примечание - в МВ пользуем Skin!(С)
На рисунке видна привязка оболочки к рабочим костям. Корневые отключены. А хелперы игнорируются по умолчанию.
 
Почему нельзя было сразу привязаться к корневой кости и не городить огород? Дело в том, что flex меняет только ее условную геометрию, но параметры самой кости в точках привязки не меняются. И для модификатора physique без разницы, что там происходит с геометрией кости, если в локальной системе координат она всегда неподвижна.
 
На этом всё.
Основной принцип это структуры:
- есть базовая кость, которая служит буфером.
Т.е. линкуется к скелету,  на нее закрепляется объект получающий Flex.
- Собственно анимируемый объект.
- И объект, который будет передавать анимации на сетчатую оболочку.
 
Для МВ:
Создаем 3 объекта, лучше примитивы чем кости.
- кость базовая, линкуется к скелету.
- кость2 (или Point, или примитив) вешается на базовую и получает Flex.
- и кость3 для скина .
3 кости на каждую сторону.
Не забывайте, что названия должны быть Bip01_
Вместо костей (bone) можно пользовать примитивы, главное дать им правильное название.
 
И важно!
Новые кости обязательно должны быть в файле базовой анимации!
Т.е. не только в сетчатой оболочке тела, но и в base_anim.nif
Туда их можно добавить через Нифскоп.
В Nif и Xnif файлы.
При этом анимированные версии костей должны быть именно в Xnif файле.

С существами все гораздо проще.
Анимируем что следует в такт группам и экспортируем.
 
Преимущество Flex перед Реактором в более простой и стабильной работе без необходимости городить огород посредством тучи "констрейнов".