Этот набор утилит позволяет создавать анимацию для актёров Скайрима с использованием Инверсной Кинематики и Ограничителей.
Главные особенности: - лёгкое и быстрое создание реалистичной анимации - использование Инверсной Кинематики и Ограничителей - позволяет работать с Блендером 2.62+ - чтобы ускорить (в 2~10 раз) экспорт анимации из Блендера можно удалить все части тела из проэкта (не забудтье сохраниться перед этим) - если скрипт выдаёт ошибку, попробуйте прописать в нём полный путь к файлу "skeleton.txt" который находится в папке, куда вы распаковали этот мод (у некоторых пользователей Блендер почему то пытается искать его в своей инсталяционной директории, а не в папке проэкта)
(...инструкция по работе с программой осталась такой же самой как в "Animation Tools N1" и находится внутри архива...)
Надеюсь утилита будет полезна модостроителям (особенно тем, кто не работает в 3DMax и не имеет возможности использовать NifScripts)
PS: Очень хотелось бы получить отзыв от знающих людей по поводу правильности создания ИК арматуры, может я где то ошибся, может что то можно сделать лучше ?
PPS: Случайно никто не встречал информации по поводу преобразования координат косточек арматуры, а именно - как посчитать ROLL для косточки ?
Дело в том что НИФ файл хранит координаты косточки в виде: координата начала косточки (x,y,z) + матрица поворота. А Блендер по другому: координата начала косточки (x,y,z) + координата конца косточки (x,y,z) + ROLL (поворот косточки вокруг собственной оси) В своём скрипте, при импорте скелета, я вычисляю только координату конца косточки, а как посчитать ROLL - не знаю (руками подгонял). Отсюда и скрипт экспорта получился в четыре раза больше, чем хотелось бы, и анимация не идеально точная. Помогите пожалуйста положить этот последний кирпичик в фундамент данного мода !
Не знаю зачем, в НИФ-е должна быть точно такая же. Особенность движка наверное. Но программно работать с файлом удобнее когда она есть, как бы всё в одном месте получается.
Вполне возможно поэтому и нет CTD при не совпадающих NIF и TRI.
А меня вот другой вопросик начал интересовать, может знаешь: где в Creation Kit поменять путь к NIF файлу головы. Думаю создать новую расу с уникальной головой, а где её прописать в упор не вижу.
Спасибо за картинку ! Я еле понял как это всё работает, чуть моск не поламал ! А когда пытался добавить в FormList новую строку - вспомнил очень много нехороших слов, и придумал пару новых. Оказалось туда ТОЛЬКО МЫШКОЙ перетащить объект можно ! (чтоб на того кто этот интерфейс в СК делал дисфункция прямой кишки напала)
А на счёт новой головы - не всё так просто. Я же модер-извращенец и обычные вещи, которые все умеют - не делаю. Но меня родилась новая идея - уникальный подход к анимации обьектов. И для её воплощения нужно заставить игру с помощью скрипта отрисовать мои будущие морфы. А т.к. это возможно только для головы, то её я и начал курочить. И довольно успешно ! У меня уже готова основа мода, осталось только создать какой нибудь прикольный объект, наделать для него морфов и посмотреть как это всё в игре будет выглядеть...
PS: да и ещё, я вспомнил - в TRI файлах основная модель нужна ОБЯЗАТЕЛЬНО т.к. в НИФ файле ты можешь двигать и переворачивать свой объект как пожелаешь, и новое положение точек испортит всю анимацию. А так к новому положению точек применяются "относительные" смещения, посчитанные по TRI файлу, и всё отлично работает !
Та всё намного проще чем кажется! SKSE для моей задачи не требуется. Скрипт в Папирусе пишу (уже написал, там всего пара строчек ).
Помощь с моделями - это хорошо, я буду очень благодарен; но я ещё четко не представил эффектного морфа для реализации. Пока только одна интересная идея есть - из плоскости, при активации, формируется голова (типа как Т1000 в Терминаторе). Вот думаю теперь, возможно ли такой морф в Блендере сделать, чтобы потом в игру экспортнуть ... (а как AutoIt с моделированием связан ???)
Да, ведь если в TRI файле не будет исходной модели, а браться модель будет из NIF-а, а в NIF-е мы модельку запросто можем передвинуть или повернуть, то в итоге нам никогда не получить правильных векторов смещений и следовательно анимация будет неверной.
В Блендере тоже есть что то подобное, но для этой задачи оно не надо. Я просто сплющу базовую модель в НИФ и ТРИ файлах и посмотрю как оно будет выглядеть. (кстати, идея с масштабом мне очень понравилась: простая и быстрая )
Почитал про AutoIt - шикарная программа, надо будет изучить. (и где то у меня лежала инсталяшка этого Топогана, уже не раз встречаю как его хвалят, надо тоже будет глянуть что за зверь...)
Так и должно быть: по ТРИ файлу - обсчёт векторов смещений, а по НИФ файлу - применение их в игре.
Для массового переименования я выложен специальный архив с "PathChanger - automated MASS renamer" где уже всё настроено. Нужные НИФ файлы складываются в папку IN, запускается батник, результат находится в папке OUT.
Замены нету, поверь, так удобнее. Но если надо куче файлов убрать приставку "_new" просто используй Total Commander. 3000 файлов переименовываются в два клика за пол секунды. (комбинация CTRL+T). Ооочень эффективно.
Переименование "_sk" не избежать, если меняется имя основной текстуры. Мне показалось это удобным, и я зашил это в код (как и для "_n"). Можно легко переделать конечно, но пока что не вижу причин для этого.
Да, можно, причём легко. Но правда пока не представляю как она может пригодиться, операция ведь единичная, можно и Нифскопом ...
Точно, не работает. Ты всё равно все файлы в папку IN должен собрать, в OUT потом и переименуешь всё сразу. Если скриптовый язык BAT файлов позволяет, можешь попробовать модифицировать цикл, чтобы он и в подпапки заглядывал. Я такого пока не встречал и не знаю точно возможно ли это...
В броне "_sk" за блеск отвечает кажется ? в любом случае даже если такой текстуры и не будет физически, проблем в игре не возникнет.
Вот мне любопытно, что же ты такое делаешь, что тебе надо менять именно этот параметр ??? Как по мне так всё равно что там стоит...
А разве такое возможно ??? На сколько я знаю - то нет. Всё чего можно добиться, это эффект типа "инверсной кинематики" с помощью аннотаций в анимации. Что применимо к движению ногами, когда в заданное время нога всегда окажется на земле и не будет эффекта, что персонаж "скользит" по поверхности.
Но аннотации придется руками добавлять в XML файле готовой анимации. Мои утилиты их не поддерживают, ибо никому оно особо и не надо.
Правда в твоём примере всё равно и тело и броня получат новый путь к "_sk" текстуре. Тут уж никак не выкрутиться, разве что вычитывать имена связанных с текстурами NiTriShape блоков (если они будут иметь имена), и по ним уже определять менять блок текстур или нет.
Не совсем так. Замена будет происходить при совпадении путей из первого массива, и только там - где путь совпадёт. Спец. слова типа [INSERT]будут работать для любого массива путей, найденного в НИФе. Но можно добавить проверку по имени меша, например так:
Набросал я тут небольшой батник для работы с подпапками.
Спасибо за батник, опробую его на днях.
Был рад стараться
Добавлено (29.07.2013, 13:16) --------------------------------------------- Допилил батник для удобства пользования, теперь всё что есть в папке IN обрабатывается и перекладывается в папку OUT с учётом подкаталогов. (спасибо blackelfkiev) Попробовать пред-релизную сборку можно тут: [url=http://rghost.ru/download/47745371/48af4dff6a75c0460e6a40d3fd0d638cfc97dbe1/PathChanger%20-%20Automated%20MASS%20renamer%20(with%20Subfolders).rar]Скачать[/url] Если замечаний не будет, её и выложу.
ПС: сорри за корявую ссылку, но сайт её чего то не может корректно обработать...
Понял, всё правильно. Поиск по имени я сделал только до первого встреченного NiTriShape блока с заданным именем, остальные не обрабатываются. (мне кажется так правильнее) Но в самом первом блоке нет путей с заданным именем, вот ничего и не меняется. Правда вводит в заблуждение появление "_new.nif" файла. Но это я исправлю.
Можно и я вопросик один спрошу, может подскажете куда копать.
Есть самодельный объект - шапка, типа "Armor", лёгкая броня. Цепляю я на него скрипт для обработки событий OnEquipped()и OnUnequipped(). Внутри OnEquipped() ставлю команду RegisterOnSingleUpdate(12.0). Внутри события OnUpdate() пишу Debug.Notification("Test")ну и ещё пару строк.
Так вот не хочет выполнятся событие OnUpdate()хоть ты тресни. Такой же скрипт, но на объекте типа "Activator" прекрасно работает, но там запуск идёт с помощью OnActivate(). Почему так ? Как исправить ? Помогите пожалуйста.
Получается это так задумано разработчиками, что на одежде не работает OnUpdate() ? Я всего то хотел запустить в цикл один спецэффект, пока надет предмет. А с квестами я пока дела не имел, да и излишне усложнять скрипт не хотелось, разве что совсем деваться будет некуда...
А вот ещё вопрос созрел - может ли предмет определить надет ли он в данный момент ? (был бы неплохой обходной путь для моей проблемки)
Тогда сделай способность, которая добавляется при одевании
Спасибо, это ещё одна важная особенность скриптинга, про которую я забыл ! Просто в голове не укладывается делать казалось бы обычные вещи через магию. Я так когда то цеплял на ГГ обработку "Евентов" т.к. опять оказалось что по другому это сделать вообще нельзя. Такое ощущение, что если хочешь сделать более менее нормальный работающий скрипт, его сразу надо делать через магический эффект. Там уж точно всё будет работать как в мануалах описано...
На всякий случай, хочу показать свой маленький но рабочий код. Может быть более опытные скриптеры смогут показать косяки, которых я пока не замечаю. (очень бы хотелось узнать зачем такой простой код реализовывать через квест, что такое "глобальные" циклы по сравнению с моим и как их применять, ну и конечно же почему всё таки не работает событие OnUpdate() ...) :
Sound Property SomeSound Auto Int SoundREF EffectShader Property EffectShaderSource1 Auto VisualEffect Property VisualEffectSource1 Auto ObjectReference PlayerREF
ПС: забыл описать работу скрипта: когда надевается шапка, скрипт включает постоянный повторяющийся звук типа ....LPSD и кастует на носителе первый эффект. И дальше с промежутком в 12 сек ненадолго подкастывает второй эффект. Когда шапка снимается - все эффекты и звук пропадают.
Artem13: проверил загрузку при надетой шапке и действительно нет никакой разницы, многозадачность отлично работает!
AleksTirex: Спасибо за анализ кода и советы ! я и не догадывался что есть такие особенности. (только "Utility.Wait(12.0)" это был не косяк а маленькая фишка, типа постэффекта когда ГГ шапку снял, а её воздействие его ещё не "отпустило" , но большого толку от него по правде нету) И ещё хочу сказать ОГРОМНОЕ спасибо за идею с магическим эффектом для анимированных объектов !!! Обязательно её попробую! Это будет шикарный выход для меня для создания живых бесконфликтных вещей!
Ой, я и забыл про возможность "размножения" кода! А ведь и действительно если быстро надевать и снимать шапку так и будет. Когда то с моими "личинками" такое было, так пришлось с помощью "состояний" с этим бороться. Но этот метод с переменной мне больше нравиться - он проще.
AleksTirex, хочу ещё раз сказать тебе большое спасибо за идею с маг. еффектом ! Я проверил - корона отлично работает !!! Можно привязать заскиненные обьекты к любым нодам скелета, и светом так же легко управлять. Причём, насколько я понял, на такую одежду можно попробовать повесить как минимум три анимации: Strat/Loop/End, а может и свою вызывать можно с помощью PlayGamebryoAnimation(). В общем я просто в восторге ! (я несколько месяцев пытался всякими хитрыми манёврами обманывать систему, чтобы заставить анимацию работать, но до такого способа не додумался)
Теперь осталось только включить заново фантазию и замутить чего-то оригинальненького !!!
ПС: кстати, для того чтобы корона правильно надевалась на голову, нужно только поменять привязку в НИФ файле в блоке [NiStringsData] (который называется "AttachT") с MagicEffectNode на NPC Head [Head].