我正在探索SceneKit API,并且一直在尝试从头开始构建模型和动画(而不是像大多数文档似乎建议的那样使用外部工具/ dae文件)。这个实验主要针对Mac OS 10.13.5上的XCode 9.4,为macOS环境构建,偶尔将功能复制到在iPhone SE上运行的11.4版的姐妹iOS项目。
我注意到的一件事是,当我创建一个SCNSkinner时,skeleton属性返回nil,并且没有任何骨骼似乎保留了它们的节点层次结构。这意味着当我移动父/根骨骼节点时,只有该节点与其关联的网格一起移动。可能导致无法设置skeleton属性的原因,以及为什么不保留此骨骼节点层次结构?
这也与另一个问题有关。当我尝试将任何类型的动画直接应用于骨骼时,我似乎无法获得任何响应。持有skinner的节点似乎接收动画,就像我将子节点与动画一起附加到动画时一样,我可以看到这些子节点正在动画化。但是,作为skinner属性的一部分的骨骼和网格不会生成动画。我可以影响这些骨骼节点,并查看在蒙皮网格中反映的结果更改的唯一方法是运行单个操作以某种方式更改骨骼节点,例如更改其位置。因此,我可以为skinner设置动画的唯一方法是将自定义SCNAction附加到基本模型节点,然后使用经过的时间和持续时间计算属性值随时间的变化,考虑到可用的选项,这对我来说似乎过于手动。 API。
这个缺失的功能似乎扩展到其他属性,例如约束,这在我看来实际上是骨骼动画的内容,因为它们允许访问IK和球/关节关系,使动画过程相对无痛。这个项目的要点是探索构建在Swift / SceneKit上的3D建模和动画工具的可能性,而不是利用第三方软件,或者重建SceneKit试图从头开始做的事情,因为缺乏文档和访问源代码代码。
尽管我在创建SCNSkinner时发现了一些未记录的警告,但是我可能会遗漏哪些东西阻止这些属性运行,因为它们看起来应该如此?
项目源代码可在此处获取:https://github.com/louisfoster/glob我特别提及此文件的工作:https://github.com/louisfoster/glob/blob/master/glob/Components/AnimGeo.swift
当然,另一种选择是在我编辑(模型/装备/动画)3D文件的同时不断生成和解析DAE文件,也可以更改它并使用SCNScene等等。但是,我相信这可能是一个很大的问题。太暴力的方法。我还发现SceneKit与某些DAE文件结构的交互存在问题,需要使用变通方法或模型I / O的使用,这是解决我所面临的问题的一种相当全面的方法。
这似乎是一个有点相关的问题,但它是从3年前开始的,目标是ObjC。所以我不确定问题域是否必须相同:Custom SceneKit character won't clone correctly