我想在我的应用程序中创建一个动画。但是当我和一些设计师接触时,他们不知道如何设计一个动画3D模型。我在哪里可以找到一个可供参考的解决方案?
解决方案是在三维模型的人脸上创建多块骨头,当得到包含人脸表情细节信息的blendShapes of ARFaceAnchor,然后用它来更新部分人脸的骨骼动画。
感谢您的阅读。如有任何建议,我们将不胜感激。
发布于 2017-11-30 22:10:20
首先,要澄清一点:动画是建立在ARKit之上的产品,而不是ARKit本身的特性。没有简单的路径“在这种格式下构建模型,它只是在(或类似)动画中工作”。
尽管如此,有多种方法可以使用ARKit提供的面部表情数据来执行3D动画,所以您如何做更多取决于您和您的艺术家对什么感到满意。记住,对于任何这些,你可以使用尽可能多或很少的混合形状,这取决于你希望动画的逼真程度。
骨骼动画
正如您所建议的,创建与您感兴趣的每个混合形状对应的骨头,以及将混合形状值映射到骨位置。例如,您需要为browOuterUpLeft参数为that定义两个位置,以便其中一个对应于值0.0,另一个对应于值1.0,并且可以在这些状态之间的任何位置对其转换进行调整。(并在网格中设置骨影响,以便在这两个位置之间移动它会产生类似于模型时的参考设计效果。)
变形目标动画
定义多个,拓扑等效的网格,一个为您感兴趣的每个混合形状参数。当混合形状的重量为1.0,所有其他混合形状为0.0时,每个字符都应该表示角色的目标状态。
然后,在渲染时,将每个顶点位置设置为所有混合形状目标中同一顶点位置的加权平均值。伪码:
for vertex in i..<vertexCount {
outPosition = float4(0)
for shape in 0..<blendShapeCount {
outPosition += targetMeshes[shape][vertex] * blendShapeWeights[shape]
}
}上述算法的实际实现更有可能是在GPU上的顶点着色器中完成,因此for vertex部分将是隐式的--您只需要将所有混合形状目标作为顶点属性提供。(或者使用计算机着色器?)
如果您正在使用SceneKit,您可以让苹果通过将混合形状目标网格添加到SCNMorpher来为您实现该算法。
顺便说一句,这就是“混合形状”的由来。和传言说,内置的ARFaceGeometry也是这样构建的。
简单和混合方法
正如您在苹果的示例代码中所看到的,您可以使用更简单的方法--将脸分成单独的部分(SceneKit中的节点),并根据混合形状参数设置它们的位置或转换。
您还可以结合其中的一些方法。例如,卡通人物可以使用变形的目标周围的皮肤变形,但有浮动的2D眉毛,只是通过设置节点的位置动画。
发布于 2018-06-20 11:19:53
检查一下gitHub上的‘'weboji’javascript库.我们雇来创建3D模型的CG艺术家在几分钟内就能适应工作流程。此外,它可能是一种有趣的方法,以避免专有格式和封闭的生态系统问题。
https://stackoverflow.com/questions/47554128
复制相似问题