Version: 5.5
Переназначение гуманоидных анимаций
Справка по анимации

Производительность и оптимизация в Mecanim

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

Настройка персонажа

Количество костей

В некоторых случаях вам понадобится создать персонажа с большим количеством костей, например, когда вы хотите много настраиваемых элементов. Эти дополнительные кости увеличат размер сборки, а также нужно ожидать относительных затрат производительности на каждую дополнительную кость. Например, 15 дополнительных костей на риге, в котором уже присутствуют 30 костей, повлекут за собой 50% увеличение времени обработки в режиме Generic. Заметьте, что вы можете использовать дополнительные кости как в режиме Generic, так и в режиме Humanoid. Если текущая анимация не использует дополнительные кости, “затраты” на их обработку незначительны. Эти “затраты” должны быть еще меньше, если к костям ничего не привязано или привязки спрятаны.

Множественные меши c привязкой к костям (Skinned Meshes).

Старайтесь собирайте Skinned Meshes в одну, если это возможно. Использовать два Skinned Mesh Renderers для одного персонажа - это плохая идея, беря в расчет продуктивность. Лучше будет, если у вашего персонажа будет только один материал, хотя бывают случаи, когда требуется более одного.

Система анимации

Контроллеры

Animator не тратит время на обработку, если к нему не добавлен Controller.

Простая анимация

Если сравнивать проигрывание одного Animation Clip без смешивания в Mecanim и в legacy animation system, то Mecanim делает это медленнее. Старая система очень прямолинейная, информация из анимационной кривой записывается напрямую в transform. У Mecanim есть временные буферы, которые используются для расчетов смешивания, то есть присутствует дополнительное копирование данных. Mecanim оптимизирован для анимаций со смешиванием и более сложных настоек анимаций.

Кривые масштаба (Scale Curves)

Animating scale curves is more expensive than animating translation and rotation curves. To improve performance, avoid scale animations.

Note: This does not apply to constant curves (curves that have the same value for the length of the Animation Clip ). Constant curves are optimized, and are less expensive that normal curves.

Слои

Наибольшее количество времени Mecanim затрачивает на просчет анимаций, а затраты на AnimationLayers и AnimationStateMachines сводятся к минимуму. Следовательно “издержки” связанные с дополнительным слоем, синхронизированным или нет, зависят от того, какие анимации и какие деревья смешивания анимаций проигрываются на этом слое. Если вес слоя выставлен в ноль, то он не будет обновляться.

Гуманоидный (Humanoid) и Общий(Generic) режимы

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

  • При импортировании Гуманоидных анимаций используйте BodyMask чтобы убрать цели ИК (IK Goals) или анимации пальцев, если они не требуются.
  • При использовании общих (Generic) анимаций, помните, что использовать root motion более затратно, чем не использовать. Если ваши анимации не нуждаются в root motion, убедитесь, что у персонажа не выбрана корневая кость (root bone).

Сцена Mecanim

Здесь много чего можно оптимизировать, вот некоторые полезные советы:

  • Используйте хеши вместо строк, чтобы осуществлять запросы к компоненту Animator.
  • Реализуйте небольшой AI слой, для управления компонентом Animator. Можно сделать так, чтобы он предоставлял простые функции обратного вызова (callbacks) для OnStateChange, OnTransitionBegin и т.д.
  • Используйте State Tags, чтобы легко сопоставить вашу AI state machine с Mecanim state machine.
  • Используйте дополнительные кривые, чтобы имитировать события (Events).
  • Используйте дополнительные, кривые чтобы разметить ваши анимации, например, в связке с target matching.

Оптимизации в процессе исполнения

Видимость и Обновления

Всегда оптимизируйте анимации, установив опцию Culling Mode у компонента animator в значение Отталкиваясь от Рендеров(Based on Renderers), также отключите свойство Обновлять вне экрана (Update When Offscreen). Следовательно, анимации не будут обновляться, когда персонаж невидим. Для более подробной информации изучите skinned mesh renderer.

Переназначение гуманоидных анимаций
Справка по анимации