首页 > 解决方案 > 使用 subdivisionLevel 平滑 SCNGeometry

问题描述

我们正在开发一款类似于 iPhone 的 Animoji 应用的应用。我们创建了自己的 3d 模型,看起来非常漂亮,唯一的问题是模型的眼睛或鼻子周围有边缘不光滑。模型已在 Maya 3D 软件中准备好。

看截图

截屏

您可以看到眼睛周围和眉毛周围的粗糙边缘。

我们正在尝试以下代码来平滑这些边缘:

let node = self.childNodes[0]
        let geometry = node.geometry
        
        let verticies = self.change(geometry: geometry!)
        geometry?.edgeCreasesSource = SCNGeometrySource(vertices: verticies)
        geometry?.subdivisionLevel = 0
        
        guard let element = geometry?.elements.first else {
            return
        }
        //print(element.debugDescription)
        
        geometry?.edgeCreasesElement = SCNGeometryElement(data: element.data, primitiveType: .line, primitiveCount: element.primitiveCount, bytesPerIndex: element.bytesPerIndex)
        

我们正在尝试设置 subdivisionLevel 以便可以平滑边缘。这是正确的方法吗?或者我们需要做其他事情来以编程方式修复这个问题。当我们在 Maya 中看到 3d Designer 时,它的边缘非常平滑。

标签: ios3darkitscngeometry

解决方案


使用细分级别是平滑几何的正确方法。然而,在代码片段中,您没有设置任何高于 0 的细分级别。如果您使用少量对象,最好使用 SceneKit 编辑器并在属性检查器中设置细分级别。


推荐阅读