Цвета анимированных материалов не работают в three.js при экспорте из блендера с помощью коллады

Я пытаюсь имитировать мигающий свет на объекте, поэтому я анимирую цвет материала. Затем я экспортирую модель блендера в файл three.js через экспортер коллады.

Чтобы продемонстрировать проблему, я создал модель с одним кубом, на котором я меняю цвет с красного на зеленый и обратно на красный. Я также немного перемещаю куб.

В кадре 0 я делаю куб красным без смещения: введите здесь описание изображения

В кадре 12 я делаю его зеленым и немного смещаю: введите здесь описание изображения

Когда я запускаю анимацию в блендере, я вижу изменение цвета и смещение куба. Однако, когда я экспортирую его с помощью collada в three.js, куб перемещается, но остается одного цвета (цвет куба, который был активен в то время, когда я его экспортировал, например, он может быть либо красным, либо зеленым, но всегда один цвет). Я создал планкер, демонстрирующий проблему. Мой код коллады основан на примере three.js collada. Вот код, используемый для загрузки модели:

  factory.loadColladaModel = function () {
    console.log(`now in loadColladaModel`);
    var loader = new THREE.ColladaLoader();
    loader.options.convertUpAxis = true;

    var promise = new Promise( (resolve, reject) => {
      loader.load( 'color_animation.dae', (collada) => {
        console.log(`now in collada load closure`);

        let model = collada.scene;
        factory.scene.add(model);
        factory.animations = collada.animations;
        model.scale.x = model.scale.y = model.scale.z = 5.0;

        for ( var i = 0; i < factory.animations.length; ++i ) {
          var animation = factory.animations[ i ];

          var kfAnimation = new THREE.KeyFrameAnimation( animation );
          kfAnimation.timeScale = 1;
          factory.kfAnimations.push( kfAnimation );
        }

        resolve('loaded');
      })
    })

    return promise;
  }

Что мне нужно сделать, чтобы заставить three.js анимировать изменения материала (цвета), а также движение? Я вижу записи цветов под тегом «анимация» файла collada, поэтому я предполагаю, что collada поддерживает его. Я видел этот предыдущий вопрос, где кто-то должен был установить morphTargets в чтобы получить материалы для работы. Мне тоже нужно сделать что-то подобное? Является ли morphTargets только для движения или для цвета тоже?

Блендер three.js r84 2.78b

Огромное спасибо.


person vt5491    schedule 24.03.2017    source источник


Ответы (1)


По сути, похоже, что Three.js ColladaLoader просто не поддерживает анимацию материала (он поддерживает только анимацию положения и вращения). Я определил это, посмотрев на необработанную структуру данных, возвращаемую загрузчиком collada. Обратите внимание, что Объект 0, который соответствует анимации положения, имеет sids (строковые идентификаторы) и ключи и т. д. Объект 1, который соответствует материалу анимация, не имеет ни сидов, ни ключей. Хотя данные анимации материала находятся в необработанном файле collada, синтаксический анализатор ColladaLoader просто не читает их, поэтому цветные анимации отсутствуют.

консоль js

Судя по всему, загрузчик Collada "вроде устарел" на mrdoob (по состоянию на 5/2016). Существует ColladaLoader2, который должен стать следующей версией ColladaLoader, но я попробовал его, и оказалось, что он вообще не поддерживает анимацию. Я читал о загрузчике коллады, и действительно, это устаревший формат, и в основном он выглядит любит, что это тупик с точки зрения будущего роста (?)

К сожалению, я пробовал загрузчики obj, json и stl, и загрузчик collada, безусловно, лучший. В настоящее время я изучаю формат gltf, который в основном выглядит как коллада следующего поколения (например, новая и улучшенная версия также от группы Khronos). Я нашел это обсуждение очень полезным. По сути, пару лет назад был пользователь three.js, который написал свой собственный ColladaLoader, но с тех пор он отказался от Collada и теперь поддерживает glTF.

Обновление: я попробовал загрузчики GLTFLoader и GLTF2Loader, но, к сожалению, они не работают на полусложной сцене (сцена с 20 объектами и 310 лицами). Хотя формат перспективный. Я просто думаю, что между тестовым экспортером и тестовыми загрузчиками это просто не совсем стабильно на данный момент. Мне почти удалось заставить анимацию работать с форматом (хотя и не с материальной анимацией), когда я тестировал простой куб.

Похоже, мне придется пока остаться с Collada и просто делать материальную анимацию в javascript.

person vt5491    schedule 24.03.2017