【发布时间】:2015-10-02 20:52:22
【问题描述】:
我在 iOS SceneKit 中使用 SCNMorpher 在从 Blender 导出为 DAE 文件的 3D 面部模型上的不同面部表情之间变形。变形本身工作正常。
在我第一次在变形器上调用setWeight:forTargetAtIndex: 之前,模型会根据需要平滑渲染。
但是一旦我打了那个电话,所有的多边形边缘都变得可见,这很不吸引人。这与在 Blender 本身中从“平滑”渲染切换到“平面”渲染的区别相同。
图像如下:首先是平滑渲染,pre-morph,然后是平面渲染,post-morph。
我正在使用 Lambert 光照模型(尽管其他模型受到的影响相同),并且 litPerPixel 对每个目标几何体的每种材质都是正确的。
我不清楚这是 SCNMorpher 的已知/故意限制、错误还是我做错了什么。我想知道变形是否以某种方式破坏了通常用于平滑渲染的顶点法线数据。
任何人都可以散发的光芒将不胜感激。 (我想一个可能的解决方法可能是通过插值所有顶点和法线向量来手动进行变形以形成一个新的几何体,但我想这会非常慢)。
相关部分代码如下:
faceNode.geometry = faces.rootNode.childNodeWithName("neutral", recursively: true)!.geometry
scene.rootNode.addChildNode(faceNode)
var morphs: [SCNGeometry] = []
let moods: [String] = "mood1 mood2".componentsSeparatedByString(" ")
for mood in moods {
let moodFace = faces.rootNode.childNodeWithName(mood, recursively: true)!.geometry!
morphs.append(moodFace)
}
let morpher = SCNMorpher()
morpher.targets = morphs
faceNode.morpher = morpher
morpher.setWeight(0.5, forTargetAtIndex: 0)
【问题讨论】:
-
谢谢,我已经提交了。
标签: scenekit