我在iOS SceneKit中使用SCNMorpher在从Blender导出为DAE文件的3D人脸模型上的不同面部表情之间进行变换.变形本身很好.
在我第一次调用setWeight:forTargetAtIndex:变形器之前,根据需要可以平滑地渲染模型.
但是一旦我进行调用,所有多边形边缘都变得可见,这是非常不吸引人的.这与Blender本身从"平滑"渲染到"平面"渲染的区别相同.
图像如下:首先是平滑渲染,预变形,然后是平面渲染,后变形.

我正在使用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)
Run Code Online (Sandbox Code Playgroud) scenekit ×1