March 29, 2024, 00:45
bigger smaller reset     1020px Wide width Full width Reset   * *

Gildor's Forums

  Homepage Facebook Read news on Twitter Youtube channel Github page
Welcome, Guest. Please login or register.
Did you miss your activation email?

« previous next »
Print
Author Topic: Экспорт-импорт аддитивной анимации  (Read 592 times)
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #15 on: November 02, 2022, 13:43 »

А вот и нет, в каждой папке имеется к обычной анимации аддитивная, вот оттуда и берётся первый кадр из обычной анимации, только что попробовал взять позу и примешать к аддитивной, тип указал правильный под смешивание, в итоге есть неестественное смещение туловища, а вот в случае если взять не позу, а именно анимацию из папки, что описано выше, то все идеально. Крч, тут пробовать надо, на все случаи свой вариант. Ноги, конечно же, если взять случай jog анимаций статичны, но тут уже понятно, что оно для верхней части тела предназначено. В общем всё, разобрался. Кстати, скрипт вполне рабочий, пусть даже является и хаком, возможно) Но работать должен на анимации под все игры ue4+. Хотя могу ошибаться и он работать будет под всё, т.к. берет входные данные из fbx а не из psa.
« Last Edit: November 02, 2022, 13:47 by Noterstone » Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #16 on: November 02, 2022, 15:47 »

Беру свои слова обратно, поспешил с выводами) Скрипт хоть и смешивает, но какой-то дерганный результат выходит, на некоторых плавно, на некоторых дёргано и прерывисто.
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #17 on: November 04, 2022, 14:02 »

Насколько я понял из переписке, что бы подключить адаптивную анимация скажем на анимацию ходьбы или бег, нужно добавлять уже каждый кадр additive animation к каждому кадру нужной анимации ( например просто ходьба ) к базовой анимации которой он относиться.

Как я вижу действия скрипта в максе :

1. Сначала подгружает additive animation - запоминаем матрицу трансформации костей
2. Затем подгружает базовую анимацию  - пересчитываем с additive animation каждый кадр
3. Выгружаем финальную анимацию.

Кстати в скрипте все основные функции для этого есть.


В maxScript мне ничего не понятно. Попытался что-то подобное повторить в блендере. дописав функционал для аддона, результаты так себе: https://youtu.be/jVZQadvVxgk
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #18 on: November 05, 2022, 02:05 »

В курсе кто-нибудь, чем отличается localSpace additiveType от MeshSpace? В первом случае все просто, локальные позиции и локальные повороты костей суммируются кроме корневой кости, со вторым типом уже сложнее.
Logged
RedBear
Full Member
***
Posts: 226


View Profile
« Reply #19 on: November 05, 2022, 09:31 »

В курсе кто-нибудь, чем отличается localSpace additiveType от MeshSpace? В первом случае все просто, локальные позиции и локальные повороты костей суммируются кроме корневой кости, со вторым типом уже сложнее.
localSpace это локальная система координат, MeshSpace это глобальная система координат.
Вот наглядный пример с анимацией в Unity: https://forum.unity.com/threads/mesh-space-additive.1296468/
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #20 on: November 06, 2022, 09:57 »

Не совсем в глобальном пространстве, не на столько там всё просто)
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #21 on: November 15, 2022, 13:06 »

Хм. Вижу что импортеры читают данные VQuatAnimKey из чанка ANIMKEYS. Там позиция и ориентация костей, а ключи со скейлом разве не записываются в psa? Или они в отдельном каком-то чанке пишутся? Я тут что задумал, вернее уже сделал. Восстанавливаю аддитивные анимации напрямую в формате psa, и оно работает отлично, что в максе с ActorX что в блендере с блендеровским импортером. Кратко: написал тулзу под cmd, читаю бинарные данные и записываю обратно но уже с изменениями. Весьма просто оказалось сделать данную операцию, в целом странно, что никто такое не сделал и не выложил сорцы.
« Last Edit: November 15, 2022, 13:15 by Noterstone » Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #22 on: November 15, 2022, 13:18 »

А, вроде нашел доку, они пишутся в отдельный чанк, там хранятся VScaleAnimKey
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #23 on: November 15, 2022, 14:38 »

Результат: https://youtu.be/6ohDI0b9UbI
Logged
RedBear
Full Member
***
Posts: 226


View Profile
« Reply #24 on: November 15, 2022, 20:03 »

Вы молодец. Будет интересно попробовать вашу тулзу и поглядеть сорсы.
Весьма просто оказалось сделать данную операцию, в целом странно, что никто такое не сделал и не выложил сорцы.
Просто людей, разбирающихся в этом не так много(например, поддержка импорта нормалей так и не была реализована). А те единицы, кто разобрались, обычно не делятся сорсами и результатами.
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #25 on: November 15, 2022, 21:01 »

Насчет нормалей - с моделями в полном объёме не разбирался, только данные о костях оттуда читаю. В целом вся информация имеется в документации по форматам: https://me3explorer.fandom.com/wiki/PSK_File_Format Не сложно разобраться, тем более на C# с его BinaryReader и BinaryWriter.
Сейчас я подзастрял на этапе конвертации анимации MeshSpace в нормальный вид (прямо сейчас решаю этот вопрос до конца). Дело в том, что в файле анимации хоть и есть инфа о том, какие кости имеются, но там не записана инфа о parentBoneIndex, а все потому, что надо эту инфу брать из psk. Сейчас вот я сделал парсер этого файла и читаю оттуда информацию которой не достаёт в psa. В общем, всё потому, что в psa на все кости имеются ключи (keyframes), а информация там записана для 266 костей, т.е. ассорти с данными в локальном пространстве, и потому туда записывать информацию о индексе, какой индекс кости является дочерним для кости с индексом например 1, не целесообразно, т.к. скелеты разные могут быть, и видимо раз так сделано и их иерархия, а вот как они записывают в psa под все вариации скелетов и под все кости анимации - вопрос... Не делают же они на убер скелете со всеми 266 костями под все персонажи  анимации? Видимо они мержат данные как-то под все кости что юзаются в игре. Потому сейчас функционально только под конкретного персонажа можно будет восстановить анимации, что печально, на мой взгляд, ограничения всё-же будут в виде того, что придётся конкретный скелет от конкретного персонажа сначала указать, а лишь потом указывать пару анимаций (базовая + аддитивная) и только потом конвертацию запускать. В случае анимаций, которые предназначались в LocalSpace этого ограничения нет - можно смело перемножить квартенионы + скейлы и просуммировать позиции на каждый keyframe, а вот для случая MeshSpace это ограничение уже на мой взгляд существенно. Ибо данных в PSA почему-то не записывается на каждую кость какой parentBone(int32) имеется у кости, там либо 0 либо -1, почему так - точно не уверен. Возможно Gildor прочтёт и подкорректирует меня в этом вопросе)
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #26 on: November 15, 2022, 21:08 »

Вы молодец. Будет интересно попробовать вашу тулзу и поглядеть сорсы.
Насчёт сорцов - это уже как с MeshSpaceRotationOnly анимацией разберусь.
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #27 on: November 16, 2022, 01:54 »

Йюху!) Я таки разобрался и с анимациями MeshSpaceRotationOnly.
Результат восстановленной позы(анимации из одного кадра) AimOffset.
Результаты:
AR_NonTargeted_CD_CMM_SEQ0


AR_NonTargeted_CU_CMM_SEQ0


Однако один небольшой момент смущает, левая рука как-то немного отъезжает от цевья винтовки... либо это было так сделано изначально в анимации...
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #28 on: November 16, 2022, 02:20 »

Всё, решил и с этим проблему:
Logged
RedBear
Full Member
***
Posts: 226


View Profile
« Reply #29 on: November 16, 2022, 14:24 »

Насчет нормалей - с моделями в полном объёме не разбирался, только данные о костях оттуда читаю. В целом вся информация имеется в документации по форматам: https://me3explorer.fandom.com/wiki/PSK_File_Format
Насколько я помню, давно уже этот вопрос изучал, Umodel не поддерживает экспорт нормалей в PSK. Следовательно, документация бесполезна. Помню один хороший человек вроде пытался сделать кастомный билд Umodel с поддержкой экспорта нормалей и, как я понял, он работал. Однако, скрипт ActorX, который он также попытался подкорректировать, импортировал нормали не корректно. По крайней мере в моем случае было так (я даже  вроде бы скрины выкладывал в его теме), хотя у него все работало отлично. Возможно проблема была в том, что модели были из разных игр, или просто у меня руки не из того места Smiley
Однако, эта функция, если она работала, так и не была добавлена в официальный билд, что как бы говорит само за себя.
Не сложно разобраться, тем более на C# с его BinaryReader и BinaryWriter.
Программисту возможно и не сложно, а простому человеку, вроде меня, далекому от программирования, очень сложно.
Logged
Print 
« previous next »
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS