Анимация three.js: Скелет / Скиннинг против Морфа

Поэтому после некоторых экспериментов с анимацией Morph и Skeletal (экспорт из Blender) я вижу, что файлы скелета почти в 10 раз меньше, чем файлы Morph. Казалось бы, очевидно, что скелет является лучшим вариантом, но мне было интересно, есть ли минусы в его использовании.

В частности, я подозреваю, что для оживления скелета требуется гораздо больше обработки, чем морфа. Когда один лучше другого? Будет ли иметь значение, если я оживляю 100 моделей против одной? Если скелет требует больше обработки, и я размещаю приложение в сети, будет ли уменьшение пропускной способности (из-за небольшого размера файла) стоить дополнительной обработки, которая потребуется во время выполнения?

Спасибо за любой вклад.

1 ответ

Действительно, скелетная анимация требует немного больше обработки, потому что матрицы костей должны быть рассчитаны (в JS) в каждом кадре и загружены в GPU. В то время как с морфируемой анимацией вся интерполяция может выполняться на стороне GPU. Так что это действительно торговля производительностью памяти.

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

Как вы упомянули.

Так что это зависит от случая. Есть некоторые тонкости, на которые следует обратить внимание:

  • Морфинг анимации может быть сохранен с уменьшенным количеством кадров в секунду, если анимация не слишком быстрая или сложная, так что у вас будут файлы меньшего размера.
  • Скелетные анимации содержат информацию о костях, которую вы можете использовать, чтобы прикрепить вещи к своей модели, например, у вас есть модель солдата, к которой вы хотите прикрепить различные пушки. С анимацией морфа вы не можете сделать это, поэтому вам придется анимировать как солдата, так и каждое оружие.
  • На самом деле вы можете использовать оба типа анимации в одном приложении, выбирая наиболее подходящие для каждого использования.
  • SkinnedMesh-es, в отличие от MorphAnimMesh-es, в настоящее время не поддерживают лучевую передачу. Если вам нужна радиопередача, например, для выбора объектов, вам понадобится пока что использовать морфирующую анимацию.
Другие вопросы по тегам