Здесь можно задать вопрос по этому тутору. м
Активно обсуждаем военные игры, историю, МОДы, и новинки игрового мира.
Содержимое тутора тестировалось лишь частично и полностью воспроизведено не было.
Прежде всего, давайте рассмотрим немного систему скелетов и анимации RTW. В папке data\animation вы найдёте файлы:
pack.dat
skeleton.dat
pack.idx
skeleton.idx
Если вы распакуете эти файлы вы получите файлы скелетов, такие как fs_dagger, fs_archer и т.д. и анимацию (внутри каталога data/animations) например LIS 01 Stand Idle.cas.
Их основные свойства:
- Скелеты содержат местоположение костей, их количество и записи по которым анимация вызывается во время специфических событий, таких как атака, смерть, бег, и т.д.
- Файлы анимации, хоть и в формате CAS, отличаются от файлов моделей. Этот файл содержит только ВРАЩЕНИЯ костей. Нет никаких данных по местоположению кости или передвижению (кроме Scene root).
Чтобы отредактировать анимацию, или скелеты, их необходимо, для начала, извлечь, используя Animation_Copy (файлы можно скачать по ссылкам из левой колонки) от Patricians'a.
Получим все скелеты (fs_swordsman, fs_archer, и т.д) и анимации.
anim_list.txt - список файлов CAS-анимации, которые будут потом упакованы и list.txt - список скелетов, для упаковки. Любые произведенные изменения должны быть повторно упакованы, иначе они не будут отображаться, так как игра читает только .dat и .idx файлы.
Мы можем создать "новый" скелет, копируя существующий скелет (то есть скопировать fs_swordsman в fs_backward_spear) с помощью Vercingetorix's XIDX, так же, вскрыв файл fs_swordsman, блокнотом например, можно заменить строку:
data/animations/LIS 18_03 Stabbing downwards
на
data/animations/LIJ 07 Javlin throw_FASTER.cas
(либо заменить соответсвующие файлы переименовав. *прим. перевод.*)
Это замениит анимацию удара мечом на удар копья сверху. ОДНАКО звуковые триггеры не изменятся. Замена анимации - предел возможностей Vercingetorix's XIDX.
Учитывая это, вот основные проблемы с анимацией RTW и скелетной системой:
1) Вы не можете добавлять новые кости и не можете создать новый тип скелета. Конечно вы можете экспортировать новые кости с другой модели или даже использовать новую анимацию с этим новым скелетом.
Но игра не примет это, так как всё это не будет прописано в файле скелета fs_что_то_там.
Показательный пример, fs_slinger_new, у которого есть одна дополнительная кость.
Вы хотите увидеть воочию эту проблему, попытайтесь изменить скелетный тип в DMB для пращников, и посмотрите, как они выглядят в игре.
2) Вы не можете перестроить кости. Вы работаете с любыми скелетами, уже существующими, потому что, чтобы создать "новые" скелеты, Вы должны скопировать из существующего fs_что_то_там. Анимации также не содержат положений костей, только их вращения (за исключением Scene Root). Пока, с Xidx, Вы можете только взломать скелетный файл и изменить записи Анимации.
3) Вы не можете добавить или удалить звуковые триггеры. Первоначально это сделано через файлы EVT. Это - дилемма для моего мода, где Варги походят на лошадей, потому что они используют тот же самый скелет, таким образом имеющий те же самые звуковые триггеры. Вы или используете звуки лошади или не используете вообще. Проблема заключена снова в файле fs_что_то_там.
4) Вы не сможете посадить наездников на любой другой скелет который не определяется как MOUNT. Это - слоны, лошади и верблюды (кавалерия). Вы не можете поместить наездников на собак, свиней и людей, даже если Вы идентифицируете их как кавалерию. Например, мои варги используют скелет лошади, но с новой анимацией. Мои тролли используют человеческий скелет, но перечисленные как слон, поэтому "команда" на этом слоне "отсутствует", поскольку в игре движок не будет отображать их. Это потому что у скелетов неконницы нет "mount", как я её назвал, кость,к которой цепляется всадник. Попробуйте прописать собак как кавалерию. В игре наездников не будет, но как только собаку убьют, появится всадник и начётся анимация смерти.
5) Незавершенность некоторых скелетов. Например, fs_archer не может участвовать в рукопашной (таким образом в DMB есть 2 скелета: fs_archer, fs_dagger), в то время как fs_slinger_new может (fs_slinger_new, fs_slinger_new). Но у fs_slinger_new нет никаких анимаций реакции сражения. Он не может прятаться, уворачиваться и блокировать. Они только не вызываются, и солдат просто стоит. Так как вы не можете отредактироовать триггеры.
Теперь, все вышеизложенные проблемы решены, с помощью инструмента, написанного Knight Errant. Ниже я попытаюсь изложить информации которую мне удалось с помощью него найти.
Программульку можно скачать из левой колонки.
Требует установленного Python 3.0, не ниже, качаем оттуда же.
Кладём всё это в data\animations, где у Вас есть все распакованные скелеты. Этот инструмент может сделать 2 вещи:
1. Он прочитает, например, fs_dagger и создаст fs_dagger.txt. Другими словами, это преобразовывает скелетный файл в текстовый файл, который Вы можете прочитать и изменить.
2. Он может преобразовать текстовый файл назад в скелетный файл. Например, Вы изменили fs_dagger.txt и переименовали в fs_twoknives.txt. Инструмент переименует его в fs_twoknives_modified. Дополнение "_modified" сделано, чтобы избежать перезаписывания по ошибке.
Хорошо, теперь давайте взломаем fs_dagger и просмотрим fs_dagger.txt. Если Вы откроете его, то Вы увидите следующее:
A. Это - размер модели. XIDX может изменить размеры модели, умножая это число. Вы можете использовать это для самого легкого изменения размеров, или Вы можете отредактировать это число и координаты, чтобы получить изменение размеров.
B. Это - число костей в модели, исключая Scene Root, который технически не является костью.
C. А это, все еще загадка. Я понятия не имею, что делают эти числа. Если они, по некоторым причинам делают ЧТО-ТО, большинство из них не использовано в fs_slinger_new, который имеет 0 вместо числа. Таким образом я понятия не имею, что они делают. Забивание их всех 0 (это я пробовал), кажется, ничего не изменяет на поведении солдата. Все еще слишком трудно заметить что-нибудь прямо сейчас.
D. Это довольно полезно. 5 0 0 0 значит, что это это - "правая рука", пока только используемая как точка прикрепления пики. Естественно это - правая кисть. Если Вы подставите это в кость гловы, то пика будет присоединены к голове модели. Забивание всего этого 0 прикрепит пику к scene_root (тазу) (довольно забавно наблюдать =) ). 4 0 0 0 используется для левой кисти. Я понятия не имею, для чего это используется. 1 0 0 0 кость, определяемая для посадки на лошадь или верблюда. В основном это означает 1 наездника на модель,это регулируется триггерами. 2 0 0 0 используется для скелета слона, таким образом - это кость "посадки" для скелета, используемого как слон. Если Вы используете этот признак на другой кости, игра игра прикрепит всадника к той кости. Так добавление 1 0 0 0 на кость позволит скелету прикрепить наездника на неё. Я понятия не имею, используется ли 3 0 0 0 вообще, так как я не смог найти скелет, который использует это.
E. Теперь это - главная фишка. Это - список координат кости относительно ее родителя. Изменение значений изменит вид скелета. Вы можете расширить плечи, или удлиннить шею или создать полностью новый скелет.
F. Это - иерархия костей, какая кость дочерняя для какой, и т.д. я объясню, как сделать это проще дальше.
G. Неизвестно.Кажется, ничего не делает. fs_slinger_new и fs_archer здесь забиты нулями
H. Число анимаций
I. Запись для использования анимации. Список анимационных триггеров существует в виде фиксированного списка. Вы не можете передвинуть stand_idle вниз и ожидать, что движок активирует его как движение без действия. Он будет всегда считать первую запись, как stand_idle. Это предопределенный порядок чтения триггеров, когда движок читает файл скелетона.
J. Большая часть из этого неизвестна. Существует небольшая разница между этими номерами записей и иными. Есть несколько исключений, наиболее заметно число IMPACT FRAME (кадр удара, возможно). где отображается кадр удара, предположительно случающийся в момент проигрывания атакующей анимации, так что оппонент может реагировать соответственно. Это интересно, поскольку, согласно моим тестам, если вы поставите это значение равным 0, то атака не начнется. Если вы всем атакам поставите 0, получите юнита, который НЕ МОЖЕТ атаковать. Требуются дополнительные исследования.
К. Это число записей звуковых триггеров. Если нет звуков, которые нужно активировать это число ставим 0.
L. Я почти уверен, что это число соответствует типу звуковых баз данных. Требуется дополнительное исследование.
M. Я почти уверен, что первое число - кадр, в который вызывается звук, и третье число - последний кадр, в который может вызваться звук. Наличие чисел означает, что звук всегда вызывается в точном кадре, Наличие диапазона означает, что они могут быть вызваны в любое время в пределах диапазона. Пока что это только мое предположение.
N. Название звукового файла/банка, из которого берутся файлы. Это - то, что Вы изменяете, если Вы хотите, чтобы этот специфический скелет произвел отличный от стандартного звук.
O. Это - все еще неизвестное. Это, кажется, относится к делу, но я все еще не знаю, для чего они.
Дальше посмотрим это:
"0 0 0" от fs_dagger, который не может стрелять. Это "0 0 0" является фактически 3 триггерами анимации, которые деактивированы, это - missile_aim, missile_hold и missile_fire, который может быть замечен в нижнем файле fs_archer. Я проверил и скопировал эти 3 входа с fs_archer и вставил его на fs_dagger, чтобы сделать новый скелет, и он работает. Я могу только использовать "fs_archerdagger, fs_archerdagger" для входа в DMB вместо "fs_archer, fs_dagger". Я не уверен, почему к CA деактивировал некоторые триггеры анимации. Возможно есть предел числу триггеров? Или возможно это сделали просто, чтобы сделать файлы долее производительными.
Если мы сравним все эти записи, то увидим, что каждый скелетон читается в виде серии триггеров. Если запись просто "0", игра скажет "Нет записи здесь, играть нельзя, придется устроить вылет!" как если бы вы использовали fs_dagger для юнита с атакой на расстоянии, ведь в этом скелетоне нет анимаций для атаки на расстоянии.
Так, ладно, теперь пройдемся по возможностям. Что реально можно сделать этой тулзой? Вот пример:
Это - скриншот моего тестирования полностью нового скелета, но очень простого: змея, которая является только прямой линией.
Специально для модели сделана тестовая анимация:
Но что можно сделать с существующими моделями? Например это:
У этого метода есть и недостаток, лук не скрывается при переключении оружия. Мы также связаны аппаратным ядром: есть максимум - 24 кости на скелет. Я попытался добавить больше и игра только CTD без сообщения об ошибках.
Хотя кажется, что я добавил очень немного новых анимаций лучнику, фактически ВСЕ анимации новые. Я экспортировал каждую отдельную анимацию, которая используется новым скелетом (с 24 костями вместо обычных 19 костей), из за способа, которым движок читает анимацию.
Движок RTW (который я думаю, былл исправлено в M2TW) читает каждую кость в скелете из списка. Для обычного скелета использование RTW это - список:
Местоположение списка указано выше, в части Е. Если Вы сконвертируете fs_archer и fs_slinger_new, то Вы увидите различие. У пращника есть дополнительная кость после bone_Rhand называющаяся bone_Weapon. Заметьте, что названия костей являются несущественными.
Механизм игнорирует названия и только сканирует список. Это значит, что используя анимацию простого скелета (19 костей) на пращнике (20 костей), значение вращения bone_Rthigh будет применено к bone_Weapon пращника и так далее, пока последняя кость пращника, bone_Rfoot, не получит вращения. Импортирование анимации пращника на скелете с меньше чем 20 костями вызовет ошибку в MAX скрипте.
Вы можете легко проверить это в MAX'e: откройте модель пращника, затем импортируйте простую анимацию, получится что то невообразимое. Теперь попробуйте это снова, но удалите bone_Weapon прежде, чем импортировать ту же самую анимацию. Модель пращника должна выглядеть нормально.
Так у создания нового скелета для RTW есть свой недостаток: Вы должны сделать каждую отдельную анимацию, которую скелет собирается использовать.Несомненно, что нарисовать абсолютно всю анимацию практически нереально. Вместо этого можно импортировать готовую анимацию, присоединить новую кость и экспортировать. Только 3 анимации используют новую кость: извлечение стрелы, натяжение лука и выстрел.
Так, в итоге, чтобы создать новый скелет, выполните следующее:
1. Сделайте модель с новым скелетом.
2. Экспортируйте её как модель CAS, затем нажмите F11.
3. Скопируйте данные, которыt показывает скрипт, это важно.
4. Сделайте все новые анимации, которые Вы хотите использовать на Вашем новом скелете, экспортируйте их со всеми костями.
5. Извлеките все скелеты и анимации.
6. Выберите самый близкий скелет, который Вы хотите использовать, скопируйте его и переименуйте.
7. Преобразуйте новый скелет в текстовый файл, откройте его.
8. В части координат костеё и иерархии, используйте данные из пункта 3 (из скрипта). Однако, убедитесь, что преобразовали координаты (x, y, z) в MAX квиду (-x, z,-y) для скелета.
9. Измените все анимации. Измените звуковые триггеры, если хотите.
10. Преобразуйте отредактированный скелетный текстовый файл в скелетный файл. Удалите старый, переименуйте новый.
11. Включите новый скелет в list.txt.
12. Включите все новые анимации anim_list.txt
13. Запакйуте скелеты и анимацию.
14. Используйте новый скелет в DMB.
Теперь давайте экспериментировать и делится друг с другом, тем что получилось и новыми открытиями!
Большое спасибо Knight Errant за то что написал эту тулзу =) Также от Knight Errant существует модифицированный скрипт для макса, который я рекомендую для использования, так как в нём устранены некоторые баги экспорта анимации, скачать его можете все в той де левой колонке.