gpt4 book ai didi

scenekit - 使用 SCNMorpher 会在 SceneKit 中产生不需要的平面多边形渲染

转载 作者:行者123 更新时间:2023-12-02 22:02:12 27 4
gpt4 key购买 nike

我正在 iOS SceneKit 中使用 SCNMorpher 在从 Blender 导出为 DAE 文件的 3D 面部模型上的不同面部表情之间进行变形。变形本身效果很好。

在我第一次在变形器上调用 setWeight:forTargetAtIndex: 之前,模型会根据需要顺利渲染。

但是一旦我发出该调用,所有多边形边缘都变得可见,这非常没有吸引力。这与在 Blender 本身中从“平滑”渲染切换到“平坦”渲染相同。

图像如下:首先是平滑渲染,预变形,然后是平面渲染,后变形。

Smooth rendering, pre-morph Flat rendering, post-morph

我正在使用兰伯特照明模型(尽管其他模型受到同样的影响),并且 litPerPixel 对于每个目标几何体的每种 Material 都适用。

我不清楚这是否是 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)

最佳答案

刚刚也遇到这个问题了。您需要在变形器上将 unifyNormals 设置为 true。

let morpher = SCNMorpher()
morpher.targets = morphs
morpher.unifiesNormals = true
faceNode.morpher = morpher

关于scenekit - 使用 SCNMorpher 会在 SceneKit 中产生不需要的平面多边形渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402889/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com