如何从 Xcode 中导入的 .dae 中访问混合形状
Posted
技术标签:
【中文标题】如何从 Xcode 中导入的 .dae 中访问混合形状【英文标题】:How to access blend shapes from blender imported .dae in Xcode 【发布时间】:2019-12-16 15:19:30 【问题描述】:我对 ARKit 和 SceneKit 以及 3D 建模/Blender 2.8 非常陌生,所以请耐心等待,并为冗长的详细解释道歉,我只是觉得我错过了一些简单的东西,并且在线指南并不多,我可以找到,关于如何做到这一点。
我正在尝试使用 ARKit 和 Scenekit 构建我自己的 animoji/memoji,我正在尝试将其导出到 .dae/.scn 并访问所有混合形状,以便能够使用 ARFaceAnchor 混合形状修改它们.
所以我的 3d 模型具有所有必要的混合形状:
我已将 3d 模型从 Blender 导出到 COLLADA (.dae),并选择了以下内容: 主要的 - 只选, 包括形状键
几何- 应用修改器 - 查看 三角测量
如果我随后在文本编辑器中打开 .dae 文件,我可以在其中看到所有 Blend 形状和材质。
然后我将文件导入我的 .scnassets 文件夹并获取以下实体:
在这个阶段,我设法找到了一些包含搅拌机形状作为几何变形器的示例 .scn 文件。但是,我的仅包含以下内容,无法添加它们。
我设置了我的场景,SCNNode 工作正常,出现在视图中。我也无法在 SCCNode 的任何地方找到混合形状。
func sceneSetup()
let scene = SCNScene()
DispatchQueue.main.async
if let filePath = Bundle.main.path(forResource: "smiley_8.16-1", ofType: "dae", inDirectory: "Models.scnassets")
let referenceURL = URL(fileURLWithPath: filePath)
self.contentNode = SCNReferenceNode(url: referenceURL)
self.contentNode?.load()
scene.rootNode.addChildNode(self.contentNode!)
sceneView.scene = scene
sceneView.allowsCameraControl = true
sceneView.backgroundColor = UIColor.gray
我假设我必须在某处设置一个 SCNMorpher 才能访问混合形状。但如果我能得到一些关于如何和在哪里的指示。此外,如果有人知道我如何将 morpher 设置为节点检查器中的属性,那就太好了。
【问题讨论】:
【参考方案1】:您需要将 instance_controllers 添加到 Blender dae
文件中,以便 SceneKit
可以正确读取混合形状。在将文件导入 SceneKit 之前,您可以使用 this great tool 修复文件。然后,形状键出现在 Xcode SceneKit 编辑器中,您可以使用 SCNMorpher
类在代码中进行修改。
【讨论】:
感谢您,我已经取得了一些进展,并且可以在 SceneKit 编辑器中看到混合形状。但是,左右的顶点组似乎存在问题,因此例如“blinkRight”的眨眼动画会眨眼。此外,眼睛的镜像修改器没有导出,因此只有一只眼睛可见。你有什么想法吗? 我尝试使用修改器导出,但它会扭曲混合形状动画。 您的混合形状在 Blender 中是否按预期工作?听起来你的镜像修改器有问题以上是关于如何从 Xcode 中导入的 .dae 中访问混合形状的主要内容,如果未能解决你的问题,请参考以下文章
iOS Xcode 从 Maya 导入 COLLADA .dae 3D 模型,同时尊重枢轴点