Анимация three.js: Скелет / Скиннинг против Морфа
Поэтому после некоторых экспериментов с анимацией Morph и Skeletal (экспорт из Blender) я вижу, что файлы скелета почти в 10 раз меньше, чем файлы Morph. Казалось бы, очевидно, что скелет является лучшим вариантом, но мне было интересно, есть ли минусы в его использовании.
В частности, я подозреваю, что для оживления скелета требуется гораздо больше обработки, чем морфа. Когда один лучше другого? Будет ли иметь значение, если я оживляю 100 моделей против одной? Если скелет требует больше обработки, и я размещаю приложение в сети, будет ли уменьшение пропускной способности (из-за небольшого размера файла) стоить дополнительной обработки, которая потребуется во время выполнения?
Спасибо за любой вклад.
1 ответ
Действительно, скелетная анимация требует немного больше обработки, потому что матрицы костей должны быть рассчитаны (в JS) в каждом кадре и загружены в GPU. В то время как с морфируемой анимацией вся интерполяция может выполняться на стороне GPU. Так что это действительно торговля производительностью памяти.
Когда у вас одновременно воспроизводится много анимаций, обработка действительно будет иметь определенную стоимость. В то же время, однако, несколько разных морфируемых анимаций будут иметь большие размеры файлов.
Как вы упомянули.
Так что это зависит от случая. Есть некоторые тонкости, на которые следует обратить внимание:
- Морфинг анимации может быть сохранен с уменьшенным количеством кадров в секунду, если анимация не слишком быстрая или сложная, так что у вас будут файлы меньшего размера.
- Скелетные анимации содержат информацию о костях, которую вы можете использовать, чтобы прикрепить вещи к своей модели, например, у вас есть модель солдата, к которой вы хотите прикрепить различные пушки. С анимацией морфа вы не можете сделать это, поэтому вам придется анимировать как солдата, так и каждое оружие.
- На самом деле вы можете использовать оба типа анимации в одном приложении, выбирая наиболее подходящие для каждого использования.
- SkinnedMesh-es, в отличие от MorphAnimMesh-es, в настоящее время не поддерживают лучевую передачу. Если вам нужна радиопередача, например, для выбора объектов, вам понадобится пока что использовать морфирующую анимацию.