ooO*_*lly 1 unity-game-engine ios scenekit arkit
我想在我的APP中创建一个Animoji.但是,当我与一些设计师联系时,他们不知道如何设计Animoji 3D模型.我在哪里可以找到供参考的解决方案?
解决方法我认为是创建3D模型的脸许多骨头,而当我得到blendShapes的ARFaceAnchor,其中包含脸部表情的详细信息,然后我用它来更新部分人脸的骨骼动画.
谢谢你的阅读.任何建议表示赞赏.
首先,清除空气:Animoji是建立在ARKit之上的产品,绝不是ARKit本身的特征.没有简单的方法可以"以这种格式构建一个模型,它只能在(或类似的)Animoji中工作".
也就是说,有多种方法可以使用ARKit销售的面部表情数据来执行3D动画,因此您的工作方式更多地取决于您和您的艺术家所熟悉的内容.请记住,对于其中任何一种,您可以根据自己想要的动画实际情况使用任意数量的混合形状.
如您所建议,创建与您感兴趣的每个混合形状相对应的骨骼,以及混合形状值到骨骼位置的映射.例如,您需要为browOuterUpLeft参数的骨骼定义两个位置,使得其中一个位置对应于值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]
}
}
Run Code Online (Sandbox Code Playgroud)
上述算法的实际实现更有可能在GPU上的顶点着色器中完成,因此该for vertex部分将隐含在那里 - 您只需要将所有混合形状目标作为顶点属性提供.(或者使用计算着色器?)
如果你正在使用SceneKit,你可以通过将混合形状目标网格输入到中来让Apple为您实现算法SCNMorpher.
顺便说一句,这就是"混合形状"这个名字的来源.有传言说内置ARFaceGeometry也是这样构建的.
正如你可以看到在苹果的示例代码,你可以去更简单-破面分成单独的块(在SceneKit节点)并设置其位置或变换,基于共混物形状参数.
您还可以结合其中一些方法.例如,卡通人物可以使用变形目标来进行嘴部周围的皮肤变形,但是具有浮动的2D眉毛,其仅通过设置节点位置来制作动画.
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |