Что я пытаюсь сделать
Я хочу воспроизвести анимацию персонажа (например, волну), одновременно смешивая выражение лица (например, моргание или движение губ) с помощью BlendShapeWeightsComponent.
Это отлично работает, когда анимация не воспроизводится, но когда я запускаю анимацию с помощью entity.playAnimation(...), ключи формы, кажется, полностью игнорируются или переопределяются во время этого воспроизведения.
Моя настройка
Модель: Оснащенный персонаж с BlendShapes и анимацией внутри файла .usdz (экспортированный из Blender)
Я вручную анимирую ключи формы с помощью setBlendShapes(...), как показано ниже.
Код: Выделить всё
func setBlendShapes(_ blendShapes: [String: Float]) {
guard let root = modelEntity,
let armatureEntity = findEntity(named: "Armature", in: root),
var blendShapeComponent = armatureEntity.components[BlendShapeWeightsComponent.self] else { return }
let weightNames = blendShapeComponent.weightSet[0].weightNames
var weights = blendShapeComponent.weightSet[0].weights
for (blendShapeName, weight) in blendShapes {
if let index = weightNames.firstIndex(of: blendShapeName) {
weights[index] = weight
}
}
blendShapeComponent.weightSet[0].weights = weights
armatureEntity.components.set(blendShapeComponent)
}
Код: Выделить всё
modelEntity.playAnimation(trimmedAnimation)В SceneKit та же модель работает хорошо, формы смешивания анимируются вместе с воспроизведением анимации.
Как я могу анимировать или обновлять BlendShapes во время воспроизведения анимации (из модели)?
Это ограничение в RealityKit, или я упускаю что-то критическое в как комбинировать скелетную анимацию с весами BlendShape?
Чтобы упростить воспроизведение, я создал демонстрационный проект и буду рад поделиться им при необходимости.
Заранее спасибо!
Анимация поясных форм вместе с воспроизведением анимации
Подробнее здесь: https://stackoverflow.com/questions/797 ... n-playback
Мобильная версия