Я использую Maya для создания анимации для использования в SceneKit . Я экспортирую как COLLADA файл ( .dae ), используя встроенный экспортер Maya FBX DAE .
Анимации на узле преобразования все работают отлично. Например, если у нас есть анимация перемещения, поворота или масштаба - или их комбинации - анимация корректно импортируется с узлом.
Однако, когда я импортирую анимацию, основанную на входных данных смешанной формы, анимация не воспроизводится.
В Xcode, если я щелкаю по файлу .dae и начинаю смотреть на атрибуты, узел находится там, и к нему присоединена смешанная форма (геометрия), и он манипулируется.
Кроме того, в списке есть анимация, и если я посмотрю на атрибуты внутри узла, там также будет показана анимация.
Если я перебираю свойство SCNNode animationKeys , анимация появляется и с ней связано правильное количество времени. Но я не могу заставить его работать.
На стороне Xcode я попробовал:
Сказать «Обновить», когда будет предложено обновить файл .dae в Xcode.
Не обновляется файл .dae при появлении запроса
Применение Jon Allee Collada Morph Adjuster к файлу .dae перед передачей его в Xcode.
Загрузка как SCNSceneSource вместо SCNScene
Что касается майя, я пробовал несколько вариантов процесса создания / экспорта:
Попробовал " удалить одиночный ключ " (с и без)
Попробовал настройку " испечь анимацию " в окне экспорта
Пробная проверка и снятие отметки " Деформированные модели " и " Смешанные формы "
Под опцией " Collada " в окне экспорта я пробовал с проверкой " Single Matrix " и без нее. Я обычно проверяю " Single Matrix " сейчас или получаю кучу анимаций в Xcode. Однако проверка или отсутствие проверки этой опции не , похоже, влияет на поведение SceneKit. Анимации преобразования работают в любом случае, а анимации смешанных фигур не работают в любом случае.
Я также внимательно посмотрел на десятки вопросов переполнения стека - это , а не дублирующий вопрос, также как и на форумах Apple, и у меня нет идей.
Я собрал быстрый пример проекта , который демонстрирует как рабочий, так и нерабочий, и включает в себя исходные файлы Maya, а также пару видео с пояснениями.
Я использую:
Maya 2018.2 (Cut ID: 201711281015-8e846c9074)
Xcode 9,3 (9E145)
macOS High Sierra 10.13.4
iOS 11.3.1
Фрагмент кода:
let scene = SCNScene()
let fileName = "anim.scnassets/cube-blend.dae"
let modelName = "pCube2"
guard let nodeScene = SCNScene(named: fileName) else {
fatalError("COULD NOT OPEN SCENE FILE \(fileName)")
}
guard let node = nodeScene.rootNode.childNode(withName: modelName, recursively: true) else {
fatalError("COULD NOT FIND NODE \(modelName) in file \(fileName)")
}
scene.rootNode.addChildNode(node)
Это все, что нужно для загрузки и запуска других анимаций.
ОБНОВЛЕНИЕ 1:
Я подал это как ошибку в Apple, которая проверила и вернулась и сказала, что Maya генерирует фиктивный файл .dae.
В частности, они написали:
cube-blend.dae содержит анимацию формы наложения, но целевой синтаксис
неверно: pCube2-lib-morph-weights (Weight_0_0). Это
проблема экспортера (мы попытались импортировать этот файл в Modo [не могу открыть его]
и Cinema4D [загружается правильно, но без анимации]).
Это ошибка в экспортере Maya.
Основываясь на моих собственных тестах, я склонен с ними согласиться, хотя трудно понять, каким образом один из самых верхних кусков программного обеспечения, используемого в анимации, имеет полностью сломанный экспортер.
Я попытался вставить сюда настоящий файл COLLADA .dae, но он слишком большой. Вот ссылка на Dropbox:
куба blend.dae
Вот раздел:
<library_animations>
<animation id="pCube2-anim" name="pCube2"><animation><source id="pCube2-Matrix-animation-input"><float_array id="pCube2-Matrix-animation-input-array" count="25">
0.041667 0.083333 0.125000 0.166667 0.208333 0.250000 0.291667 0.333333 0.375000 0.416667 0.458333 0.500000 0.541667 0.583333 0.625000 0.666667
0.708333 0.750000 0.791667 0.833333 0.875000 0.916667 0.958333 1.000000 1.041667</float_array><technique_common><accessor source="#pCube2-Matrix-animation-input-array" count="25"><param name="TIME" type="float"/></accessor></technique_common></source><source id="pCube2-Matrix-animation-output-transform"><float_array id="pCube2-Matrix-animation-output-transform-array" count="400">
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 0.010000 0.000000 0.000000 0.000000 0.000000 1.000000</float_array><technique_common><accessor source="#pCube2-Matrix-animation-output-transform-array" count="25" stride="16"><param type="float4x4"/></accessor></technique_common></source><source id="pCube2-Interpolations"><Name_array id="pCube2-Interpolations-array" count="25">
LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR
LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR
LINEAR LINEAR</Name_array><technique_common><accessor source="#pCube2-Interpolations-array" count="25"><param type="name"/></accessor></technique_common></source><sampler id="pCube2-Matrix-animation-transform"><input semantic="INPUT" source="#pCube2-Matrix-animation-input"/><input semantic="OUTPUT" source="#pCube2-Matrix-animation-output-transform"/><input semantic="INTERPOLATION" source="#pCube2-Interpolations"/></sampler><channel source="#pCube2-Matrix-animation-transform" target="pCube2/matrix"/></animation><animation><source id="pCube2-lib-morph-weights-animation-inputWeight_0_0"><float_array id="pCube2-lib-morph-weights-animation-inputWeight_0_0-array" count="5">
0.041667 1.041667 1.541667 1.583333 3.875000</float_array><technique_common><accessor source="#pCube2-lib-morph-weights-animation-inputWeight_0_0-array" count="5"><param name="TIME" type="float"/></accessor></technique_common></source><source id="pCube2-lib-morph-weights-animation-outputWeight_0_0"><float_array id="pCube2-lib-morph-weights-animation-outputWeight_0_0-array" count="5">
0.000000 0.788732 1.000000 1.000000 0.000000</float_array><technique_common><accessor source="#pCube2-lib-morph-weights-animation-outputWeight_0_0-array" count="5"><param name="Weight_0_0" type="float"/></accessor></technique_common></source><source id="pCube2-lib-morph-weights-animation-intanWeight_0_0"><float_array id="pCube2-lib-morph-weights-animation-intanWeight_0_0-array" count="5">
0.000000 0.222222 0.000000 0.000000 0.000000</float_array><technique_common><accessor source="#pCube2-lib-morph-weights-animation-intanWeight_0_0-array" count="5"><param name="Weight_0_0" type="float"/></accessor></technique_common></source><source id="pCube2-lib-morph-weights-animation-outtanWeight_0_0"><float_array id="pCube2-lib-morph-weights-animation-outtanWeight_0_0-array" count="5">
0.000000 0.111111 0.000000 0.000000 0.000000</float_array><technique_common><accessor source="#pCube2-lib-morph-weights-animation-outtanWeight_0_0-array" count="5"><param name="Weight_0_0" type="float"/></accessor></technique_common></source><source id="pCube2-lib-morph-weights-animation-interpolationWeight_0_0"><Name_array id="pCube2-lib-morph-weights-animation-interpolationWeight_0_0-array" count="5">
BEZIER BEZIER BEZIER BEZIER BEZIER</Name_array><technique_common><accessor source="#pCube2-lib-morph-weights-animation-interpolationWeight_0_0-array" count="5"><param type="name"/></accessor></technique_common></source><sampler id="pCube2-lib-morph-weights-animationWeight_0_0"><input semantic="INPUT" source="#pCube2-lib-morph-weights-animation-inputWeight_0_0"/><input semantic="OUTPUT" source="#pCube2-lib-morph-weights-animation-outputWeight_0_0"/><input semantic="IN_TANGENT" source="#pCube2-lib-morph-weights-animation-intanWeight_0_0"/><input semantic="OUT_TANGENT" source="#pCube2-lib-morph-weights-animation-outtanWeight_0_0"/><input semantic="INTERPOLATION" source="#pCube2-lib-morph-weights-animation-interpolationWeight_0_0"/></sampler><channel source="#pCube2-lib-morph-weights-animationWeight_0_0" target="pCube2-lib-morph-weights(Weight_0_0)"/></animation></animation>
</library_animations>
ОБНОВЛЕНИЕ 2:
Инженер Apple также заявил, что « Замена цели« pCube2-lib-morph-weights (Weight_0_0) »на« pCube2-lib-morph-weights (0) »работает ». Однако в моем тестировании я не смог это подтвердить.
Есть ли какие-либо идеи о том, как предполагается, что веса смешанных фигур будут ссылаться в блоке анимации?
Спасибо!