Jump to content
Korean Random
Alex6669

3DS MAX: Риггинг анимированных элементов танка WOT

Recommended Posts

В прошлом гайде я описал алгоритм извлечения игровых моделей World of Tanks и обратный процесс их конвертации в формат игры.
Судя по откликам, которые собрал текст, большинство читателей не являются трехмерщиками и в процессе ознакомления сталкиваются с вопросами, выходящими за рамки нюансов извлечения и экспортирования игровых моделей движка BigWorld. Для успешного понимания материала и реализации своих творческих задумок, им можно порекомендовать ознакомиться с уроками по полимоделированию и текстурированию в 3DSMAX.

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


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

Для того чтоб ваш модифицированный танк мог все это совершать, ему необходимо назначить "кости" и привязать к ним части модели. Этим мы сейчас и займемся. Для экспериментов возьмем AMX 12t. Он интересен тем, что его пушка (как и пушки остальных французов с качающимися башнями) является одним объектом с непосредственно качающейся башней. А turret - это лишь чаша с крепежами пушки (см. картинку)

940d51aa70d94103992440c.png


Чтобы читатель оценил наглядно "было-стало" пушку 12t, я уже подставил ему башенный пулемет и изменил величину ствола поставив дульный тормоз от Бачата. Методы извлечения моделей описаны в первом гайде.
Нам необходимо выяснить какие "кости" (или хелперы другими словами) управляют пушкой. Для этого обратимся к оригинальному .visual файлу Gun_03.visual


В нем мы обнаружим следующие строки:
<identifier>Scene Root</identifier>
<transform>
<row0> 1.000000 0.000000 0.000000 </row0>
<row1> 0.000000 1.000000 0.000000 </row1>
<row2> 0.000000 0.000000 1.000000 </row2>
<row3> 0.000000 0.000000 0.000000 </row3>
</transform>
<node>
<identifier>Gun</identifier>
<transform>
<row0> 1.000000 0.000000 0.000000 </row0>
<row1> 0.000000 1.000000 0.000000 </row1>
<row2> 0.000000 0.000000 1.000000 </row2>
<row3> 0.000000 0.000000 0.000000 </row3>
и т.п.

identifier - говорит нам о том, что это некий узел, который чем-то управляет. Из названия не трудно понять чем именно, но в рамках урока я разберу все айдентиферы пушки:

  • Scene Root - базовый хелпер, он создается автоматически при экспорте, его мы игнорируем;
  • Gun - главный хелпер-родитель всей пушки, к нему иерархически привязываются остальные хелперы;
  • G - хелпер отвечающий за ствол, именно он "откатывает" орудие назад;
  • HP_gunFire - узел из которого исходит огонь и дым во время выстрела;
  • G_BlendBone и Gun_BlendBone - создаются автоматически, нам не требуются.

Итак, перед нами сцена с уже спозиционированной пушкой, с правильным масштабом - модель с произвольным именем, например Gun (как позиционировать и подгонять масштаб я рассказывал в предыдущем гайде). Создаем для нее три Dummy объекта (Create->Helpers->Dummy) и расставляем их. Gun - в начале координат 0,0,0 остальные по логике вещей: G - у начала ствола, HP_gunFire - у дульного тормоза.

138e358fa0d54df5ba1d123.png


Создадим правильную иерархию хелперам, к счастью их не много (в отличии от ходовой):
HP_gunFire линкуем к Gun и G также линкуем к Gun 494104b38da944108919295.png. На мой взгляд правильно чтоб огонь из ствола однажды появившись не откатывался вместе со стволом. Но если вы считаете иначе, то линкуйте по порядку HP_gunFire -> G -> Gun.
Теперь нам необходимо связать вершины ствола с хелпером G, а вершины башни с Gun. Назначаем модификатор Skin нашей модели и добавляем эти два хелпера как кости.

08d3c182a8eb4f9991dfb78.png


Расставим вес вершинам для каждой кости - вершины башни Gun=1, G=0; вершины ствола Gun=0, G=1.

339c575c3e814fd199f4fbb.png

Осталось назначить материал. В отличии от статичных частей модели танка, ствол, ходовая и т.п. подвижны, поэтому используем шейдер normalmap_specmap_skinned.fx


Остается экспортировать нашу пушку. Настройки экспорта:

a75307c13b4340cf95ff5e3.png

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

<row0> 1,000000 0,000000 0,000000 </row0>
<row1> 0,000000 1,000000 0,000000 </row1>
<row2> 0,000000 0,000000 1,000000 </row2>
<row3> 0,000000 0,152282 1,166140 </row3>

В разделе geometry заменяем gun_0Shape3.vertices и gun_0Shape3.indices на наши новые Gun.vertices и Gun.indices.
Меняем название материала пушки tank_mat_skinned на ваш.

И наконец заменяем подчистую раздел boundingBox. Сохраняем, запускаем игру и тестируем.

Если пушка встала криво, например повернута на 90 градусов или по габаритам не подошла (хотя если вы нормально подготовили геометрию до всех манипуляций то все должно быть ок) - возвращаемся в 3DSMAX, удаляем skin, проверяем все, проверяем оси координат, снова настраиваем skin, экспортируем и проверяем.

37eb0a8abf094416b9180c8.png

Так до победного.

a1c12e7afbd5453fa8a8dcf.png

Я прилагаю файл настроенной сцены для 3DSMAX 2009 (32bit) к уроку. Архив с моделью танка.

  • Upvote 5
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Извените за глупый вопрос

Например, я сделал модель башни PzIII с командиром, но командир просто нелепо торчит из башни...

Вопрос: возможно ли сделать так, чтобы его "укачивало" при езде??

Edited by Armored

Share this post


Link to post

Short link
Share on other sites

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

Edited by Alex6669

Share this post


Link to post

Short link
Share on other sites

Я вот этого и боялся, надеюсь что с появлением физики и подвески танка, это станет воплотимым)

Share this post


Link to post

Short link
Share on other sites

Вроде бы сделал, игра поняла модель щас потестим..

итог: пушка развернута оказалась на 180 градусов назад, торчит из задницы башни, я весь в печали

пробовал развернуть в редакторе-бесполезно, итог тот-же

придется заново делать?

Edited by Armored

Share this post


Link to post

Short link
Share on other sites

Я вот этого и боялся, надеюсь что с появлением физики и подвески танка, это станет воплотимым)

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Вроде бы сделал, игра поняла модель щас потестим..

итог: пушка развернута оказалась на 180 градусов назад, торчит из задницы башни, я весь в печали

пробовал развернуть в редакторе-бесполезно, итог тот-же

придется заново делать?

 

Как не странно у меня тоже самое)) Повозился я чуток с моделью, с *.visual тоже итог тот же - пока заброшу эту затею в дальний, пыльный угол. Лучше буду делать то что могу.

Edited by Fall

Share this post


Link to post

Short link
Share on other sites

Все, я научился, все офигенски получается!

Тока есть еще вопрос общий по поводу моделей всех, при определенном расстоянии они становятся прежними, ну я кинул то же самое в папку lod1 и нифига не пашет вопрос: почему??

всмысле клиент не хочет работать с ними

Edited by Armored

Share this post


Link to post

Short link
Share on other sites

Не интересовался. Если не пашет, скорее всего структура lod1 отличается от lod0 может там какие-то свои node's с другими именами.

Share this post


Link to post

Short link
Share on other sites

Все, я научился, все офигенски получается!

Тока есть еще вопрос общий по поводу моделей всех, при определенном расстоянии они становятся прежними, ну я кинул то же самое в папку lod1 и нифига не пашет вопрос: почему??

всмысле клиент не хочет работать с ними

Потому что лоды надо настраивать, а не тупо кидать одни и те же файлы в разные папки.

Share this post


Link to post

Short link
Share on other sites

Как не странно у меня тоже самое)) Повозился я чуток с моделью, с *.visual тоже итог тот же - пока заброшу эту затею в дальний, пыльный угол. Лучше буду делать то что могу.

дело в том, что у этой игры Back это Front, a Front это Back надо помнить это и ошибок не будет)

Share this post


Link to post

Short link
Share on other sites

Потому что лоды надо настраивать, а не тупо кидать одни и те же файлы в разные папки.

я догадывался, но это не является ответом :\

Share this post


Link to post

Short link
Share on other sites

Не интересовался. Если не пашет, скорее всего структура lod1 отличается от lod0 может там какие-то свои node's с другими именами.

я догадывался, но это не является ответом :\

 

Ну в этом направлении я продвинулся, абсолютно ничего сложного в создании лодов нет.

Для того что бы заработало можно изменить лишь одну строчку в файле *.visual

<node>

<identifier> lod1 </identifier>

<transform>

<row0> 1.000000 0.000000 0.000000 </row0>

<row1> 0.000000 1.000000 0.000000 </row1>

<row2> 0.000000 0.000000 1.000000 </row2>

<row3> 0.000000 0.000000 0.000000 </row3>

</transform>

<node>

Но это еще не все, если надо добиться идеального результата тогда нужно еще и замоделить упрощенную lod1 версию, если изменения на танке не глобальные lod2 можно не менять.

Edited by Fall

Share this post


Link to post

Short link
Share on other sites

Спасибо за туториал.

Что я сделал не так, не заю куда копать:

92d465a22531e2c397d5f9abbaaf54b3.png

 

это при выстреле. А так все нормально

Edited by Kuzmich
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Здравствуйте все!

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

Скриншоты для пояснения

post-7190-0-99260500-1347451049_thumb.jpgpost-7190-0-16628600-1347451065_thumb.jpg

 

Танк освещается нормально, тень снизу. У пушки тень сверху. Всевозможные переворачивания координат костей пушки результатов не дают.

Чтобы никого не смущало - корректировок почти не заметно на скриншотах потому как я только тренировался.

 

Вот так. Помогите кто может.

post-7190-0-99260500-1347451049_thumb.jpg

post-7190-0-16628600-1347451065_thumb.jpg

Share this post


Link to post

Short link
Share on other sites

Здравствуйте все!

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

Скриншоты для пояснения

post-7190-0-99260500-1347451049_thumb.jpgpost-7190-0-16628600-1347451065_thumb.jpg

 

Танк освещается нормально, тень снизу. У пушки тень сверху. Всевозможные переворачивания координат костей пушки результатов не дают.

Чтобы никого не смущало - корректировок почти не заметно на скриншотах потому как я только тренировался.

 

Вот так. Помогите кто может.

 

Похоже у вас просто пушка перевёрнута низом вверх) А то что вы называете тенью это текстура) Инвертируйте оси и экспортируйте заново) Поиграйтесь с вращением модели пушки в общем, пока не подберёте правильное положение)

Share this post


Link to post

Short link
Share on other sites

Похоже у вас просто пушка перевёрнута низом вверх) А то что вы называете тенью это текстура) Инвертируйте оси и экспортируйте заново) Поиграйтесь с вращением модели пушки в общем, пока не подберёте правильное положение)

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

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×