Теги:

Автор Тема: [3d]Привязка модели к скелету с помощью Fragmotion  (Прочитано 11471 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Силами Гильдии модостроителей "Всадников Кальрадии" обновляются уроки по моддингу. Из-за малой информативности предыдущего урока, было принято решение о его замене.



Автоматическая и ручная привязка модели к скелету с  помощью Fragmotion.


В данном уроке рассказывается о привязке моделей к скелету с помощью программы Fragmotion используя автоматическую и ручную привязку. В нем также присутствуют рисунки.
Эта тема актуальна для версий fragmotion 1.1.0 и позднее. В более ранних версиях могут отсутствовать некоторые функции.
Основной автор урока:
FinGall



Содержание:
1. Вступление
2. Подготовка модели и скелета
3. Автоматическая привязка
4. Ручная привязка
5. Привязка одного вертекса к нескольким костям.

1. Вступление

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

2. Подготовка модели и скелета

Скелет для Вашего доспеха можно достать из любой SMD-модели, находящихся в папке CommonRes или в паке мода Resource в формате  brf при помощи программы Open-BRF editor
1. Открываем brf файл выбираем нужную мешь(любой доспех).
2. Выделяем модель и жмём ПКМ.
3. В открывшемся меню выбираем Export rigged mesh.
4. Далее выбираем папку и сохраняем.

5. Запускаем fragMOTION
6. Командами  File\Open или  File\Export (без разницы) загружаем модель.
7. Выделяем все меши командами: Edit\Select All\All. (Молель покраснеет).
8. И удаляем их командами: Edit\Delete Mesh Selection\All. Останется один скелет, который надо сохранить в SMD-файле командой Export  (можно сохранять и в родном формате Fragmotion-а: ugh).
9. Затем, командой  File\Open загружаем свой новый доспех.
10. Выбираем команды File\Merge, выделяем файл со скелетом и жмём Ок. Скелет синеет внутри модели. Можно начинать привязку. (Только проверте, чтоб модель была правильно с ориентирована по кординатам.)


3. Автоматическая привязка.

Я не буду добавлять скелет в новый доспех, а просто расскажу, как делается автоматическая привязка на примере модели из Натива.

1.1. Для начала импортируем в  Fragmotion любой доспех из Натива, предварительно экспортированный из БРФ-файла в отдельную папку. Для примера возьмём - arena_armorW.
1.2. Включим View\Show Bone Assignments with Lines (или соответствующую кнопку на верхней панели), чтоб увидеть привязки точек вертекса к костям скелета.
Можно заметить, что многие точки привязана не к 1 кости, а сразу к 2 или 3. Максимум 4. И у каждой привязки свой вес.
Цвет привязок зависит от веса. Самый лёгкий - зелёный, а самый тяжёлый красный. В общем, чтоб так привязать модель, надо 20 лет учиться. Поэтому, у нас будет привязка точки к одной кости, весом 1,0. (Почему вес именно 1 поясняется в 3 главе).
Надо отметить, что в Fragmotion экспорт SMD-формата осуществляется двумя способами. Как SMD или 2SMD. Если этот доспех пере-сохранить как SMD, то его родные привязки изменятся. Каждая точка будет привязана лишь к одной из костей весом 1,0. Поэтому, если Вам необходимо сохранить привязки точек на несколько костей с разным весом(как на данной модели), то экспортируйте доспех, как 2SMD. В любом случае, модель сохранится в SMD-файле.
1.3. Удаляем родную привязку - Bone\Remove All Bone Assignments. У нашей модели больше нет привязки к скелету.
1.4. Запустим автопривязку - Bone\Auto Assign Vertices. На экране появится специальная панель.
Эта панель имеет 2 части. Automatically Assign и Assignment Algorithm. В каждой по 3 пункта на выбор:
1) Automatically Assign (Определяем точки для привязки):
  • All Vertices - Привязать все точки.
  • Unassigned Vertices - Привязать не распределённые точки. (Чтобы не выбирать оставшиеся после Selected Vertices.)
  • Selected Vertices - Привязать выбранные точки. (Можно для разных групп точек применять разные алгоритмы привязки.)
2) Assignment Algorithm (Алгоритмы привязки):
  • Nearest Bone - Тупо привязывает точки к ближайшей кости.
  • Conical (parent first)- Большой разницы с Nearest Bone я не заметил.
  • Conical (children first) - По моему, этот самый приемлемый. (Для доспехов.)
Два последних алгоритма имеют регулировку от 0 до 180. По умолчанию 90. Здесь лучше самим попробовать и посмотреть, как будут перераспределяться привязки по костям на Вашем доспехе.
1.5. Выбираете свой вариант привязки и жмёте ОК. Вот и всё. Я не стану заморачиваться и остановлюсь на All Vertices и Conical (children first) со значением 90.
1.6. Экспортируем доспех в SMD-файл под любым именем. Например arena_armorN. Добавляем его в BRF-файл с помощью OpenBRF. Запускаем анимацию и смотрим на ЭТО. С помощью автопривязки получить идеальную привязку по костям скелета маловероятно. Требуется ручная доработка.
Примечание: В OpenBRF имеется возможность копировать скелет вместе с привязкой из SMD-модели в OBJ-модель или другую SMD-модель. Если есть похожая (или не очень) SMD-модель, то лучше сделать это в OpenBRF-е, чем использовать автопривязку из Fragmotion. По моему, будет меньше доработки.

4. Ручная привязка

2.1. Возьмём наш автопривязанный доспех и попытаемся его исправить вручную.
Команды в Fragmotion разбиты на группы по их назначению. Они расположены внизу на правой панели. Откроем выпадающее меню и выберем из списка группу Select. (Собственно она уже установлена по умолчанию.) В данный момент нам понадобится только эта группа.
2.2. Внимательно глянув на привязку доспеха, можно определить причину искажений, которые мы наблюдали во время пробной анимации. Если образно представить, что линии привязки это распорки, которые двигаются и поворачиваются вместе со своей костью, то становится понятно, куда они потянут за собой доспех. Привязки каждой кости держат свой участок доспеха и не дают ему искажаться в момент движения. (Если каждая точка привязана лишь к одной кости, как у нас.) Доспех растягивается и сжимается только в местах стыков между привязками от разных костей. Поэтому, у нашего доспеха и проваливаются подмышки, когда его руки опускаются вниз.
У скелета есть кости, которые к доспехам не привязываются, это:Item.L, Item.R, foot.L, foot.R. Они у нас и так не привязаны. Не стоит привязывать и к hand.L, hand.R, чтоб не было искажения при движении кистей рук. Я бы не советовал привязываться и к head(голове). Ну, разве только, какой-нибудь ошейник, ничем не соединённый с основным доспехом. (Если выбрать команду Bone Info, то указав мышью на кость, можно увидеть её характеристики.)
2.3. Для начала точки привязанные к кости head мы перепривяжем к кости thorax. Выбираем на правой панели команду Select Bone и выделим кость head, щёлкнув по ней мышью.
Так лучше видны точки привязанные к head. Теперь выбираем команду Select Vertex, чтоб выделить нужные точки. Точки можно выделять щёлкая по ним мышью или захватывая рамкой. Чтобы добавлять к выбранным точкам другие, надо одновременно удерживать клавишу Shift. Выделяя рамкой, можно случайно прихватить лишние точки. Даже с другой стороны модели. Если это произошло, лишние точки можно исключить из выбранной группы, удерживая клавишу Alt и щёлкая по ним мышью. А если нужно вообще отменить выделение, щёлкните мышью на пустом месте экрана.
2.4. Выделив нужные точки, опять выбираем команду Select Bone и теперь щёлкаем мышью по кости thorax. Затем, на верхней панели жмём на кнопку Assign Selected Vertices To Bone (кость с жёлтой стрелкой). Выбранные нами точки привязались к кости thorax. Снова выбрав Select Vertex, щёлкнем по пустому месту на экране, чтобы убрать выделение с точек.
Таким же образом уберём привязки с костей hand.L и hand.R, соответственно привязав их точки к костям forearm.L и forearm.R. Дальше, исправим подмышки. Все точки граничащие с туловищем надо привязать к коси thorax. Так же, к кости thorax привяжем точки, расположенные на груди, спине и около шеи, отняв их у костей shoulder.L, shoulder.R. (Если б у нашей модели была кираса, то большая часть точек груди и спины привязывалась бы к кости spine. Но у сейчас у нас туловище подвижное.) Жмём на кнопку Assign Selected Vertices To Bone (кость с жёлтой стрелкой) и вот что у нас получилось в результате.
2.5. Снова экспортируем модель в OpenBRF, запускаем разные анимации и смотрим, что мы состряпали. Запустив анимацию ходьбы man_walk видим, как полы доспеха будто бы разрезаются при ходьбе. Это случилось из-за того, что точки вертекса находятся прямо на оси "У" и слишком маленькое расстояние между привязками ног. Запустив анимацию на модели arena_armorW (наш образец), мы обнаружим почти такой же дефект. Значит тут не наша вина. Просто неудачное расположение точек на модели. Впрочем, если захотеть, то и это можно исправить, распределив вес точек на две кости.

5. Привязка одного вертекса к нескольким костям

3.1. Для начала, загрузим в Fragmotion наш образец - arena_armorW, чтобы ещё раз взглянуть на его привязки.
На левой панели, внизу, выбираем команду Vertex Info. Теперь, подведя курсор мыши к любой точки вертекса, можно увидеть её характеристики. Номер точки, координаты x,y,z, с какими костями она связана и с каким весом. Есть ещё пункт flags, но я не знаю для чего он нужен. В данный момент уж точно нам не понадобится. Посмотрим на точки, привязаны к двум костям и более. Обратите внимание, если сложить веса костей, то в результате всегда будет 1,0. Соответственно точки привязанные к одной кости имеют всегда вес 1,0. Привязываясь к нескольким костям, мы как бы распределяем между ними единицу. Так же отметим, что в местах, где встречаются привязки от разных костей, вес точек как раз и распределяется на 2 кости. Очевидно, для плавного перехода. Вот и мы будем делать то же самое с нижней частью нашего доспеха, чтоб при ходьбе всё смотрелось более естественно. Мы видим, что у доспеха arena_armorW внизу вес на 2 кости распределён лишь у точек, расположенных вдоль оси "У". Анимация показала, что этого явно недостаточно.
3.2. Теперь экспортируем наш доспех arena_armorN. Мы будем изменять привязку у точек расположенных на его подоле между ног. Спереди и сзади. Есть и ещё одна точка снизу, тоже лежащая на оси "У".
Выбираем команду Vertex Info. Теперь мы не просто подводим курсор мыши к нужной точке, а щёлкаем по ней. Начнём с точек, лежащих на оси "У". Их получается: 3 спереди, 4 сзади и 1 снизу. Они находятся на одинаковом расстоянии от обеих ног (костей), поэтому вес на 2 кости разделится поровну (по 0,5). Когда мы щёлкнули по точке, то открылась панель, где есть всё те же характеристики. Но теперь их можно изменять.
Кость Bone1 уже установлена. Если она thigh.R, то Bone2 устанавливаем соответственно thigh.L. Потом, устанавливаем новый вес Weigh1 - 0,5 ; Weigh2 - 0,5 и жмём ОК. Теперь у точки вместо одной красной линии, стало две жёлтых, идущих к костям thigh.R и thigh.L. Так же изменяем привязку на остальных 7 точках, расположенных по оси "У". Так же вес по 0,5 можно сделать и на 2-х ближайших к оси точках, которые расположены спереди. (Заметно не будет.)
Дальше займёмся 4мя передними точками, лежащими чуть дальше, справ и слева от оси "У" и находящимися приблизительно на одинаковом от неё расстоянии. Если на оси "У" вес точек мы делили ровно пополам, то сейчас мы немного увеличим вес для ближайшей кости. Так же, добавим Bone2 и распределим вес Weigh1 - 0,6 ; Weigh2 - 0,4.
Спереди у нас осталось 4 точки, расположенных внизу на подоле доспеха. Распределим у них вес Weigh1 - 0,75 ; Weigh2 - 0,25. В общем, чем дальше от оси, тем больше разница в весе.
Теперь посмотрим на доспех сзади. Точки лежащие на оси "У" мы уже привязали. Следующие линии точек расположены далеко от оси, но всё таки ближе, чем кости thigh.R и thigh.L. (Их 8 точек.) Поэтому их вес мы так же распределим на 2 кости, но уже Weigh1 - 0,9 ; Weigh2 - 0,1.
3.3. Вроде бы всё сделали, что хотели. Экспортируем модель в OpenBRF, как 2 SMD (только как 2 SMD, иначе наши новые привязки не сохраняться) и запускаем анимацию ходьбы man_walk. Теперь, пола доспеха движется нормально, но сзади стали штаны проступать через доспех. Это потому, что штаны привязаны только к одной кости, а подол к двум. (Всё, что движется вместе, привязывается одинаково.)
3.4. Опять загрузим наш доспех в Fragmotion и попробуем исправить этот дефект. Проблема в том, что верхняя часть штанов находится внутри доспеха. А она, как раз, нам и нужна. Чтоб сделать доспех прозрачным, нажмём на верхней панели кнопку Wireframe или Shift+1.
Теперь можно редактировать и внутренние точки. Нам достаточно распределить вес только на тех участках, которые выступали сквозь доспех. (т.е. ближние к оси "У" и рядом с ними.) Сделаем на этих точках привязку на две кости thigh.R и thigh.L, весом Weigh1 - 0,8 ; Weigh2 - 0,2.
3.5. Вновь экспортировать доспех в OpenBRF мы видим, что при ходьбе штаны больше не проходят сквозь полу. Можно приступать к доработке других участков нашего доспеха. Или оставить, как есть.
« Последнее редактирование: 27 Августа, 2014, 10:54 от Janycz »

Возникли некоторые вопросы.
У меня версия Fragmotion 1.1.7, вроде последнюю скачивал, триальная версия.

Делал все как написано, все по пунктам, но когда я уже удаляю модель (еще по пункту "подготовка") скелета я не вижу, либо он тоже удаляется либо раньше нажал/включил что то не то, но вдруг кто знает, мало ли... хотя может это из за того что версия триальная?...

Еще, может и не совсем в тему, то что я не могу экспортировать шлемы в опенБРФ в rigged mesh, а только в static mesh и перчатки только тоже в static mesh но еще и vertex mesh это что означает? Как мне быть если я свой шлем к скелету привязать хочу? Или перчатку? И в чем причина, в самом опене, или я что то не до понял?
Ботинки не проверял, не знаю, может тоже самое...

И еще,  по оупену, (если не против что я тут напишу), у меня с недавних пор (раньше все было отлично) вообще нечего и никак не экспортируется кроме static mesh, раньше спокойно и в .smd получалось, а сейчас... причем ошибок никаких не выдает, просто жму экспортировать как smd (rigged mesh) выбираю папку куда я это сделать хочу все нормально, но когда я смотрю папку там нечего нет... =/


Еще, может и не совсем в тему, то что я не могу экспортировать шлемы в опенБРФ в rigged mesh, а только в static mesh и перчатки только тоже в static mesh но еще и vertex mesh это что означает? Как мне быть если я свой шлем к скелету привязать хочу? Или перчатку? И в чем причина, в самом опене, или я что то не до понял?
Ботинки не проверял, не знаю, может тоже самое...


Шлемы и перчатки к скелету не привязываются!!!
1 + 2 + 3 + 4 + ... = ζ(-1) = -0.08(3)
1 - 1 + 1 - 1 + 1 - ... = 0.5
1 - 2 + 3 - 4 + 5 - ... = 0.25

На вопросы в ПС не отвечаю! Спрашивать в темах!

Janycz, а как тогда добавить шлем в игру что бы он не черти где висел (или вообще не висел) а был на голове?

Janycz, а как тогда добавить шлем в игру что бы он не черти где висел (или вообще не висел) а был на голове?


Шлем подгоняется в пространстве к голове , которая в meshes_face_gen.brf
Впрочем, посмотри как сделаны оригинальные шлемы
1 + 2 + 3 + 4 + ... = ζ(-1) = -0.08(3)
1 - 1 + 1 - 1 + 1 - ... = 0.5
1 - 2 + 3 - 4 + 5 - ... = 0.25

На вопросы в ПС не отвечаю! Спрашивать в темах!

=Примечание: В OpenBRF имеется возможность копировать скелет вместе с привязкой из SMD-модели в OBJ-модель или другую SMD-модель. Если есть похожая (или не очень) SMD-модель, то лучше сделать это в OpenBRF-е, чем использовать автопривязку из Fragmotion. =

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

1.Выделяем имеющуюся модель- Edit-Copy
2.Кликаем на модель без привязки.Edit-Paste Rigging.
3.Для проверки запускаем анимацию,ставим галочку в окошко Hit-Boxses,видим скелет.
Дальше уже можно двигать саму модель,если села криво(также как и шлемы,щиты),возможно,подкоректировать размер.(Selected: Roto-Translate-Rescale).

Тут сразу добавлю,что стот сделать копию меша без привязки,или сохранить исходную SMD-модель,вдруг избранный вариант привязки скелета не понравится.
« Последнее редактирование: 16 Сентября, 2015, 07:44 от пюпитр-2 »

Теги: