Сглаживание SCNGeometry с использованием subdivisionLevel
Мы работаем над приложением, похожим на приложение 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, чтобы края были сглажены. Это правильный подход? Или нам нужно сделать что-то еще, чтобы исправить это программно. У 3d Designer очень плавные края, когда мы видим его в Maya.
1 ответ
Использование уровня подразделения является правильным подходом для сглаживания геометрии. Однако во фрагменте кода вы не устанавливаете какой-либо уровень подразделения выше 0. Если вы работаете с небольшим количеством объектов, рекомендуется использовать редактор SceneKit и установить уровень подразделения в инспекторе атрибутов.