Animation 如何从Collada.dae文件';将控制器变形为SceneKit?

Animation 如何从Collada.dae文件';将控制器变形为SceneKit?,animation,blender,scenekit,collada,Animation,Blender,Scenekit,Collada,根据需要,变形器的目标几何图形可以包含在.dae文件中: 可以从DAE文件加载所有变形信息和动画,也可以通过编程方式创建所有内容。” 我有一个collada.dae文件,其中包含变形控制器。该文件由Blender的collada exporter创建,带有“包含形状键”“已选定。这会将Blender的形状关键点转换为Collada的变形控制器。当我检查生成的文件时,我可以在中看到主几何图形后面列出的形状关键点。标题如下所示: <geometry id="Octopus-mesh_morph

根据需要,变形器的目标几何图形可以包含在.dae文件中:

可以从DAE文件加载所有变形信息和动画,也可以通过编程方式创建所有内容。”

我有一个collada.dae文件,其中包含变形控制器。该文件由Blender的collada exporter创建,带有“包含形状键”“已选定。这会将Blender的形状关键点转换为Collada的变形控制器。当我检查生成的文件时,我可以在
中看到主几何图形后面列出的形状关键点。标题如下所示:

<geometry id="Octopus-mesh_morph_Rest" name="Rest">
  <mesh>
    <source id="Octopus-mesh_morph_Rest-positions">
如何从SceneKit中访问这些变形控制器?在Xcode场景编辑器中,没有迹象表明变形控制器已被识别,例如按play键不执行任何操作,动画文件夹为空,并且除了基本几何体之外没有其他几何体

加载节点时,它没有附加
morpher
属性,也没有动画关键点。我尝试在树中搜索名为“Rest”的条目,但什么都没有

    let collada = SCNScene(named: "octopus.dae", inDirectory: "art.scnassets", options: nil)
    let octopus = collada?.rootNode.childNodeWithName("Octopus", recursively: true)
    octopus?.position = SCNVector3(0,-2,0)
    print(octopus?.morpher?.animationKeys) //nil
    print(octopus?.animationKeys) //Optional([])
是否有人设法从Collada.dae文件的变形控制器加载SCNMorpher目标?这可能是搅拌机的问题吗?Objective-C的回答以及快速的欢迎。谢谢

编辑

我还尝试使用
NSBundle
加载.dae,并将.dae放在
art.scnassets
文件夹的内外,以查看它是否有所不同,但仍然没有骰子:

    let collada = NSBundle.mainBundle().URLForResource("octopus", withExtension: "dae")!
    let sceneSource = SCNSceneSource(URL: collada, options: [
        SCNSceneSourceAnimationImportPolicyKey : SCNSceneSourceAnimationImportPolicyDoNotPlay
        ])
    let octopusDae = sceneSource?.entryWithIdentifier("Octopus", withClass: SCNNode.self)
    //let deform = sceneSource?.entryWithIdentifier("Rest", withClass: SCNGeometry.self)
            print(sceneSource?.entriesPassingTest(){(entry, id, stop) in return id.containsString("Rest") })
    print(octopusDae!.morpher)
    print(octopusDae!.animationKeys)
编辑2


通过将每个形状键保存为一个单独的.obj文件,我成功地在.obj文件中实现了这一点。但是我真的很想使用Blender的.dae文件,因为这将使迭代开发和使用具有大量形状关键点的模型变得更加容易(另外,在SceneKit中使用Blender.obj文件时有一些奇怪的怪癖,例如所有纹理坐标似乎都是垂直翻转的)。我需要的所有几何图形都在.dae文件中。我就是不能让SceneKit看到

Blender没有在需要实例控制器的节点下写入实例控制器。见搅拌机问题:T50807

如果只想从形状关键点加载SCNMorpher,可以将受影响节点下的实例\几何图元替换为引用库\控制器下相应项的实例\控制器

<node id="Cube" name="Cube" type="NODE">
    <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
    <instance_geometry url="#Cube-mesh" name="Cube">
      <bind_material>
        <technique_common>
          <instance_material symbol="Material-material" target="#Material-material"/>
        </technique_common>
      </bind_material>
    </instance_geometry>
  </node>

1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
变成:

  <node id="Cube" name="Cube" type="NODE">
    <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
    <instance_controller url="#Cube-morph" name="Cube-morph">
      <bind_material>
        <technique_common>
          <instance_material symbol="Material-material" target="#Material-material"/>
        </technique_common>
      </bind_material>
    </instance_controller>
  </node>

1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
SceneKit有自己的问题。据我所知,它无法正确导入具有SCNSkinner(又名Blender电枢)和SCNMorhper(又名Blender形状键)的节点的Collada文件。Blender不会导出此文件,但通过使用Collada CTS测试文件可以看到问题。在SceneKit中,皮肤变形、皮肤变形、变形都有问题


我制作了一个工具来修复丢失SCNMorpher的简单情况。可以在这里找到:

嗨,乔恩,干得好。这真的解决了我的问题。我意识到,我的模型的文件大小急剧增加(从5mb增加到100mb)。我的模型有很多面部表情的形状键(我想大约50个)。添加实例控制器真的会对文件大小产生如此大的影响吗?Jon,你是说在使用你的工具时,使用电枢和shapekeys的混合将无法实际工作或正确转换吗?我试过了,但没有用shapekeys得到正确的dae。
  <node id="Cube" name="Cube" type="NODE">
    <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
    <instance_controller url="#Cube-morph" name="Cube-morph">
      <bind_material>
        <technique_common>
          <instance_material symbol="Material-material" target="#Material-material"/>
        </technique_common>
      </bind_material>
    </instance_controller>
  </node>