Реформатирование SMD, экспортированный из OpenBRF или использование SMD автора
ПЕРЕСМОТР: Очевидно, этот шаг переформатирования является ненужным с некоторыми текстовыми программами (включая Microsoft Word). Так, если Вы используете программы отличные от блокнота, Вы можете обнаружить, что нет необходимости переформатировать свой файл SMD после экспорта его из Mod Tool.
Теперь откройте файл анимации SMD, который Вы только что экспортировали из OpenBRF. Вы увидите отвратительную массу текста, который простирается на несколько метров направо. Файлы анимации, экспортируемые от M&B с OpenBRF, не знают, как сделать введение параграфов. Мы переформатируем этот SMD так, чтобы было легко его читать и работать. Это поможет нам позже, когда мы экспортируем наши новые данные о анимации из XSI. Фактически автор предоставит переформатированную версию – так как нам нужен только один отформатированый файл от M&B, вам нет необходимости знать, как его переформатировать. Мы нуждаемся в этом, потому что XSI экспортирует SMD с некоторой избыточной информацией, и приятно отформатированный SMD может помочь нам пофиксить их быстро.
Вот переформатированный “anim_human_ready_slashright_twohanded.smd”. Мы будем использовать его какую бы анимацию мы не экспортировали из XSI..
РЕФОРМАТИРОВАННЫЙ SMD ФАЙЛ
version 1
nodes
0 "abdomen" -1
1 "thigh.L" 0
2 "calf.L" 1
3 "foot.L" 2
4 "thigh.R" 0
5 "calf.R" 4
6 "foot.R" 5
7 "spine" 0
8 "thorax" 7
9 "head" 8
10 "shoulder.L" 8
11 "upperarm.L" 10
12 "forearm.L" 11
13 "hand.L" 12
14 "item.L" 13
15 "shoulder.R" 8
16 "upperarm.R" 15
17 "forearm.R" 16
18 "hand.R" 17
19 "item.R" 18
end
skeleton
time 0
0 0.002980 -0.048350 9.104100 0.000000 -1.570796 1.570796
1 0.628640 1.089370 -0.408870 3.141591 -0.086538 3.141591
2 4.649140 0.006280 -0.152480 0.000000 0.006659 0.000000
3 4.724810 0.000000 0.000000 -0.000382 -1.565503 -3.141211
4 0.615950 -1.120970 -0.411960 3.141591 -0.081798 3.141591
5 4.669700 0.025960 -0.151690 0.000000 0.020869 0.000000
6 4.698490 0.000000 0.000000 -0.000136 -1.556099 -3.141457
7 1.972170 0.012830 0.000000 -0.030366 0.000000 -0.006836
8 1.985240 0.001840 0.000060 0.006341 -0.000196 0.006335
9 2.705030 0.000240 0.000000 0.008152 -0.000346 0.014506
10 1.758180 0.692770 0.008290 -1.777310 -0.023953 1.647033
11 1.454170 0.000000 0.000000 0.108582 0.052931 0.010999
12 2.770650 0.000000 0.000000 -0.021798 0.032954 0.003188
13 2.720050 -0.001310 0.011070 0.139929 -0.013553 0.017038
14 0.642300 0.121820 0.167370 -0.022679 0.034877 1.539277
15 1.758870 -0.686840 -0.024860 1.773674 0.023954 -1.646038
16 1.454170 0.000000 0.000000 -0.108581 0.052931 -0.010999
17 2.771110 0.002230 -0.003730 0.018988 0.030166 -0.002914
18 2.717440 0.001100 0.009450 -0.126333 -0.000301 -0.023219
19 0.647860 -0.124370 0.170260 -0.010578 0.018687 -1.544341
time 25701
0 -1.005780 0.439990 7.513610 2.868206 -1.532449 -1.822081
1 0.628640 1.089370 -0.408870 2.564335 0.637867 2.805891
2 4.649140 0.006280 -0.152480 0.037756 1.245160 0.035694
3 4.724810 0.000000 0.000000 0.666617 -1.139397 2.383906
4 0.615950 -1.120970 -0.411960 -2.854918 0.087993 -2.627975
5 4.669700 0.025960 -0.151690 0.258195 0.941168 0.207119
6 4.698490 0.000000 0.000000 -0.111493 -1.091705 -2.604735
7 1.972170 0.012830 0.000000 -0.410736 -0.018571 -0.095328
8 1.985240 0.001840 0.000060 -0.448526 -0.023778 -0.186137
9 2.705030 0.000240 0.000000 1.352829 -0.075965 0.262798
10 1.758180 0.692770 0.008290 -2.048966 0.934497 1.395724
11 1.454170 0.000000 0.000000 -1.065424 -0.578745 1.199236
12 2.770650 0.000000 0.000000 -0.203261 0.088308 0.521817
13 2.720050 -0.001310 0.011070 1.101839 0.944529 0.282864
14 0.642300 0.121820 0.167370 -0.100639 -0.021199 1.602711
15 1.758870 -0.686840 -0.024860 2.439766 0.022927 -1.316669
16 1.454170 0.000000 0.000000 1.302205 -0.924201 -1.150749
17 2.771110 0.002230 -0.003730 1.402306 0.002712 -0.216053
18 2.717440 0.001100 0.009450 -0.088075 -0.039083 0.356886
19 0.647860 -0.124370 0.170260 -0.010685 0.019148 -1.546891
time 25711
0 -1.005780 0.439990 7.513610 2.868206 -1.532449 -1.822081
1 0.628640 1.089370 -0.408870 2.564335 0.637867 2.805891
2 4.649140 0.006280 -0.152480 0.037756 1.245160 0.035694
3 4.724810 0.000000 0.000000 0.666617 -1.139397 2.383906
4 0.615950 -1.120970 -0.411960 -2.854918 0.087993 -2.627975
5 4.669700 0.025960 -0.151690 0.258195 0.941168 0.207119
6 4.698490 0.000000 0.000000 -0.111493 -1.091705 -2.604735
7 1.972170 0.012830 0.000000 -0.410736 -0.018571 -0.095328
8 1.985240 0.001840 0.000060 -0.448526 -0.023778 -0.186137
9 2.705030 0.000240 0.000000 1.352829 -0.075965 0.262798
10 1.758180 0.692770 0.008290 -2.048966 0.934497 1.395724
11 1.454170 0.000000 0.000000 -1.065424 -0.578745 1.199236
12 2.770650 0.000000 0.000000 -0.203261 0.088308 0.521817
13 2.720050 -0.001310 0.011070 1.101838 0.944530 0.282862
14 0.642300 0.121820 0.167370 -0.100639 -0.021199 1.602711
15 1.758870 -0.686840 -0.024860 2.439766 0.022927 -1.316669
16 1.454170 0.000000 0.000000 1.302205 -0.924201 -1.150749
17 2.771110 0.002230 -0.003730 1.402306 0.002712 -0.216053
18 2.717440 0.001100 0.009450 -0.088075 -0.039083 0.356886
19 0.647860 -0.124370 0.170260 -0.010685 0.019148 -1.546891
end
Скопируйте этот текст с заменой в ваш неотформатированный smd, затем сохраните файл как “reformatted anim_human_ready_slashright_twohanded.smd” или как-нибудь по-другому. Импортируйте переформатированную версию в OpenBRF (в OpenBRF, "Import"-> “Sкeletal Animation"-> [reformatted SMD]), он должен работать нормально. Если это не так, вероятно, сделали ошибку в своем переформатировании или при копипастинге текст из этого руководства.
Интерпретирование содержания SMD файлов анимации
Наверху расположен список костей скелета (здесь названный "nodes"). Вы увидите, что есть 20 из них, точно так же, как OpenBRF говорит в опции "Data", пронумерованны 0-19. Их названия в значительной степени очевидны – например, “item. R” вещь, находящаяся в правой руке.
Ниже этого списка линия, которая читается “время 0”. Эти 20 линий ниже этого обращаются к нулевому кадру анимации. Это - позиция T, в которой скелет стоит по умолчанию, и автор понятия не имеет, почему это существует, но находится во всех анимациях SMD. Автор не знает, что происходит, если это удалено.
Вы увидите, что остальная часть файла – повторение того же материала. Есть “время 0” и 20 линий к нему, “время 25701” и 20 линий к нему, и наконец “время 25711” и еще 20 линий к нему. Прошлые два "времени" фактически идентичны для готовых положений (снова, автор не вполне знает, почему, но мы оставим это). Вы можете видеть, что эти значения "времени" - значения интервала, которые Вы можете видеть в опции "Data" в OpenBRF, когда Вы смотрите на соответствующую анимацию после деления “anim_human”. В полном движении со многими кадрами каждый кадр имеет значение. Это значение говорит игре, когда в пределах полной анимации кадр имеет место быть. Так, если у Вас будет анимация нападения с интервалом 0-10, и некоторая информация под заголовком “время 5”, то игра поместит скелет в положение, определенное серединой пути анимации. Насколько автор знает, длина интервала не важна – более длинный интервал не делает более длительную анимацию. Единственная значимая вещь - положение кадров в пределах интервала. Например, анимация с интервалом 0-10, с кадрами в 0, 5, и 10 была бы идентична анимации с интервалом 0-100 с кадрами в 0, 50, и 100. В конце концов временная продолжительность анимации определена в другом месте (и затем изменена значением скорости оружия и мастерством персонажа). Подбор правильных значений временных интервалов для ваших кадров весьма важен, потому что они определяют уровень различных стадий анимации.
Ряды информации под каждым "временем", определяют положения костей скелета в пределах 6 топоров – 3 топора перевода, и 3 топора вращения. Есть 6 колонок, 3 для перевода сначала, и затем 3 для вращения. Только кость "abdomen" фактически использует информацию о переводе, насколько автор знает. Если Вы попытаетесь перевести эту кость в XSI, то Вы будете видеть, что весь меш перемещается с ней. Вы будете часто хотеть перевести эту кость, например, понижая положение характера. Другие 19 костей используют только информацию о вращении. Меш не подстроится под искаение должным образом, когда Вы переведете любую из этих других 19 костей.
Единицы вращения, используемого в файлах SMD, являются радианами. Сто восемьдесят степеней равны пи (3.14) радианы, таким образом, 90 градусов равны 1.5707 …. Это слегка пригодится позднее, когда мы обнаруживаем, что файлы SMD, экспортируемые из XSI, не соответствуют 90 градусам вращения в животе (abdomen)!
Экспортирование анимации SMD из XSI Mod Tool
Откроем XSI Mod Tool. Мы сделаем несколько кадров, экспортируя их, поскольку SMD, убираясь сказал SMD, и затем импортируя это SMD в OpenBRF. Если Вы получаете анимацию в OpenBRF, Вы можете быть довольно уверены, что игра примет это.
В кадре 1 на линии времени, делите весь меш потянув за один из краев соответствующего инструмента, нажмите “C”, затем “K”, “V” и “K” снова. Теперь положение T закодировано в кадре 1. Затем, в кадре 30 выберите одну из тазовых костей, нажмите “C”, вращайте кость приблизительно на 90 градусов, так, чтобы нога придерживалась прямо, и нажмите “K”, чтобы закодировать это. Все еще в кадре 30, выберите колено той же ноги и вращайте это так, чтобы голень указала на землю, и тогда кодируйте. (Это может выглядеть немного глупым, потому что он в основном носит юбку.) Теперь в кадре 100, вращайте кость колена так, чтобы нога выпрямилась, и кодируйте. Когда Вы запускаете проигрывание, персонаж должен поднять колено, затем выпрямить ногу. Это будет выглядеть чрезвычайно неестественным и глупым, и Вы можете играть с этим однако, пока есть только ключевые кадры в 0, 30, и 100.
Теперь, если у вас есть закодированные элементы на кадрах 1, 30, и 100 чтобы сделать опознаваемое движение, нажимаете на"ValveSource" в панели наверху окна, и нажимаете на “ Export SMD …” в выпадающем меню. В окне, которое появляется в “Options”, выберите “Sкeletal Animation (.SMD)” как тип файла, и снимите выделение со всех опций ниже. Тогда нажмите на три точки рядом с полем "File", назовите свой файл SMD как желаете.
Экспортирование SMD с только необходимой информацией кадра из XSI Mod Tool
Если Вы прокрутите вниз в SMD, коий мы только что экспортировали из XSI Mod Tool увидите, что есть 100 значений "time". Мы будем использовать Mod Tool, чтобы переместить наши ключевые кадры в 1-е, 2-е, и 3-е положения на линии времени так, чтобы SMD содержал только необходимую информацию. Мы затем вставим правильные временные значения в SMD так, чтобы игра смешала их вместе с надлежащим выбором времени.
Откройте свою анимацию в XSI Mod Tool 7.5. Выберите все и нажмите “0” (ноль на клавиатуре). Созерцайте кривые функций. Не бойтесь. Обратите внимание на линию времени у основания этого окна. Тяните рамку инструмента выбора от вершины до основания линий, чтобы выбрать их всех. Они должны побелеть, и должны появиться небольшие цветные квадраты на некоторых из линий в 1-м, 30-м, и 100-м положениях на линии времени. С отобранными линиями (белыми) тяните другую рамку выбора вокруг квадратов в 30-го кадра. Они должны покраснеть и стать между черными квадратами. Теперь нажмите “Ctrl+X”, чтобы вырезать эту информацию, переместите линию времени в окно f-кривой в кадре 2 (положение сразу после первого набора цветных квадратов), и нажмите “Ctrl+V”, чтобы вставить информацию в этом месте. Теперь, повторите этот процесс для кадра 100, вырезая оттуда и вставляя в кадр 3. Если Вам трудно видеть вещи, Вы можете пролистать через окно f-кривой, перетаскивая красную вертикаль в ее линию времени мимо видимых концов, и Вы можете увеличить и уменьшить масштаб используя колесо мыши. Все цветные квадраты должны теперь быть выше первых 3 кадров на линии времени. Теперь закройте окно f-кривой.
Если Вы выберете персонаж, то увидите ключевые кадры в 1, 2, и 3 на линии времени. Когда Вы нажмете «Play», он будет хватать ногу как маньяк, но это нормально, потому что мы только хотим информацию о кадре – мы сообщим игре, куда поместить ключевые кадры так, чтобы у них был надлежащий выбор времени. Последняя вещь, которую надо сделать здесь состоит в том, чтобы изменить размеры линии времени так, чтобы были включены только кадры 1 - 3. С правового края на линии времени есть темно-серая коробка с “100” внутри. Нажмите на нее, и вставьте 3. У Вашей линии времени должно теперь быть только 3 кадра, все с миленькими красными квадратами на них, когда Вы выбираете персонажа.
Теперь, экспортируйте SMD для этой анимации как прежде. Не забудьте снять 3 галки в окне экспорта. Теперь взгляните на файл SMD. Должен выглядеть как прежде, но у этого будет только 3 временных значения. Теперь мы должны переформатировать это немного.
Устранение неполадок SMD анимационных файлов, экспортированных из XSI Mod Tool
Удостоверьтесь, что у Вас есть переформатированный SMD автора из спойлера. Определить корректность работы при импортировании в OpenBRF можно так: если видите статическую позу и отсутствие фактического движения – значит что-то не в порядке.
Откройте файл SMD, который мы только экспортировали из XCI Mod Tool. Вы заметите, что его содержание немного отличается от переформатированного файла. С одной стороны у этого есть 22 кости в списке наверху – пронумеровал 0-21 – и 22 линии информации о кости для каждого временного значения. Это так, потому что XCI Mod Tool дал нам информацию для кожи и дополнительного узла между ногами. Эта информация является странной и непостижимой и заставит OpenBRF замереть от страхом. Мы должны удалить это и заставить файл быть похожим на переформатированную версию. У костей также есть забавные имена Вы можете, вероятно, подобрать эквиваленты всех этих имен, но в этом нет необходимости.
Чтобы пофиксить это откройте реформатированный SMD и открывайте вашу анимацию SMD с этими 3 временными значениями. В реформатированном SMD выделите все выше “time 25701” и нажмите “Ctrl+C”, чтобы скопировать это. Теперь, в SMD для Вашей новой анимации, выделите все выше “time 1”, и нажмите “Ctrl+V”, чтобы вставить от реформатированного SMD. Если Вы хотите сохранить свой новый SMD, поскольку работаете над ним, автор предлагает сделать это под новым именем в случае, если Вы сделали некоторую невидимую ошибку Теперь у Вашего нового SMD есть надлежащий список костей наверху, информации о позе T в “time 0”, так же как информации для Ваших 3 ключевых кадров. Теперь мы должны перенумеровать другие временные значения и удалить информацию для двух избыточных костей (“0” и “1”, также известные как “thigh.mesh” и " thigh " ). Наконец, мы перенумеруем остающиеся кости, которые уже находятся в правильном порядке, так, чтобы они шли от 0-19.
Так, для времен 1, 2, и 3, удалите верхние два ряда информации о кости. Теперь удалите ряды, начинающиеся на 0 и 1. Теперь перенумеруйте все остающиеся ряды так, чтобы они были пронумерованы от 0 до 19 под каждым временным значением. Очевидно, каждое число должно стать на 2 ниже, таким образом, 2 становится 0, 3 становится 1 и так далее. Вы должны перенумеровать их вручную, потому что информация около этих чисел уникальна, таким образом, Вы не можете просто вставить поверх них с заменой (хотя мог бы быть необычный способ заменить их, о котором автор не в курсе). Теперь замените временные значения так, чтобы эти 4 временных значения для целого SMD были в порядке: 0, 1, 30, и 100.
Не волнуйтесь о пробелах концах линий и подобные штуки. Насколько автор знает, SMD довольно терпим к таким вещам. Производились довольно большие изменения, когда переформатировали анимацию, экспортируемую от OpenBRF.
Так или иначе, как только Вы закончили с SMD сохранитесь под новым именем. Теперь импортируйте этот SMD в OpenBRF, отметьте, что персонаж повернулся на 90 градусов и созерцает эксцентричное движение!
Чтобы пофиксить ориентацию персонажа, откройте свой SMD снова (тот, который Вы только проверили в OpenBRF). Скопируйте “0” линию информации с “time 0”, и вставьте поверх “0” линий во всех других временных значениях. Как автор сказал прежде, по некоторым причинам SMD от XSI отличаются на 90 градусов вращения живота. Копирование информации с “time 0” – поза T, взятая непосредственно из M&B – зафиксирует (починит) это. Вы можете также вычесть 1.570796 (половина пи) из второй колонки информации о вращении во всех кадрах, взятых из XSI. Вероятно, подобные вычитания потребуются для создания более продвинутых анимаций, а пока Вам достаточно вращать "живот" (действительно бедра) для некоторых движений. Возможно, что Вы можете также установить вращение, перемещая персонажа в XSI перед экспортом, но автор не пробовал это должным образом.
Сложный способ установить ориентацию персонажа состоит в том, чтобы изменить информацию о вращении для кости живота непосредственно в SMD. Легкий способ - вращать кость живота в XSI. Назад на90 градусов от общего вращения. Чтобы сделать это, в каждом ключевом кадре выбираете кость живота, выбираете общий (global), в противоположность локальному, вращению в панели справа, затем удерживает Shift и двигаете мышь, чтобы вращать кость равномерными шагами, пока Вы не повернете назад на 90 градусов. Установите (закодируйте) это вращение в каждом ключевом кадре прежде, чем Вы экспортируете анимацию, и ориентация персонажа будет правильна в OpenBRF и (позже) в игре.
Фактически, XSI отбрасывает перевод живота также. Вы можете, вероятно, установить, это в XSI, но в настоящее время автор устанавливает это в SMD и заменяет второй и третий ряды информации о переводе для кости живота в каждом кадре, и затем изменяя подпись второй колонки (то есть, делает положительное число отрицательным и наоборот). Конечно, если бедра Вашего персонажа не двигаются в анимации, Вы можете только скопировать информацию с более раннего ряда вместо того, чтобы вносить корректировку много раз.
Играя с SMD, затем рассматривая это в OpenBRF, Вы можете определить – на что влияют ряды и колонки и насколько. Автор фактически закрепил ручное расположение и работу ног на некоторых из анимаций модифицируя непосредственно текст SMD.
Проверьте свой SMD после выполнения этих установок (фиксов) (импортируйте анимацию в OpenBRF), чтобы удостовериться, что это работает. Если персонаж перевернут или переместился в неправильное направление, это означает, что Вы вращали живот неправильным путем в XSI, обменивали неправильные колонки в SMD, или вставили/удалили минус знак в неправильном месте.
Добавление новой, правильно форматированной анимации SMD в “skeltons.brf”
Откройте OpenBRF и откройте “skeletons.brf”. Выберите "Animation". Список должен показать “anim_human” и ничего более. Нажмите "Import" в панели наверху окна, и нажмите “Skeletal animation” в выпадающем меню. Выберите свое новое, должным образом отформатированный SMD, который Вы успешно проверили в OpenBRF прежде. Теперь, список должен показать “anim_human” и Вашу новую анимацию. Нажмите на нее и она должна проигрываться в смешно выглядящей петле. Опция"Data" должна сказать, что есть 20 костей, 3 кадра и интервал 0-99. Из Вычитается “1” из всех временных значений по некоторым причинам, не волнуйтесь об этом. Если Вы работаете c “time of frame” - это должно показать 1 как 0, 2 как 29, и 3 как 99.
Если все здесь правильно, и “anim_human” неповрежден, сохраните файл. Не изменяйте место сохранения и остальные параметры, т.к. мы хотим переписать “skeletons.brf”, находящийся в CommonRes.
Применение Python для замены существующей анимации новой
Удостоверьтесь, что Вы сделали как в обучающей программе Армэгэна для того, чтобы настроить систему модуля так, чтобы она была заточена на Вашу новую папку модуля. Автор рекомендует, чтобы Вы также сделали копию любых файлов Python, которые Вы редактируете.
Когда Вы сделали все, откройте свою системную папку модуля, ПКМ на “module_animations.py”, и нажмите, "Edit with IDLE” в выпадающем меню. Должны открыться два окна. Нам нужно то, которое с красным текстом и мешаниной наверху, и другое мы закроем.
Мы собираемся заменить одно из “готовых положений игры” нашей новой анимацией. Нажмите “Ctrl+F”, чтобы искать текст, и поиск “ready_thrust_onehanded”. Под этим есть текст “ [ready_durn, “anim_human”, НЕКОТОРОЕ ЧИСЛО, НЕКОТОРОЕ ДРУГОЕ ЧИСЛО, blend_in_ready],”. Все, что Вы должны сделать, изменить текст “anim_human” здесь на название Вашей новой анимации, что Вы сохранили в “skeletons.brf”. Теперь изменяете числа интервала на числа, которые показаны в окне "Data" OpenBRF. Вы можете также изменить “ready_durn”, если Вы желаете. Это определяет продолжительность Вашей анимации, и автор рекомендует изменить это на определенное время (возможно половина секунды или целая секунда), таким образом, Вы можете видеть, что длина интервала не имеет никакого отношения к скорости анимации.
Вы также должны удалить текст из верхней линии “acf_parallels_for_look_slope”. Эта линия говорит игре, что готовое положение изменяется в зависимости от положения камеры. Автор не знает, как оживить так, чтобы это изменилось с положением. Возможно, Вы должны сделать больше анимации, одна для самого высокого положения и одна для самого низкого, и сослаться на тех так или иначе так, чтобы он игра переключалась между ними в зависимости от положения камеры. Так или иначе, мы лишь удалим это так, чтобы наша анимация выглядела одинаково независимо от положения камеры.
Так, в конце концов это, релевантный текст в Python, должен выглядеть примерно так:
Текст в Python, отсылающий к нужной анимации
["ready_thrust_onehanded", acf_thrust|acf_anim_length(100)|acf_rotate_body|acf_enforce_rightside,
[1, "Test_animation2", 0, 99, blend_in_ready],Автор назвал свою анимацию “Test_animation2” и поставил продолжительность “1” (1 секунда). Этот текст должен быть должным образом отформатирован – автор скопировал его со своего постаи в Python, и он был идентичным.
Теперь сохраните файл и закройте его. Тогда, в Вашей папке модуля дважды щелкните по “build_module.bat” чтобы создать Ваш новый модуль. После чего, (если не было ошибок) Вы можете запустить M&B и взглянуть на Вашу новую анимацию в игре.