Бегущий по лезвию.

Этот урок посвящен созданию реплейсеров анимации персонажей для Fallout 3.

Прежде всего об инструментарии для этого необходимом. В принципе люди делают и через Blender, но я с ним ни бум-бум, поэтому 3D Max, но с максом свои сложности. Для начала замечательный "niftools max plugins" экспорт анимации хоть и поддерживает (в Обливион, в Фолаут3 все равно надо допиливать до кондиции), но у него есть очень похабная тонкость. Он экспортирует ключи анимации тока с линейной интерполяцией между ними, а кинематика движения человека и животных это сплошные кривые. Поэтому плавное изменение скорости вращения косточки из позиции А в позицию Б экспортером разбивается на дикое количество сегментов с линейной интерполяцией. Что выдает в финале запись ключей со скоростью 160 FPS, то есть вместо 2 ключей в начале и в конце анимации длительностью в 1 секунду будет записано 160 ключей, да еще умножить это на 64 кости скелета.

Update: но и эта проблема решается. Если прокеить анимацию на каждом кадре и поставить линейную интерполяцию на ключи, то можно будет обойтись и niftools-max-plugins экспортером. Проще всего такую штуку провернуть экспортировав сцену в FBX формат, у него в настройках экспорта есть параметр "запекания" анимации каждый кадр. И потом ипортировать FBX обратно для последующего экспорта в nif. Да и какая разница какой вес в век стамегабитных каналов и дисков Blu-Ray.

В качестве альтернативы можно использовать плагин CivilizationIV-MaxTools-v7+. Как видно из названия он расчитан на 7-ю версию 3DMax, а так же в силу их совместимости работает с 8-й версией. Но к сожалению более новые не поддерживаются и вряд ли уже когда-нибудь будут.

Про непосредственно создание анимации читайте другие источники, сей вопрос слишком велик, чтоб вместить его в одну страничку. И я не брался за написание учебника по анимации. Только о технических тонкостях для движка Fallout3 или Fallout New Vegas. Так же актуально и для Oblivion в силу практически одинакового движка.

Нужно помнить, что лицо актера и направление движения "вперед" направлены по +Y оси. Хотя в 3DMax по умолчанию бипед ставится в направлении -Y оси, поэтому его надо разворачивать на 180 градусов. Не знаю, может быть экспорт будет и корректным из положения по умолчанию, от воздействия ключей с инфой из Note-трека, не проверял, мне проще развернуть.

Теперь подготовка к экспорту. Кости бипеда должны быть переименованы в соответствии с именами костей скелета из файла \meshes\characters\_male\skeleton.nif. Это большие пальцы рук и UpperArmTwist-ы на руках. И естественно к бипеду стоит прилинковать кости от оригинального скелета: HeadAnims на кость Bip01 Head, Weapon на кость Bip01 R Hand, Bip01 LPauldron и Bip01 RPauldron на кость Bip01 Spine2, Bip01 R ForeTwistDriver на кость Bip01 R UpperArm. Назначение последней не совсем понятно, но я считаю это остался управляющий хелпер из рига. Понятное дело перелинковывать с оригинального скелета на бипед надо в Т-позе, в которой бипед подгоняется под размеры оригинального скелета.

Сразу же заменить контроллер вращения для Bip01 R ForeTwistDriver с эйлера на Orientation Constraint на всякий случай, чтоб он автоматически вращался вместе с рукой.

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

В сети я нашел только совет удалить в NifScope контроллер движения для кости Bip01 Spine. Но это во-первых ужасно выглядит и во-вторых не по джедайски. Решение нашлось следующее, нужно создать пустышку (Dummy), переименовать ее в Bip01 NonAccum, выровнять по Bip01 и повернуть в глобальой системе координат на 90 градусов по оси Z. После этого изменить стандартную схему иерархии скелета Bip01 на иерархию как в фолле. Перекинув связи Bip01 Pelvis и Bip01 Spine на пустышку Bip01 NonAccum, которую в свою очередь привязать к рутовой кости Bip01.

После введения в иерархию пустышки Bip01 NonAccum в бипеде перестает работать автоматический скриншот позы при их создании (вкладка Copy/Paste в управлении бипедом), что несколько неудобно при создании анимации. Во время работы надо восстановить стандартную иерархию, убрав пустышку.

После иерархии нужно добавить для Bip01 специальный трек Notes для создания в нем ключей с описанием параметров анимации. Ключи редактируются по правому клику на них.

В начале анимации создается ключ, в который вписывается строка:
start -name Forward -loop -at y

При наличии команды -at происходит расчет коллизии с препятствиями при движении персонажа, а при отсутствии команды -at персонаж при проигрывании анимации может легко пройти сквозь стенку, так как физически его коллижен-бокс не двигается. Без параметра -at можно делать только постановочные, сценические анимации.

В конце анимации ставится ключ с текстом: end. Так же существуют ключи для указания каких-либо моментов во время проигрывания анимации. Например для звуков при шаге. В оригинальном mtforward.kf в моменты соприкосновения ступни с землей стоят ключи:
7 кадр Enum: Left
8 кадр m:L
21 кадр Enum: Right
22 кадр m:R

Все эти заморочки с настройками в Notes можно сделать и средствами CivilizationIV-MaxTools.

Про инсталляцию CivilizationIV-MaxTools читайте тут. Теперь о причине выбора в качестве экспортера CivilizationIV-MaxTools, он может при экспорте сохранять ключи так же, как они стоят на бипеде, а не как niftools-max-plugins фигачит все подряд. Правда тоже с линейной интерполяцией, а так как ключей мало - будут рывки, поэтому надо перед самым экспортом "запеч" анимацию.

e

После выполнения этого действия будут созданы ключи для всех костей скелета в каждом кадре, этим будет скрыта линейная интерполяция между ключами в силу малого отрезка времени - анимация делается обычно со скоростью 30FPS, и это гораздо лучше 160 FPS записи ключей от niftools-max-plugins. Экспорт в kf с настройками:

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

kfupdater -p 50 -v 20.2.0.7 -u 11 -u2 34 -i mtforward.kf -o mtforward-out.kf

Который кинул в папку с kfupdater, туда же копируется полученный mtforward.kf, батник выполняется создавая новый mtforward-out.kf, который уже можно использовать в Фоллауте (не забыв его обратно преименовать в mtforward.kf, имя реплейсера должно же совпадать с оригиналом ;). Просмотреть полученный результат можно в NifScope если захочется, для этого из mtforward-out.kf надо предварительно удалить бранч NiStringPalette. Для чего он нужен не ясно, фолл его кушает нормально, впрочем как и его отсутствие, а вот NifScope не может подгрузить анимацию из kf на файл \meshes\characters\_male\skeleton.nif если этот бранч присутствует в kf-файле.