Добрый день господа. Так как я совсем уже не занимаюсь скриптингом, чтобы не лежало мертвым грузом немного дополнений и предложений по данному плагину.
Сегодня немножко модифицируем данный плагин, и немного узнаем об алгоритме работы с анимациями моделей и зачем это нужно.
Небольшое превью что мы получим -
alt link rutube:
Итак на просторах сети моделей с танцами практически нет. Я занялся портированием некоторых танцев из игры - Фортнайт. Благодоря Блендеру и плагину для ретаргетинга, с этой задачей я справился.
В итоге мы получили модель с
73 танцами. Так же в архиве у меня были старые танцы которые я портировал из CS:Nexon. (почти все они были убраны, и оставлены только самые удачные на мой взгляд в количестве 3 шт). И так как в данных танцах у нас разные скелеты и на сервере разные модели игроков - нам нужно решение для того что-бы визуальное качество не портилось - вытянутыми шеями или огромными плечами. Для этого мы будем использовать контроллеры в модели с танцами.
Теперь приступим к главному - установка и манипулирование контроллерами в модели, для улучшения визуальной части танца, на разных скелетах в моделях. Т.к. на сервере могут быть установлены не только стандартные модели игроков, но и кастомные модели с отличающиеся скелетами - контроллеры помогут нам подогнать наш изначальный скелет зашитый в анимацию с танцами, на различные модели (либо если сами анимации созданы на основе разных скелетов, и отличаются друг от друга).
*НЕЗНАЧИТЕЛЬНО
Для этого в конфиг с танцами добавлено 2 контроллера:
1. Контроллер шеи (регулирует ее высоту)
2. Контроллер плеч (регулирует их ширина)
- Dance | Star | models/fn_dance_01.mdl | 0 | 1.0 | _ | 200 | 175
Это позволит нам для каждой из анимаций, задавать силу смещения для шеи и плеч. (все точные настройки для каждого из пунта танцев, стоит выполнять на одной референсной модели). Итого пройдясь в игре по всем анимациям, и подогнав значения для них, мы получаем более эстетичный результат, с возможностью его контроля и изменения в дальнейшем.
Для добавления контроллеров в другие анимации танцев - в .qc файле нашей модели, прописываем следующие условия для компиляции:
Код:
//1. Контроллеры для головы и шеи
$controller 1 "Bip01 Neck" X 2.000000 -2.000000 // Задаем движение по высоте Х, и устанавливаем предел оси в +2 и -2 единицы
$controller 1 "Bip01 Head" X 2.000000 -2.000000
//2. Контроллеры для плеч
$controller 2 "Bip01 L UpperArm" X 4.000000 -4.000000 // Задаем движение по оси Х, и устанавливаем предел оси в +4 и -4 единицы
$controller 2 "Bip01 R UpperArm" X 4.000000 -4.000000
В плагине за установку значений на контроллере отвечает - var_controller, контролируются которые значениями 0..255 (в установленных пределах осей контроллера в модели). Т.е. теперь мы можем контролировать силу "растягивания" костей непосредственно в момент запуска танца.
Необходимый функционал для данной реализации [необходимо дописать автору плагина, или кому нибудь кому - это будет интересно]:
1. Требуется реализовать - чтение из файла с танцами [Dance.ini] глобальных данных для установки общего контроллера для конкретных моделей.
По сути нужно будет просто в момент установки танца на игрока, сравнивать какая у него модель и значения из списка. И к тому - что уже из контроллеров установлено плюсовать или минусовать те значения которые у нас конкретно для данной модели прописано в конфиге со списком анимаций.
Например в конце списка у нас дополнительные стоки с именем модели игрока - и глобальными корректировочными значениями для контроллеров:
@models/player/gign/gign.mdl | -100 | -100 | 0
@models/player/leet/leet.mdl | -100 | -100 | 0
@models/player/admingirl/admingirl.mdl | 0 | 0 | 0
@ - указатель что глобальная установка на модель [мейби можно как то удобнее реализовать]
1 - Путь к модели игрока |
2 - Глобальное значение первого контроллера |
3 - Глобальное значение второго контроллера |
*4 - Глобальное значение с числом основных анимаций модели (приплюсовываем количество анимаций) т.к. после всех основных будут идти значения для маленьких "гномо" моделей.
*"гномо" модели - в данном случае - считаются модели которые по размеру в половину меньше стандартных
(например Магистр Йода, Ракета из стражей галактики и другие примеры которые многие могли видеть на серверах).
Реализовать так же дополнительное чтение значения для "гномо" моделей.
set_entvar(iEnt,var_sequence,iSequence /*+ fContollerGnome*/); // при добавлении gnome сюда плюсуем кол-во основных анимаций
и получаем на выходе:
@models/player/gnome/gnome.mdl | 0 | 0 | 73 // пропускаем первые 73 анимации и продолжаем с №ANIM + 73
* Все что указано в файле Dance.ini - не прям детально настроенный результат, можно подобрать значения еще точнее. В качестве референса была взята женская модель. Для стандартных моделей значения обычно в районе
-100 для обоих контроллеров.
Предложения для автора плагана:
1. Интеграция с плагином\ами "Шапок", для наследования одетых на игрока предметов - для того чтобы в момент проигрывания анимаций - весь декор оставался на игроке. [+- реализуется бытро и легко]
Аля в момент создания модела накидываем шапки заного (через API, через функцию или непосредственно в коде)
Как пример:
Код:
engfunc(EngFunc_SetModel, player,szModel);
set_entvar(iEntHats, var_classname, "clashead");
set_entvar(iEntHats, var_model, MDL_FILENAME);
set_entvar(iEntHats, var_modelindex, MODELINDEX);
set_entvar(iEntHats, var_movetype, MOVETYPE_FOLLOW);
set_entvar(iEntHats, var_owner, player);
set_entvar(iEntHats, var_aiment, player);
2. В моей прикрепленной модели так же на руках\ладонях есть 2 аттач кости, к которым можно при желании - либо привязать оружие игрока (пистолет\нож\граната) либо какие нибудь кастомные эффекты в виде спрайта...
3. Для некоторых\всех танцев сделать возможность установки - очень медленного перемещения без сброса анимации во время танца ( например *0.01 от стандартной скорости).
4. Возможно кто-то захочит воспроизводить звук\музыку вместе с танцем, в конфиге, добавить строку с указанием пути к файлу со звуком\музыкой. (тогда стоит реализовать возможность выключить\включить данную функцию)
- Dance | Star | models/av_dance_01.mdl | 0 | 1.0 | _ | 200 | 175 | sound/music/Star.wav
5. При нахождении рядом с танцующим, и наведясь на него, игрок не имеющий доступа к танцам \ либо просто другой игрок не танцующий, мог бы при нажатии допустим на [E] +use - повторить данный танец за игроком.