Каталог




Главная » Статьи » Обучающие статьи » Общая » Редактирование анимации Sliding Door в NifSkope


Редактирование анимации Sliding Door в NifSkope




PRIME124



Статус: Offline
Автор статьи: PRIME124



Добавлено: 6 мая 2017
Просмотров: 4120 | Комментарии: 13

Понравилось: 16 пользователям


- - Вступление - -
 
Однажды столкнулся с тем, что найдя необходимую мне дверь меня не устроила скорость её открытия. Хотелось сделать так, чтобы дверь открывалась медленнее и немного с другой анимацией, чтобы она больше походила на основную дверь входа в бункер. Первые попытки достичь этого ни к чему не привели - я только испортил анимацию. Забросив на время это дело, я решил попробовать снова. И вот, после множества попыток мне наконец-то удалось добиться желаемого результата. Именно этим я и хочу с вами поделиться.

Данный способ я рассмотрю на примере секретной двери Убежища 101. Кому интересно - она находится в файле Meshes.bsa по такому пути: Meshes/dungeons/vault/roomu/vurmboothwallsecretdoor01.nif. Её же название в ГЕККе: CG04SecretDoor.
 
- - Алгоритм редактирования - -
 
Первое, что вам понадобится - это извлечь саму модель двери из файла Meshes.bsa. Сделать это можно с помощью программы FO3 Archive Utility. Затем эту модель открыть с помощью программы NifSkope. После открытия модели зайдите во вкладку "View" и в пункте "Block List" выберите "Show Blocks In Tree". Так будет удобнее работать. Вот что примерно вы будете видеть.



Нам нужна вкладка "NiControllerManager". Открыв её нас интересуют две вкладки "NiControllerSequence". Одна отвечает за открытие (Open), другая за закрытие двери (Close).


 
- - NiControllerSequence - - - Open - -
 
Начнем с анимации открытия двери. Откроем вкладку "NiControllerSequence" и перейдем в Block Details. Нам необходима вкладка "Stop Time". Значение в этой вкладке измеряется в секундах и означает через сколько времени анимация двери прекратиться, иными словами, дверь закроется и остановиться. Значение в ней стоит 2,6667 секунды. Поменяем на 5 секунд.



< Важно > Значение "Stop Time" должно быть одинаково для всех вкладок, которые будут редактироваться. В данном примере это 5 секунд. Разделителем между целой и дробной частью должна быть "точка", если вы будете ставить "запятую" значения будут обнуляться. 

Возвращаемся в Block List и переходим на вкладку "NiTransformData". Именно в ней нам нужно будет сделать основной объем работы. 



Переходим в Block Details, во вкладку "XYZ Rotations". Откроем её и все её подвкладки. Должно получится что-то в этом роде:



Ищем значение времени 2,6667. Их три на данном скриншоте. Их все нужно поменять на выбранное вами время закрытия двери, в данном примере это 5 секунд. Закройте вкладку "XYZ Rotations", чтобы не загромождать Block Details.
Далее переходим на следующую вкладку в окне Block Details - это "Translations". Откроем её. Во вкладке "Num Keys" вы увидите значение 80. Это количество точек, в которых задается соответствие времени анимации и координат (X;Y;Z) в пространстве, в которых будет находится дверь при проигрывании анимации открытия. Чем больше этих точек, тем более тонко можно настроить анимацию и, вроде как, сама анимация получается плавнее. Но для примера столько точек не нужно, важно чтобы вы поняли сам принцип. Поэтому уменьшим количество точек до 6. Напротив вкладки "Keys" нажмите правой клавишей мышки на значок двух зеленых стрелочек а затем "Array" и "Update". Количество точек сразу же станет равным шести. Теперь же откроем все подвкладки во вкладке "Translations". Получится следующее:



Нас будут интересовать вкладки "Time" и "Value". Во вкладке "Time" мы задаем время, а во вкладке "Value" мы задаем координаты в пространстве для положения двери во время проигрывания её анимации. То есть, для примера, при времени 0 секунд координаты двери (X;Y;Z) будут 0;0;200, при времени 1 секунда координаты двери будут 0;0;160 и так далее все остальные точки. Последней будет время 5 секунд и координаты двери 0;0;0. После редактирования получится следущее:



Мы изменяем только значение Z, потому дверь открывается/закрывается вертикально. Если бы дверь открывалась горизонтально, то мы бы, соответственно, изменяли значение координаты X или Y (в зависимости от того, относительно какой оси координат дверь симметрична). Почему я выбрал значение Z=200? Чисто для примера. Значение может быть абсолютно любым. Отвечает оно лишь за то, на сколько широко будет открываться дверь. Чем больше значение, тем шире дверь "разъезжается". Также, хоть дверь и открывается вертикально, изменение значения X или Y добавит анимации двери реализма. К примеру, вы подходите к двери, активируете ее и она сначала начинает немного выступать с дверного проема, а только затем раздвигается. Естественно, анимация закрытия будет обратной - дверь сначала закроется, а потом немного утопится в дверной проем. Это создаст ощущение хорошей герметизации двери (как огромная дверь-шестеренка убежища, сначала подкатывается к дверному проему, а потом утапливается в него). Также для создания большей реалистичности двери, зависимость координат в пространстве от времени не должна быть линейной. Наверняка вы замечали, что при активации двери она начинает открываться потихоньку, затем достигает своей максимальной скорости и сразу перед закрытием начинает уменьшать свою скорость. Наверное создание этой зависимости является наиболее сложным, чтобы анимация двери выглядела реалистично.
Далее переходим на следующую вкладку в окне Block Details - это "Scales". Открываем её, все её вкладки и подвкладки. Получится следующее:



Опять ищем значение времени 2,6667. Оно всего одно, меняем его на 5 секунд. Возвращаемся обратно в Block List и выбираем вкладку "NiTextKeyExtraData". Переходим в Block Details и выбираем "Text Keys" и открываем все вкладки подвкладки. Получится следующее:



Ищем значение времени 2,6667. Оно всего одно, меняем его на 5 секунд. Мы закончили работу во вкладке "NiControllerSequence" - - - Open. Теперь переходим к редактированию анимации закрытия двери.

- - NiControllerSequence - - - Close - -
 
Так как редактирование анимации закрытия двери, точно такое же как и открытие, то нет смысла его детально описывать. Сам алгоритм аналогичен. Но есть небольшие отличия. На что необходимо обратить внимание? Первое это значение времени "Stop Time". Для открытия двери оно было 2,6667, тогда как для закрытия двери оно 2,6333. На самом деле это один и тот же параметр и очень часто встречается, что время закрытия двери не совпадают во вкладках Open и Close на какие-то доли секунд. Не обращайте на это внимание и меняйте значение на нужное вам, в данном случае на 5 секунд. Но поскольку вы всё редактируете вручную, то ставьте одинаковые значения в обеих вкладках. Это позволит избежать подергиваний и рывков анимации, особенно, если вы не использовали большое количество точек соответствия времени и координат. Второе это вкладка "NiTransformData". Перейдем в окно Block Details и откроем "Translations". Если для открытия двери мы для значения времени 0 секунд задавали координаты 0;0;200, а для 5 секунд координаты 0;0;0, то при закрытии двери для значения времени 0 секунд мы должны задать координаты 0;0;0, а для значения времени 5 секунд координаты 0;0;200 и так далее. То есть при открытии двери она перемещалась по оси Z от 200 до 0, теперь же при закрытии она пойдет обратным ходом от 0 до 200. Не упустите данную особенность.

- - Заключение - -
 
На этом редактирование анимации заканчивается. Если вы все сделали правильно, то после сохранения файла и последующей его загрузки в NifSkope и нажатии кнопки "Play" в верхней части меню программы, начнется проигрывание анимации и значение времени будет меняться от 0 до 5 секунд и сама анимация будет другой.



И еще пару слов, чтобы подвести черту и избавится от некоторых вопросов: значение времени окончания анимации может быть абсолютно любым, я использовал 5 секунд только для примера, вы же можете использовать любое нужное вам. Так как оно повторяется много раз во многих вкладках, то будьте внимательны, если хотя бы одно вы пропустите и не измените на ваше собственное, то анимация не изменится. Количество точек, по которым вы задаете соответствие времени и координат двери в пространстве также может быть любым. Чем больше - тем лучше для точности и плавности анимации. Чем дольше дверь открывается/закрывается - тем больше должно быть точек. В этом примере, до редактирования времени окончания анимации значению 2,6667 секунды соответствовало 80 точек. При 5 секундах количество точек также должно увеличиться. Я бы сделал ±150. Можете делать больше, если, конечно, вам хватит терпения и усидчивости всех их отредактировать. Данный пример 100% работает для данной двери. По идее, должен работать и для остальных раздвижных дверей, типа межкомнатных дверей в убежищах или прозрачной переборки в здании проекта "Чистота" в Мемориале Джефферсона. Возможно могут отличаться редактирование некоторых вкладок. Но я не проверял, по этому не могу сказать точно.

На этом всё. Спасибо за внимание. Надеюсь статья была для вас интересной и содержательной. 



Теги: Fallout New Vegas, Nifskope, Sliding Door, Fallout 3, Раздвижные двери, анимация
Всего комментариев: 13

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











Ответ на жалобу смотрите в разделе жалоб