Three.js: Загрузить анимацию Mixamo Animation

Созданный на 11 февр. 2015  ·  67Комментарии  ·  Источник: mrdoob/three.js

Привет, я риггинг и анимацию моего персонажа с помощью mixamo ... затем я импортирую их в блендер через FBX ... я затем экспортирую их в js с помощью вашего экспортера (пробовал каждый экспортер ... каждый).

Результат вот:
http://instagram.com/p/y8NQjQkk9-/?modal=true

он всегда выглядит таким искаженным, и я, кажется, не могу этого понять ... это всегда руки ... Это из-за количества костей. mixamo имеет 16 или sth. и marine_anim из примеров более 50.

Пожалуйста, помогите брату ... через три дня я на исходе моей мудрости | возиться

Question

Самый полезный комментарий

В качестве альтернативы вы можете просто экспортировать как FBX из Mixamo и загружать напрямую с помощью FBXLoader.
Начиная с последнего выпуска (R89) он должен работать очень плавно.

Все 67 Комментарий

После объединения этого PR https://github.com/mrdoob/three.js/pull/6052 я предлагаю попробовать экспортер из ветки dev. У него есть 2 разных варианта позы для POSE и REST . Установите арматуру на одно или другое, а затем во время экспорта убедитесь, что свойство Skeletal animation совпадает. Попробуйте оба варианта и посмотрите, поможет ли один из них. Для некоторых людей POSE работает, а для других - REST .

хм, так экспортировано с использованием скелетной анимации отдыха и в режиме позы ...

это мои файлы http://we.tl/CNM5qEmBMs
включая исходный финал и оба экспорта ...

Режим отдыха = никакого движения
Режим позы = странные искажения

Вы сказали: "У него есть 2 различных варианта положения позы для ПОЗИЦИИ и ОТДЫХА. Установите арматуру в одну или другую" ... я не знаю, как настроить мою аматуру на позу или отдых ... я хочу использовать блендер только как переводчик с mixamo на threejs ... извините, если мой вопрос к нубу

Вы имели в виду режимы редактирования позы и режим редактирования объектов?

Хорошо Режим позы --- те же искажения
В режиме редактирования следующий журнал ошибок:

error

Невозможно воссоздать эту ошибку, но я заметил, глядя на номера строк в трассировке, возможно, вы не используете ту же (последнюю) версию, что и в dev . Также убедитесь, что вы не выполняете экспорт Scene с этим активом. Просто сделайте пока экспорт одной геометрии (поскольку ObjectLoader еще не работает со скелетными сетками).

Что касается битых анимаций; Я могу воссоздать как сломанную анимацию, так и проблему с отсутствующей анимацией. Есть люди, которые получают работающий экспортер анимации (пример https://github.com/mrdoob/three.js/issues/5582#issuecomment-73444737), поэтому я подозреваю, что есть некоторые проблемы с процессом импорта FBX. Очень сложно определить, экспортер это или импорт FBX. Я подумал, есть ли какие-то преобразования, которые нужно применить к костям, но я еще не знаю.

Привет, чувак, большое спасибо за ваше время и понимание!

возможно, вы не используете ту же (последнюю) версию, что и в dev.

Я думаю, что работаю с последней версией, потому что могу выбрать позу и отдохнуть:
«Параметр анимации теперь является перечислением, требующим от пользователя выбора между POSE и REST»

поскольку ObjectLoader еще не работает со скелетными сетками

По моему опыту, это не безумнее ... Я загрузил геометрию и сцену с помощью objectloader в threejs. Следующая ошибка создается с помощью Objectloader и дает тот же результат, что и предыдущий экспорт геометрии.
newerror

Я могу воссоздать как сломанную анимацию, так и проблему с отсутствующей анимацией.

Было бы очень интересно, если бы вы НЕ смогли воссоздать проблему ...
Следовательно, вы видите любую возможность экспортировать модель в threejs ...

В целом это интересно, так как это модель, экспортированная Mixamo. Если эта модель работает - подойдет любая модель mixamo. (теоретически ;))

в любом случае спасибо за изучение.

С текущей версией Blender и только с геометрией и без экспорта сцены я попадаю в режим позы:

poseterror

и в режиме покоя

resterror

Я могу экспортировать геометрию, только если экспортирую сцену с отверстиями

хорошо, я думаю, что нашел ... это ошибка в ссылке между вершинами геометрии и анимированными костями ... сетка и скелет отключены

После ручного масштабирования и поворота сетки по направлению к скелету, как это

for (var i = 0; i < geometry.children[0].geometry.vertices.length; i++) {
                vector = geometry.children[0].geometry.vertices[i];
                var axis = new THREE.Vector3(0, 1, 0);
                var angle = Math.PI / 2;
                geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle);
                geometry.children[0].geometry.vertices[i].multiplyScalar(0.01);
 }

я получил вполне нормальный результат.

Итак, прежде всего - зачем мне вращать сетку ... я помню при импорте в mixamo, что мне пришлось повернуть мою модель точно на 90 градусов ... это из-за направления -z
Зачем масштабировать? без понятия ...

теперь приходит глючная вещь, в моей модели не было идеальных TPos ... руки были слишком низкими ... я оснастил ее миксамо, и после этого она все еще была идеальной ... я видел ее в блендере ... и она идеально подходила для ... видел это в максе тоже было прекрасно.
ТОГДА экспорт в Threejs и отображение между костями и телом ссылались на первоначально созданное тело в макс.

tpose

следовательно, есть математическая ошибка в привязке вершин и костей в их матрице преобразования.

Интересно, действительно ли это ошибка или дополнительная функция? Это может очень хорошо решить вашу проблему, но прервать экспорт для кого-то еще, кому не нужно импортировать активы FBX (что я уже видел раньше с анимациями POSE и REST). Используемая логика (для костей и вершин) уже некоторое время существует (скопирована из старого экспортера), и я не говорю, что она идеальна или без изъянов, но если бы это была ошибка в математике, я думаю, мы бы увидели больше вопросов. Придется применить ваш пример кода в экспортере, а затем запустить множество тестов на множестве тестовых примеров (чего я не валяю).

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

С текущей версией Blender и только с геометрией и без экспорта сцены я попадаю в режим позы:

В сообщении об ошибке указано «Недействительный объект сетки». Экспорт геометрии основан на выборе, и вы, скорее всего, выбрали арматуру, а не сетку.

Привет, чувак, еще раз спасибо, что изучили это.
я не хотел говорить, что мой код должен попасть в экспортер. Я хотел отметить следующее: внутри цепочки от max до mixamo и blender все назначается так, как должно быть. как только он дойдет до threeJs - происходит простое смещение преобразования (в моем случае это было rot и scale), которое вызывает ошибку .. это преобразование ссылается на исходную сетку, которая когда-то была создана (где бы то ни было) и игнорируется в блендере и миксамо ... но возродился при экспорте.

К сожалению, я должен признать, что я не волшебник матрицы - иначе я бы с радостью протянул руку помощи, поскольку вы, ребята, очень много работаете. Спасибо за понимание.

Я никогда не использовал миксамо. Используется ли Y-up? Интересно, что произошло: если maximo - Y-up, то при импорте FBX пришлось бы переориентировать актив на Z-up, а затем экспортер снова переориентировал Y-up на three . Интересно, нужно ли применять преобразования актива в Blender при импорте, если это будет правильно экспортировать в three .

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

я не хотел говорить, что мой код должен попасть в экспортер.

И в более общем плане я имел в виду то, что пытается применить углы осей к положениям вершин.

vector = geometry.children[0].geometry.vertices[i];
var axis = new THREE.Vector3(0, 1, 0);
var angle = Math.PI / 2;
geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle); <-- would need something like this as well

но я также немного понимаю, и, возможно, это пытается заставить экспортер обрабатывать слишком много переменных

Интересный комментарий по поводу FBX
https://github.com/mrdoob/three.js/issues/2803#issuecomment -11458920

Применили ли вы поворот, который вы, вероятно, сделали к своей модели и арматуре внутри файла блендера? Вы знаете, с помощью ctrl + A> Поворот и масштабирование в объектном режиме. Я видел очень похожие вещи, потому что не делал этого. @princemio

Моя сетка постоянно искажается, или я получаю ошибки, и я не могу экспортировать несколько анимаций. Вернулся к экспортеру r69, который, кажется, хорошо работает даже в Blender 2.73a

@ пожалуйста-подождите ... нет, на самом деле я не ... но, может быть, от миксамо до блендера ...
@kimasendorf вы пытались вручную воссоздать меш в threejs?

Сетка была смоделирована в Blender. Несмотря на то, что это низкополигональный персонаж, безусловно сложно вручную воссоздать сетку в threejs. И как это могло помочь?

в моем случае сетка и кости не выровнены друг с другом ... следовательно, изгиб модели пытается соответствовать костям ... если у вас нет костей, то это не имеет к этому никакого отношения ...

кстати ... я не имел в виду "воссоздать" лол ... извини, я пытался написать "перестроить" модель ...

У меня были похожие проблемы с каждым более сложным скелетом, который я пробовал до сих пор. Включая марин, включенный в репо three.js и представленный в примерах. Вот что я получаю, используя переключатель позы:

Морпех в позе:
https://antont.github.io/three.js/examples/webgl_animation_skinning.html

Этот экспорт находится в:
https://github.com/antont/three.js/blob/blenderexport_buggy_marineskinning/examples/models/skinned/marine/marine_anims-pose.json

Минимальный пример из тестов экспортера работает. Помощник скелета соответствует модели при использовании там режима позы.

Я попробую (некоторые) эти уловки из уже закрытой другой проблемы (# 4660):

  1. Вам понадобятся ключевые кадры для каждой кости, которую вы хотите экспортировать.
  2. Сетка должна быть в Т-образной позе. Вот два способа сделать это: а. Выполните действие в Т-позе. Этому действию нужен фрейм, в котором все кости очищены от трансформации. Это должен быть текущий кадр при выборе экспортера. б. Удалите модификатор Armature из меша непосредственно перед экспортом. После экспорта файла отмените последнее действие, чтобы вернуть модификатор.

и:

Я смог заставить это работать только тогда, когда я сохранил модификатор Armature, но отключил обе группы вершин и оболочки костей (затем снова включил после экспорта). В моем случае удаление модификатора не помогло.

возможно также:

Применили ли вы поворот, который вы, вероятно, сделали к своей модели и арматуре внутри файла блендера? Вы знаете, с помощью ctrl + A> Поворот и масштабирование в объектном режиме.

Если кто-то превзойдет меня в получении рабочего экспорта из этого примера смеси и расскажет, что было необходимо ... большое спасибо! :) Я использую эту смесь: https://github.com/mrdoob/three.js/blob/master/examples/models/skinned/marine/marine_anims.blend

Хорошо, теперь он работает, обновлен https://antont.github.io/three.js/examples/webgl_animation_skinning.html (если кто-то видел версию с ошибками ранее, убедитесь, что не получили ее из кеша сейчас)

Пробовал много чего вперед и назад, проверил, что все кости были привязаны, как остальные, так и варианты позы и т. Д., Но в конце концов, похоже, это было просто, когда у меня была apply modifiers странная деформация. Это имеет смысл, потому что тогда модификатор арматуры был применен к базовой геометрии при экспорте, а затем дополнительно деформирован анимацией skel в three.js.

Итак, есть рабочий экспорт немодифицированной морской смеси с новым экспортером по адресу: https://github.com/antont/three.js/blob/example_skinning/examples/models/skinned/marine/marine_anims.json

Я думаю, что у него только одна из анимаций, теперь нужно выяснить, как экспортировать все анимации с новым экспортом.

Снимок экрана с используемыми параметрами:
threejs-skelexport-marineoptions

@antont, спасибо за исследование!

Я настраиваю канал команды Slack для three.js, в основном для работы над проблемами анимации, но его можно использовать для всего, что связано с тремя. Это частный командный канал, поэтому люди могут присоединиться только по приглашению. Я ищу:

  • люди, которые знают Python
  • люди с глубоким пониманием риггинга в Blender
  • люди с опытом анимации _и_ сцены, готовые поделиться

Это не элитарное дело. Я ограничен во времени и у меня нет пропускной способности, чтобы научить кого-нибудь Python или Blender, поэтому я прошу прощения, если это не кажется новичкам (для этого и предназначен IRC). Это для тех, кто действительно хочет положить этому конец и может внести свой вклад в несколько полезных навыков. IRC меня раздражает, и даже потоки на github не являются моим любимым местом для совместной работы. Я использовал Slack с другими группами, и это было здорово.

Отправьте мне электронное письмо (и обратите внимание на свой дескриптор github) для приглашения
ed [точка] caspersen [at] gmail [точка] com

Я думаю, что изменение в последней версии API блендера нарушило метод, который экспортер использует для выбора действия на сетке.

Поведение, которое я наблюдаю (не полностью подтверждено), заключается в том, что экспортер экспортирует:

  1. Действие, выбранное для арматуры, которая является родительской для выбранной сетки ...
  2. Попытка экспортировать другие невыбранные анимации и сбой при попытке установить анимацию на арматуре, чтобы пошагово пройти через ключевые кадры действий. В результате анимация из шага 1 многократно экспортируется под разными именами действий ... Продолжительность, тем не менее, кажется правильной среди различных действий.

Я думаю, что недавнее изменение в Blender теперь требует, чтобы арматура была фактическим выбранным объектом в трехмерном представлении, чтобы изменение действия действительно вступило в силу.

Эту проблему можно решить, изменив экспортер так, чтобы он требовал выбора арматуры для экспорта вместо сетки, и изменение действия, выполняемое внутри скрипта, может работать.

Дайте мне знать, если вам нужна дополнительная помощь с экспортером блендера .. У меня приличный опыт в написании скриптов для версий до 2.6 ..

Еще одна проблема, мне нужно было выбрать правильную комбинацию «отдыха» как в параметрах скрипта, так и на арматуре. Это кажется хрупким ..

Еще одна проблема - "Применить модификаторы" ...
Насколько я могу судить, в обычных обстоятельствах экспорта меша со скелетом этого никогда не должно быть, и он должен быть отключен по умолчанию или иметь отдельный переключатель для исключения мешей со скелетом.
Применение модификаторов заставляет каркас трансформировать сетку в любой кадр, на который она в данный момент установлена.
Это соединяет привязку к сетке и демонстрирует проблемы, показанные в другом месте в этом потоке.

Было бы неплохо найти способ упростить эти шаги.

Я только что провел несколько тестов и подтвердил, что экспортер экспортирует кадры одной и той же анимации для каждой экспортированной анимации ...

Итак, поскольку я экспортировал свою сетку с выбранным действием "прогулка" ...
Все анимации в файле являются копиями анимации «прогулки» под разными именами и разной продолжительности.

Я удивлен, что экспортер не дает сразу сбой в случае, если у вас есть действие с большим количеством кадров, чем другие анимации в файле.

Краткое описание этой ошибки:

Все ключевые кадры экспортированной анимации являются ключевыми кадрами выбранной анимации, а не их собственными ключевыми кадрами.

Я нашел по крайней мере частичное исправление этого ...

В "io_three \ exporter \ api \ animation.py"

в начале "parse_pose_action" (около строки 183)

вставить:

context.scene.objects.active = armature

С этим изменением я теперь могу экспортировать уникальные анимации ...

Привет, спасибо за отзыв + исправление. Я сделал рекомендованное изменение и экспортировал с выключенными «Позой» и «Применить модификатор», и это отлично работает !!
благодаря

context.scene.objects.active = арматура

С нетерпением жду возможности попробовать это.

Были те же проблемы, которые я поднял:

https://github.com/mrdoob/three.js/issues/7165

Работа сработала для меня, я счастлив, что могу запустить несколько анимаций. Спасибо за это!

Большой! Рад, что смог помочь!

Я связал некоторые другие ошибки, которые могут быть проявлениями этого, обратно в эту ветку.

@manthrax (с вашим частичным исправлением) у меня хорошо работает экспорт «Скелетные анимации: поза» и
image

Демо персонажа с 3 работающими анимациями> http://unboring.net/lab/6326/hero_72/

Как вы думаете, возможно ли / легко будет правильно экспортировать и запускать анимацию в «режиме отдыха»?
Потому что в этом случае экспортер записывает только ключевые кадры, а не каждый кадр, а файл json имеет размер с 873 КБ до 174 КБ.

Разослал несколько приглашений в Slack. Не знаю, какое время у меня будет завтра, но в воскресенье должна быть пара часов.

@arturitu Я могу разобраться в этом ... Каково сейчас поведение неправильной позы rest_mode?
Похоже на ту же проблему?

@repsac :

В настоящее время экспорт больших анимаций на моем компьютере занимает много времени ...

Оказывается, в большинстве случаев это связано со спамом в журналах ...

И простое отключение регистратора, вероятно, не исправит этого. У меня была эта проблема со сценариями python в прошлом ... Даже если вывод журнала отключен, построение строки по-прежнему происходит в операторах регистрации.
Сценарий необходимо переписать, чтобы он выполнял что-то вроде «if (logging) log.debug (« blah »);» на всех операторах журналирования, чтобы избежать накладных расходов на форматирование всех сообщений.

Простое комментирование сообщений журнала, которые я видел при экспорте анимации / ключевых кадров, увеличило время экспорта с 2 минут до примерно 5 секунд.

@arturitu Я попробовал экспорт rest_pose ... Я получил файл меньшего размера, но привязки скелета не работают при попытке воспроизведения ... Есть идеи?

Я тестирую морской blend-файл, привязанный к другой сетке ...

image

Скелетные анимации: Отдых

image

Скелетные анимации: поза

@manthrax Я думаю, что в Rest есть проблема с костями в JSON, потому что у многих из них много "parent": null, тогда как в Pose кости имеют правильное родительское значение. И количество костей другое (в моем случае в Позе пишем 38, а в Отдыхе только 28)

Но я не знаю, нужен ли другой тип BlendCharacter.js для отображения правильной анимации.

Сценарий необходимо переписать, чтобы он выполнял что-то вроде «if (logging) log.debug (« blah »);» на всех операторах журналирования, чтобы избежать накладных расходов на форматирование всех сообщений.

Вероятно, нет, это может быть адресовано в самом модуле регистрации. Посмотри на это сейчас

Еще одна проблема, мне нужно было выбрать правильную комбинацию «отдыха» как в параметрах скрипта, так и на арматуре. Это кажется хрупким ..

Это так, и я пытался решить эту проблему в прошлом. Есть закомментированные разделы с

armature.data.pose_position =

повсюду. При попытке использовать его в оболочке Blender он работал, но не во время экспорта. Я не пробовал в последних версиях Blender, так что, возможно, это было исправлено (пока оно снова не сломается).

С этим изменением я теперь могу экспортировать уникальные анимации ...

Хороший улов. Контекстуальная осведомленность Блендера, которого он требует, временами настолько неявна, что иметь дело с ней становится просто безумно.

Отключить журнал было легко. Поскольку репо three просто чертовски велико, я создал временное репо, которое будет относиться только к экспортеру, все в конечном итоге будет снова объединено.
https://github.com/repsac/io_three

Насколько я могу судить, в обычных обстоятельствах экспорта меша со скелетом этого никогда не должно быть, и он должен быть отключен по умолчанию или иметь отдельный переключатель для исключения мешей со скелетом.

Если не может быть убедительно, почему он должен оставаться включенным, я бы выбрал значение False если анимация включена. Единственная проблема может заключаться в экспорте сцены, и я нахожусь на заборе, если экспорт сцены все равно должен поддерживать анимацию. Были проблемы с тем, как Blender обрабатывает действия под капотом, что делает его очень хрупким.

@repsac Просто хотел сказать .. Экспортер

re Ведение журнала: я до сих пор не уверен, как устранить накладные расходы на форматирование сообщений журнала, просто отключив вывод в структуре ведения журнала, но, возможно, я не понимаю нюансов этой структуры.

Насколько я могу судить, любое ведение журнала формы "someLoggingFunction (" форматированный текст: xyz ")" ВСЕГДА вызывает преобразование / форматирование текста сообщения, даже если функция не выводит текст внутри

Для ведения журнала с нулевыми накладными расходами все должно было бы иметь форму «Logger.log (function () {return SomeFormattedText;}), где переданная функция вызывается только в том случае, если ведение журнала включено.

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

re: Экспорт сцены с поддержкой анимации ...
Я согласен, что в ближайшем будущем, вероятно, слишком рано идти по этому пути, НО, если мы дойдем до точки, где это может сработать ... было бы довольно удивительно иметь возможность создавать целые уровни с анимацией и экспортировать WYSIWYG в three.js Ветряные мельницы будут вращаться ... реки и водопады могут анимироваться с помощью УФ-излучения ... платформы могут летать ... и все это без написания какого-либо кода. Когда-нибудь ...: D

Насколько я могу судить, любое ведение журнала формы "someLoggingFunction (" форматированный текст: xyz ")" ВСЕГДА вызывает преобразование / форматирование текста сообщения, даже если функция не выводит текст внутри

Ну, любой вызов журнала должен быть отформатирован как таковой:

logger.info("foo bar %s", arg)

Таким образом, строка не форматируется до тех пор, пока API ведения журнала не передаст *args под капотом. Я изменил логику ведения журнала на

https://github.com/repsac/io_three/blob/master/addons/io_three/exporter/__init__.py

        level = options.get(constants.LOGGING, constants.DISABLED)
        version = options.get('addon_version')
        if level != constants.DISABLED:
            logger.init('io_three.export.log', level=level)

https://github.com/repsac/io_three/blob/master/addons/io_three/logger.py

def _logger(func):

    def inner(*args):
        if LOGGER is not None:
            func(*args)

    return inner


<strong i="18">@_logger</strong>
def info(*args):
    LOGGER.info(*args)


<strong i="19">@_logger</strong>
def debug(*args):
    LOGGER.debug(*args)


<strong i="20">@_logger</strong>
def warning(*args):
    LOGGER.warning(*args)


<strong i="21">@_logger</strong>
def error(*args):
    LOGGER.error(*args)


<strong i="22">@_logger</strong>
def critical(*args):
    LOGGER.critical(*args)

Сообщение не должно форматироваться. У меня нет больших сцен, поэтому я не могу это проверить, но теоретически это должно быть, а если нет, то это становится причиной № 4576, почему я ненавижу программирование.

Надеюсь, ни один из моих комментариев не прозвучит как критика

Вряд ли, между технологическими компаниями, полными брокеров здесь, в Сан-Франциско (включая Кремниевую долину), и индустрией визуальных эффектов, я слышал, что в интервью мне было еще хуже.

В настоящее время просматриваю всю эту ветку и пытаюсь составить список того, что конкретно должно быть сделано. Отправлю его, когда у меня будет что-то, чтобы вы могли видеть, близко ли оно.

Ой отлично! Похоже, вы прикрыли регистрацию. Мой питон был немного слаб, чтобы понять нюансы вашего решения.

Маленький мир, я тоже в НФ!

Очень круто ... насколько я могу почерпнуть из этой темы, это в основном исправление одной строки, а затем устранение неоднозначности режима "отдыха" ... Я все еще не уверен, какой вариант использования в режиме ожидания когда-либо был .. если вы знаете такое, я был бы признателен за понимание ...

Мне пришлось бы покопаться во всех старых проблемах, чтобы дать вам конкретные ссылки, но для быстрого ответа вот разбивка:

  • около r66 был коммит, который изменил экспорт с использования REST на использование режима POSE
  • Примерно в это же время я начал свою собственную версию экспортера, которая стала той, о которой мы говорим сейчас, и основывала свою исходную логику на логике REST.
  • на р70 шахта была заменой экспортером, вот тогда весь ад разразился
  • Я заменил логику на поддержку POSE, которая затем нарушила экспорт для других пользователей
  • Я не мог понять, что, черт возьми, происходит, поэтому я реализовал переключение между двумя

На данный момент, похоже, нужно решить 2 вопроса:

1) установка активного контекста на арматуре

context.scene.objects.active = armature

2) не применяйте модификаторы к сеткам со скинами

Я снова протестирую автоматическое переключение позы. Кто-то однажды сказал, что они выяснили это из другого сценария, но этот секретный соус не попал в экспортера.

@manthrax Можете ли вы
https://github.com/repsac/three.js/tree/anim_fix

Это хорошо работает для анимации в режиме позы, если ваш первый ключевой кадр имеет арматуру, настроенную точно так же, как и ваша сетка. Если вы попытаетесь добавить какие-либо преобразования loc / rot / scale в режиме позы и назначить их в качестве первого ключевого кадра, тогда модель будет искажена.

Я также столкнулся с проблемой REST / POSE (обновленная ветка dev). Модель имеет 40+ костей и 7 действий. POSE работает нормально, но экспортированный файл огромен. REST имеет полностью искаженную анимацию.

Проблема, похоже, находится в экспортированном массиве _skinIndices_. В режиме POSE или REST массив _skinIndices_ идентичен, но порядок и, следовательно, индексы в экспортированном массиве _bones_ полностью различаются. Я думаю, это потому, что __rest_bones () _ использует _armature.data.bones_ для индексации костей, а __pose_bones_ использует _armature.pose.bones_ (api / mesh.py). Позже __skinning_data () _ всегда использует _armature.pose.bones_ независимо от настройки REST / POSE. Быстрая проверка, кажется, подтверждает это. Использование _armature.data.bones_ в __skinning_data () _ правильно экспортирует мою модель и анимацию в режиме REST.

Я недостаточно хорошо знаю файл three.js, чтобы ответить на этот вопрос и отправить исправление, но какой из них на самом деле неправильный _skinIndices_ или порядок _bones_? Порядок _bones_ в REST кажется идентичным индексам групп вершин Blender, что, вероятно, хорошо.

Здравствуйте, этот вопрос не закрыт и не сделан вывод о том, что сейчас? так что у меня есть еще одно беспокойство по этому поводу: кто-нибудь испытывал одновременное воспроизведение двух анимаций? Мои испытания не работают, но я не уверен в качестве своего 3D-объекта. С другой стороны, из того, что я прочитал выше, мне интересно, возможно ли это на самом деле?

Чтобы завершить вопрос: разрешает ли экспортер блендера NLA?

@Derived yes смешивание и воспроизведение нескольких анимаций работают в последних версиях three.js

Nla в целом поддерживается только для костей AFAIK

Привет, спасибо за отзыв. Да, я могу запускать несколько анимаций и есть «смешивание» анимаций; Я использую v71, но с обновленной версией экспортера блендера (как обсуждалось здесь выше). Но позвольте мне лучше объяснить свое наблюдение:

Моя модель имеет 2 анимации: (A1) подъемный рычаг и (A2) поворот головы влево.

1) Сыграйте (A1) «Поднимите руки», а затем остановитесь на половине анимации (руки на полпути)
2) play (A2) «повернуть голову влево» => голова поворачивается влево, НО руки возвращаются в исходное положение, а не остаются на месте.
3) Наконец, если я играю 2 вместе, голова поворачивается влево и руки поднимаются, но не так, как они должны делать, а скорее как сочетание (A1) (подъем) и (A2) (не двигайте руками) с влиянием неподвижных костей. из (A1) в движущиеся из (A2) и наоборот.
Поэтому я заглянул в файл json и увидел, что анимация описывает положение костей для ВСЕХ костей в каждой анимации. Итак, для (A2) «повернуть голову влево» анимация включает положения костей для рук, которые просто не меняются (справа, A2, они не двигаются в A2). Но как three.js догадывается, что эти положения костей не имеют значения и не должны влиять на выполнение (A1)?
Надеюсь, этот пример понятен.

Схожу с ума по этому поводу

Вот моя смоделированная сетка в блендере:

blender-cycle

Вот это в threejs:

three-cycle

На вывоз потратил 2 дня подряд. Последний блендер, последние три. Каково текущее состояние экспортера?

@DelvarWorld Я думаю, вам нужно использовать экспортер Blender в ветке DEV, чтобы он работал правильно.

@arturitu Я :(

@DelvarWorld

Каково текущее состояние экспортера?

я думаю, что это

repsac был отменен mrdoob 30 декабря 2015 г.

может быть проблема. Очевидно, ему нужна любовь.

Я мог бы пойти на поиски различных ошибок, о которых сообщалось в последнее время. Можете ли вы поделиться файлом для воспроизведения этой проблемы (чем проще, тем лучше)?

Для удобства выложу и это здесь. Я попытался экспортировать тестовую модель из формы @DelvarWorld и разместил комментарий и

@phfatmonkey
https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561 вот этот?

Отличная работа по устранению всех этих проблем: +1:!

Когда вы закончите установку патча, не могли бы вы открыть новую заявку с описанием или ссылками на оставшиеся, недавно созданные или обнаруженные проблемы экспортера?

Невероятно сложно отслеживать материал, когда он размещается где-то в существующих билетах.

В идеале по одному на каждый случай (если еще не существует) и мастер «Проблемы с Blender Exporter» (или что-то в этом роде), ссылающийся на все.

То, что я помню на макушке, это

  • Нормалы не имели вращения (исправлено)
  • Проблема с анимацией при экспорте иерархии сцены. А теперь работает?
  • Тогда есть проблема с остальной позой, упомянутая в вашем сообщении
  • Затем есть проблема со скинами / ключевыми кадрами (сообщения об ошибках?)
  • ... (думаю, было больше)

Конечно! Это блестящая идея. Я постараюсь добраться до него в эти выходные,
иначе в понедельник, когда я вернусь в офис.
15 апреля 2016 г. в 17:12 "tschw" [email protected] написал:

@phfatmonkey https://github.com/phfatmonkey

8412 (комментарий)

https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561
этот?

Отличная работа по устранению всех этих проблем [image:: +1:]!

Когда вы закончите установку, не могли бы вы открыть новый билет
описание или ссылка на оставшиеся, вновь созданные или обнаруженные
вопросы экспортера?

Невероятно сложно отслеживать материал, когда он публикуется
где-то по существующим билетам.

В идеале по одному на случай (если еще не существует) и мастер "Blender Exporter".
Проблемы »(или что-то в этом роде), ссылаясь на них всех.

То, что я помню на макушке, это

  • Нормалы не имели вращения (исправлено)
  • Проблема с анимацией при экспорте иерархии сцены. А теперь работает?
  • Тогда есть проблема с остальной позой, упомянутая в вашем сообщении
  • Затем есть проблема со скинами / ключевыми кадрами (сообщения об ошибках?)
  • ...

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/mrdoob/three.js/issues/6050#issuecomment -210693332

А как насчет нелинейного редактирования анимации, которое можно сделать в Blender? Никого не интересует этот вопрос? Я объяснил суть дела в более раннем сообщении, но не получил комментариев?

@derivou
Какое сообщение?

Когда ему нужен собственный код, кто-то должен его написать. Вклад можно приветствовать ...

Здесь выше сообщение от 5 февраля я объяснил проблему при объединении нескольких анимаций.
Я был бы рад помочь в разработке, но я думаю, что сначала потребуется некоторое обсуждение, чтобы поделиться идеями и обсудить, как это реализовать. Я открыл поэтому предложение "Нелинейная анимация" # 7913

Это долгая проблема, и я признаюсь, что не все прочитал, но если проблема все еще такая, как описано в OP (т.е. нужен способ анимировать персонажа в Mixamo и загрузить в three.js), вы можете выполнить это с помощью экспортера glTF Blender и THREE.GLTFLoader. Вот мой рабочий процесс: https://medium.com/@donmccurdy/creating -animated-gltf-characters-with-mixamo-and-blender-728dc120e678

В качестве альтернативы вы можете просто экспортировать как FBX из Mixamo и загружать напрямую с помощью FBXLoader.
Начиная с последнего выпуска (R89) он должен работать очень плавно.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги